mobile development
   from developer’s point of view
   Ivan Kirkorau, EPAM Systems
              MS Dev Days 2011
me
reason to go mobile
path to choose
they are different


many pages            activities
navigation            components
UI <-> code           intents
data binding          callback i-f
MVVM (?)              MVC (?)
ask right questions
 doesn’t matter “what is greater?”
does matter “what suits you best!”
#01: leverage your
skills
#02: IDE, tools,
emulator
#03: documentation
#04: lang & libs




      Objective-C
#05: learning curve
• Is it hard to learn basics?
• How far from basics to professional?
• Is it a “pleasant” learning
  experience?
#06: making mistakes
• Does it help avoid mistakes?
• Is it easy to make your code crash?
#07: good-looking UI
 • Is it easy to create good looking UI?


#08: making piece of
s… often will devs make crappy
 • How
  apps?
#09: standard & custom
• Is it easy to implement common
  tasks?
  – navigating between screens
  – displaying lists
  – loading data from web service
  – parsing xml
• Is it easy to customize?
#10: developer image
codename “Mango”
  what’s new and what’s old
reading Manga
my favorite features
 • LINQ (to objects, to XML, to HTML)
 • data binding
 • lambda expressions

having difficulties
 • everything is asynchronous
 • BACK button and tombstoning
local database
• API:      LINQ to SQL
• Design:   in code, attributes
• Store:    Isolated Storage



• article on MSDN
background …
• AGENT
 – PeriodicTask (~25 sec)
 – ResourceIntensiveTask (~10 min)


• DOWNLOADING
 – download/upload up to 5 requests
 – control execution
tiles & notifications
 •   tiles updates
 •   deep linking
 •   multiple tiles per application
 •   number on tile
 •   local toast notification
 •   … notification services
network
• sockets API
• TCP
• UDP
marketplace
easier than before, but required
         …fast forward
submission walkthrough
• app hub account + ready .xap file
• description and comments
  – dev and testing comments
• upload images (some unexpected sizes)
  – should have high quality master images
• categories and pricing
submit
back & back again
back = the source of all evil
i. can you exit the app?
ii. “back” cycles?
iii. loss of state and crash
iv. press back in unexpected places
v. lost handlers/bindings
loss of internet
if your main action is to download stuff
– test the connectivity loss!
how to simulate connectivity loss?
• connect device to a computer
• remove the cable/WiFi
  – when connected device ALWAYS uses
    PC internet connection
memory limit
on devices your app must not use
>90Mb at peak.
    how to get memory tests?
• use DeviceStatus
check ApplicationPeakMemoryUsage
check ApplicationCurrentMemoryUsage
exception handling
• do not CRASH!
• notify the user with a solution:
  “try again later”
  “check your internet connection”
  “contact support@…”
black & white
• test dark and light themes
  – some icons may look unexpectedly white
  – some colors may not correlate well
capability testing
• use “CapabilityDetection.exe”
  – c:Program Files (x86)Microsoft SDKs Windows
    Phonev7.0ToolsCapDetectCapabilityDetection.exe

• remove all unnecessary stuff
  – debug libs
  – test data
  –…
getting feedback
you should think about users that will
try to find your app, download and use
• provide keywords for search
• provide contact information in the
  description or inside the app
look up statistics
• number of downloads (AppHub)
  – results come 1 week late
• ads – pubcenter/adMob site
• preemptive stats
  – http://www.preemptive.com/know-
    more/application-monitoring
marketplace test kit
• select WP7.1 project
• [menu] Project->Open Marketplace…
conclusion
• developer focused tools
• powerful UI with Silverlight/XNA
• requires
q&a

Dev days. windows phone development

  • 1.
    mobile development from developer’s point of view Ivan Kirkorau, EPAM Systems MS Dev Days 2011
  • 2.
  • 3.
  • 4.
  • 5.
    they are different manypages activities navigation components UI <-> code intents data binding callback i-f MVVM (?) MVC (?)
  • 6.
    ask right questions doesn’t matter “what is greater?” does matter “what suits you best!”
  • 7.
  • 8.
  • 9.
  • 10.
    #04: lang &libs Objective-C
  • 11.
    #05: learning curve •Is it hard to learn basics? • How far from basics to professional? • Is it a “pleasant” learning experience? #06: making mistakes • Does it help avoid mistakes? • Is it easy to make your code crash?
  • 12.
    #07: good-looking UI • Is it easy to create good looking UI? #08: making piece of s… often will devs make crappy • How apps?
  • 13.
    #09: standard &custom • Is it easy to implement common tasks? – navigating between screens – displaying lists – loading data from web service – parsing xml • Is it easy to customize?
  • 14.
  • 15.
    codename “Mango” what’s new and what’s old
  • 16.
  • 17.
    my favorite features • LINQ (to objects, to XML, to HTML) • data binding • lambda expressions having difficulties • everything is asynchronous • BACK button and tombstoning
  • 18.
    local database • API: LINQ to SQL • Design: in code, attributes • Store: Isolated Storage • article on MSDN
  • 19.
    background … • AGENT – PeriodicTask (~25 sec) – ResourceIntensiveTask (~10 min) • DOWNLOADING – download/upload up to 5 requests – control execution
  • 20.
    tiles & notifications • tiles updates • deep linking • multiple tiles per application • number on tile • local toast notification • … notification services
  • 21.
  • 22.
    marketplace easier than before,but required …fast forward
  • 23.
    submission walkthrough • apphub account + ready .xap file • description and comments – dev and testing comments • upload images (some unexpected sizes) – should have high quality master images • categories and pricing submit
  • 24.
    back & backagain back = the source of all evil i. can you exit the app? ii. “back” cycles? iii. loss of state and crash iv. press back in unexpected places v. lost handlers/bindings
  • 25.
    loss of internet ifyour main action is to download stuff – test the connectivity loss! how to simulate connectivity loss? • connect device to a computer • remove the cable/WiFi – when connected device ALWAYS uses PC internet connection
  • 26.
    memory limit on devicesyour app must not use >90Mb at peak. how to get memory tests? • use DeviceStatus check ApplicationPeakMemoryUsage check ApplicationCurrentMemoryUsage
  • 27.
    exception handling • donot CRASH! • notify the user with a solution: “try again later” “check your internet connection” “contact support@…”
  • 28.
    black & white •test dark and light themes – some icons may look unexpectedly white – some colors may not correlate well
  • 29.
    capability testing • use“CapabilityDetection.exe” – c:Program Files (x86)Microsoft SDKs Windows Phonev7.0ToolsCapDetectCapabilityDetection.exe • remove all unnecessary stuff – debug libs – test data –…
  • 30.
    getting feedback you shouldthink about users that will try to find your app, download and use • provide keywords for search • provide contact information in the description or inside the app
  • 31.
    look up statistics •number of downloads (AppHub) – results come 1 week late • ads – pubcenter/adMob site • preemptive stats – http://www.preemptive.com/know- more/application-monitoring
  • 32.
    marketplace test kit •select WP7.1 project • [menu] Project->Open Marketplace…
  • 33.
    conclusion • developer focusedtools • powerful UI with Silverlight/XNA • requires
  • 34.

Editor's Notes

  • #2 Добрый день,Меня зовут Иван Киркоров и сегодня я хочу поделиться своим взглядом на мобильную разработку.И немного отойти от корпоративного подхода, а взглянуть глазами одного конкретного разработчика.
  • #3 Я работаю в компании ЕПАМ уже 5 лет. И сейчас я являюсь руководителем «Мобильной Лаборатории», подразделения, где организуется и происходит обучение мобильных специалистов.Лаборатория стартовала недавно. у меня было только 2 выпуска, под Андроид и под iOS. Но за это время я успел изучить и разобраться с этими платформами и добавить их в копилку знаний к Windows Phone.Так получилось, что всерьез интересоваться WP7 я начал в середине прошлого года и сделал так, чтобы поменять направление деятельности и превратиться в мобильного разработчика.И на это у меня было несколько причин.
  • #4 Каждый для себя сам решает кем он хочет быть.Для меня ключевым был анонс Windows Phone и возможность программировать на Silverlight.Я давно хотел сделать какой-то свой проект. И я четко осознавал, что единственное место, где можно сделать достойную вещь сейчас (для одного разработчика) – это мобильный рынок. Можно сделать маленький проект с небольшим числом функциональностей и он все равно будет иметь смысл. И не потребуется почти никаких вложений (ни на хостинг, ни на дизайнера, ни на что-то еще).С выходом WP7 я увидел, что могу легко переиспользовать свои скиллы и начать что-то делать уже сейчас.
  • #5 Сейчас перед каждым будущим, да и текущим мобильным разработчиком стоит выбор. Выбор платформы, который мы посвятим самое дорогое, что у нас есть – наше время (и чаще всего наше свободное время, ибо на работе есть работа и ее надо работать)
  • #6 Платформы разные.И с точки зрения навигации внутри приложения, и в построении внутренней архитектуры проекта и в подходе к реализации функционала и стандартных задач.Например, в WP7 у нас есть множество условно независимых страниц и между ними делается навигация в обе стороны.Есть мощнейшие механизмы Silverlight – DataTemplates, DataBinding, разделение кода и UiюИ достаточно неопределенный подход к архитектуре.В iOS все намного проще и прямолинейней. Один экран, и множество магического API с View Controller-ами и делегатами.Необычный язык программирования и мир полуавтоматического memory management с reference counting. Несмотря на «магию» и необзодимость многое запоминать и знать – API достаточно хорошо продуман и реализован. Стандартные вещи делать легко, кастомные – ужасно сложно.Андроид имеет отлично продумаю целостную архитектуру платформы, все приложения состоят из 4х типов компонентов, которые могут общаться при помощи Intent-ов. Позволяет сделать в приложении почти все…. жаль, что в основном это все делается не слишком просто. Несмотря на использование Java…В общем они совсем разные.
  • #7 Но нет смысла спорить кто круче. Меряться фичами или девайсами.Наш вопрос – что мне как разработчику подходит больше.Для этого надо задавать подходящие вопросы и сравнивать соответствующие моменты.
  • #8 Мобильные платформы очень отличаются от всего остального программирования. Но есть шанс переиспользоватьскиллы которые уже есть.iPhone – точно нет. придется учить с нуля новую платформу, необычный язык. Имея хорошую базу программирования это в принципе несложно. Язык С тоже плюс.Android – кажется, что знание Java должно помочь. Но это увы не так. Андроид совершенно нестандартная платформа. Java дает только синтаксис, но он очень примитивен. Разве что умение пользоваться Eclipse чего-то стоит.WP7 – сложная платформа, но если вы знаете Silverlight – вы практически уже там. В этом огромный плюс, так как можно практически 100% переиспользовать знания по Silverlight.
  • #9 Здесь можно провести целый час обсуждая инструменты. Но в интернете и так уже достаточно много статей.Вывод один: Microsoft предлагает лучший набор инструментов в интегрированной среде Visual Studio.
  • #10 У каждой платформы свой подход к документации.В принципе проблемы у всех одинаковые – документация – это reference. Какие методы есть и для чего каждый из них, но как ими правильно пользоваться нигде толком не написано.Guide статьи очень полезны и есть везде.В Андроид документацией можно считать исходный код платформы.Поэтому особую ценность приносят книги и статьи.Стоит отметить, что до определенного Apple заставляла разработчиков быть под NDA и это реально сыграло роль – что статей в нете было очень мало. сейчас ситуация вполне нормальная.
  • #11 C#не текущий момент самый продвинутый и мощный язык, среди универсальных языков.Java – вероятно самый распространенный и самый целостный язык. Его легко изучить, он базируется на строгих принципах, но этого не достаточно, чтобы программировать. Требуется знать библиотеки.
  • #12 Теперь вопросы:Общая сложность обучения. Это личный вопрос для каждого.А вот с ошибками – тут все просто. Проще всего сделать ошибку – это работа с памятью в iPhone.
  • #13 Сделать хорошо можно в любой системе. Проще всего там, где либо заранее многое реализовано(iPhone) или где легко настраивать UI (WP7)А вот сделать некачественное приложение легче всего в Android. А в iPhone или WP7 это получится если не придерживаться UI Guidelines.
  • #14 И важнейшее. При написании приложений есть набор задач, которые надо решать постоянно.На них тратится большая часть сил и времени.И конечно, требуется сделать что-то нестандартное. Silverlight имеет уникальный механизм DataTemplate. Который позволяет менять внешний вид полностью, не трогая функционал.
  • #23 На самом деле, при должной сноровке написать можно многое. И в конце концов можно сделать приложение своей мечты…И тут оказывается, что последний шаг не такой и маленький.
  • #24 http://create.msdn.com/en-US/home/about/app_submission_walkthroughОчень важно подойти серьезно и подготовить адекватное описание и качественные картинки.После сабмита ваше приложение будет тестироваться на стороне MS как автоматическими инструментами, так и ручное тестирование. Причем у них есть Test Plan, и во многом открыт (только я об этом не знал на тот момент) и им можно пользоваться. Application Certification Requirements for Windows Phonehttp://msdn.microsoft.com/en-us/library/hh184843(v=VS.92).aspxТехнические требования и тесты:http://msdn.microsoft.com/en-us/library/hh184840(v=VS.92).aspx
  • #26 1)Я 4 раза пересабмитывал приложения из-за того, что не полностью оттестировал back.2) Другое приложение я исправлял дольше чем писал изначально, лишь бы back срабатывал адекватново время возвращения из tombstoningнекоторые биндинги терялись и конечно, могут потеряться eventhandler-ы которые не были пересозданы после возвращения.
  • #28 use dnp.Counters.dll http://dotnetprofessional.com/blog/post/2010/09/27/Debug-Memory-Counter-for-Windows-Phone-7.aspx (switch off status panel to see it)
  • #36 http://www.preemptive.com/know-more/application-monitoring