В настоящее время существуют три подхода к мобильной разработке: 1. Native, 2. Hybrid, 3. Cross-platform. У каждого из них есть свои плюсы и недостатки, поэтому в ситуации, когда есть возможность выбора или есть возможность оказать влияние на выбор заказчика проекта, необходим аргументированный подход.
В докладе будут рассмотрены основные решения, представленные на рынке в настоящее время (в т.ч. Xamarin 4 и ReactNative), а также даны рекомендации по выбору оптимального подхода в зависимости от особенностей проекта.
Автор доклада: Виктор Котов — iOS разработчик, компания Аркадия. В ИТ-индустрии более 20 лет, начинал с разработки специализированной САПР, работал менеджером проектов, последние пять лет занимается мобильной разработкой (бизнес-приложения, social networking).
2. Виктор Котов
20+ лет в ИТ
5+ лет в мобильной
разработке (iOS)
victor.kotov@arcadia.spb.ru
2
Немного о себе
3. Аркадия / Мобильная разработка
• Разработка iOS приложений с 2009, около 20 проектов
• Разработка Android приложений с 2011, около 10 проектов
• Cross-platform (hybrid) разработка с 2012, около 5 проектов
3
http://www.softwarecountry.com/our-experience/
5. Мобильная разработка / Native
• Аппаратные требования: компьютер с Mac OS X
• Языки программирования: Objective-C, Swift
5
iOS
6. • AppStore $99 в год
• Физические лица
• Организации (D-U-N-S Number required)
• Enterprise $299 в год
• Volume Purchase Program for Business
• VPP Store
• Доступно не во всех странах*
6
iOS
* https://deploy.apple.com/qforms/open/register/country/avs
Мобильная разработка / Native
7. • Аппаратные требования : компьютер с любой
современной ОС
• Язык программирования: Java
7
Android
Мобильная разработка / Native
8. • Google Play Store $25 в год
• Google Apps for Work от $5 за один аккаунт в месяц
• Google Play for Work Store
• Enterprise Mobility Management via Google Partners*
8
Android
* https://www.google.com/work/android/partners/index.html?activeTab=emm
Мобильная разработка / Native
13. http://phonegap.com/
13
Pros:
o Один код для всех платформ (iOS, Android, Windows Phone,
Blackberry, mobile web)
o Cloud Build Service https://build.phonegap.com/
o Поддержка плагинов
Cons:
o “Из коробки” слабая поддержка Native UI & transitions
o Отдельный CSS для каждой платформы
o WebView не гарантирует одинаковый результат
o Недостаточно документации
. / Альтернативы / PhoneGap
14. 14
Pros:
o Дополнительно при помощи CefSharp получили приложение
Windows 7+
o ngTouch или FastClick помогли избавиться от лагов
Cons:
o Многие плагины не поддерживаются разработчиками, баги
пришлось исправлять самостоятельно (Obj-C & Java код)
o Проблема с текстовым полем – пришлось добавлять нативный
код/интерфейс
. / Альтернативы / PhoneGap / Аркадия
15. http://xamarin.com/
15
Pros:
o Xamarin Test Cloud http://xamarin.com/test-cloud
o Xamarin Insights http://xamarin.com/insights
o Xamarin.Form 2.0
o Native libs&SDKs via Objective Sharpie
o Xamarin Inspector
o UITest 1.0 C# framework for UI tests + Test Recorder
Commercial licenses ($1000 per developer per
platform per year).
Free Starter Licenses - with poor functionality.
. / Альтернативы / Xamarin
18. 18
Cons:
o Дополнительные ограничения для UI
o Утечки памяти
o Дополнительные компоненты и библиотеки распространяются
в виде DLL https://components.xamarin.com/
o Debug exceptions малоинформативны
o XAML (Xamarin.Forms UI) редактируются только в текстовом
виде
. / Альтернативы / Xamarin
19. https://facebook.github.io/react-native/
http://www.reactnative.com
19
Pros:
o iOS&Android приложения на JavaScript
o Native UI & UX
o Возможность обновления приложения без ревью
Cons:
o Имеет зависимость от других инструментов
o Debugging issue https://github.com/facebook/react-
devtools/issues/229
o Пока недостаточно ресурсов (книг/документации)
o Юридические аспекты требуют внимания
. / Альтернативы / React Native
22. Что же выбрать?
22
Native Xamarin Web Apps Hybrid
Should work offline
Native apps development background
Simple UI/Functionality
Heavily customized UI / gestures
Has to be fast prototyped for few
platforms
Has website as fully functional
alternative
Going to use platform specific
features
Has to be fast and responsive. UX at
the first place.
Has to be secure
Knowledge base, Developers
Communities
Cost for few platforms
23. Ссылки
23
o http://mashable.com/2015/01/02/mobile-trends-2015/ Mobile trends 2015
o https://www.icsalabs.com/blogs/will-promise-hybrid-mobile-apps-outweigh-new-security-concerns
http://mostconf.org/2014/papers/s3p5.pdf Code Injection Attacks on HTML5-based Mobile Apps
o http://hackingthroughcomplexity.nl/tag/hybrid-apps/ The other, darker side of hybrid apps
o https://developer.salesforce.com/page/Native,_HTML5,_or_Hybrid:_Understanding_Your_Mobile_Ap
plication_Development_Options
o http://developer.xamarin.com/guides/cross-platform/xamarin-forms/creating-mobile-apps-
xamarin-forms/
o Презентация Xamarin 4 https://goto.webcasts.com/viewer/event.jsp?ei=1084533
o https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/objective_sharpie/
o React Native https://github.com/facebook/react-native
o React Native sandbox https://rnplay.org/
o http://www.slideshare.net/Polidea/react-native-building-native-ios-apps-with-javascript?related=1
o https://github.com/jondot/awesome-react-native
Editor's Notes
Separate layouts are needed for all platforms to build a native look’n feel interface for the user
In Android application state changes are tightly bind with certain events happening in the code (some actions should be executed when application appears on the screen and when it hides)
+ Javascript, который знаком
- Периодически необходимо все таки править плагины-обертки для кордовы и читать Objective-C и Java код
- Многие плагины с багами или недоработками, при том мантейнеры их забросили и даже не принимают пул риквесты с правками
+ Кроссплатформенная разработка с почти идентичным кодом
- Код должен учитывать специфичное для каждой платформы поведение, а так же различно стилизовать. Не сталкивался, но думается какие-то вещи невозможно описать единым кодом, и придется выносить ios/android в отдельные ветки с различным кодом и разметкой => потерять весь смысл использования cordov-ы, тогда уж лучше react native/native script/итп
+ Можно разрабатывать ios приложения без Mac
- Mac все таки понадобится для некоторых операций
Конкретно в моем случае и не первый раз сталкивался – заказчики считают, что любой сайт можно завернуть в cordova и оно заработает превосходно. Это не так J
Очевидный – это позволило разработывать для нескольких мобильных платформ разом.
Менее очевидный - нам удалось использовать тот же код (JS, HTML, CSS) и CefSharp и получить отличное Windows приложение, способное работать с Windows 7 и выше.
Используя ngTouch (или FastClick) добились перфоманса сравнимого с нативным.
Минусы:
Верстка: не всегда какие то привычные для нативной разработки вещи легко (или вообще возможно) осуществить.
Столкнулись с проблеммой, что веб средствами нельзя отключить авто-коррекшен и авто-предикшен у едиторов, у нас приложение для сдачи экзамена, поэтому отключить такие фичи было очень важно. Из-за этого нам пришлось отказаться от CKEditor и использовать нативный едитор который отрисовывается поверх PhoneGap контейнера и уже нативными средствами отключить авто-коррекшен и авто-предикшен.
Test-Cloud – from $1000 per month for up 2 apps account
Insights – free while beta
Inspector - As long as the Inspector addin/extension is installed and enabled in your IDE, we are injecting code into your app every time it starts in Debug mode. If you notice any strange behavior in your app, please try disabling or uninstalling the Inspector addin/extension, restarting the IDE, and rechecking. And please file bugs to let us know!
Inspector – similar to Xcode Debug View Hierarchy but with editing capabilities
Test-Cloud – from $1000 per month for up 2 apps account
Insights – free while beta
Test-Cloud – from $1000 per month for up 2 apps account
Insights – free while beta
Test-Cloud – from $1000 per month for up 2 apps account
Insights – free while beta
Inspector - As long as the Inspector addin/extension is installed and enabled in your IDE, we are injecting code into your app every time it starts in Debug mode. If you notice any strange behavior in your app, please try disabling or uninstalling the Inspector addin/extension, restarting the IDE, and rechecking. And please file bugs to let us know!
Inspector – similar to Xcode Debug View Hierarchy but with editing capabilities
by default its not possible to have two RN projects opened if they are using same RN framework projects.
Facebook is very careful with RN, quote from source files of an example project: The examples provided by Facebook are for non-commercial testing and * evaluation purposes only.
http://stackshare.io/stackups/nativescript-vs-ionic-vs-react-native
По поводу обновлений, ссылаются на следующий пункт: 3.3.2 An Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code and interpreters are packaged in the Application and not downloaded. The only exception to the foregoing is scripts and code downloaded and run by Apple's built-in WebKit framework, provided that such scripts and code do not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store.
by default its not possible to have two RN projects opened if they are using same RN framework projects.
Facebook is very careful with RN, quote from source files of an example project: The examples provided by Facebook are for non-commercial testing and * evaluation purposes only.
http://stackshare.io/stackups/nativescript-vs-ionic-vs-react-native
by default its not possible to have two RN projects opened if they are using same RN framework projects.
Facebook is very careful with RN, quote from source files of an example project: The examples provided by Facebook are for non-commercial testing and * evaluation purposes only.
http://stackshare.io/stackups/nativescript-vs-ionic-vs-react-native