среда, 16 июля 2014 г.

БИТВА ТИТАНОВ


Android vs iOS. Извечная тема для интернет-баталий, которая уже успела порядочно всем поднадоесть. Не спешите пропускать текст этой статьи и сразу же переходить к изливанию своего единственно правильного мнения в комментариях. Сегодня мы снова поговорим о том, какая система лучше, но совсем в другом ключе.

Разработчики — те, кто создают ключевую часть любой платформы, то есть приложения. Именно от качества инструментов разработки, предоставляемых им платформой, зависит конечный результат. Так под какую систему лучше писать? На этот вопрос ответит опытный разработчик приложений, успевший засветиться как в App Store, так и в Google Play.

Выбор платформы — фундаментальная проблема для любого нового проекта. Android или iOS? С учётом последних новостей о том, что Android успешно захватил 80% рынка, выбор становится ещё сложнее. Не имеет значения, что менеджеры и прочие не слишком осведомлённые с техническими аспектами вопроса люди думают об этом. Другое дело — разработчики.

Каково их мнение? Преимущество той или иной платформы здесь напрямую зависит от её способности сделать их жизнь лучше.

И под словом «их» я имею ввиду «нашу». Помимо авторской деятельности на TechCrunch я занимаюсь разработкой в HappyFunCorp. Кроме того, не так давно я создал дуэт опенсорсных приложений в рамках своего проекта-любимчика. Именно эти приложения я буду использовать для сравнения.

Для справки: ранее я успел написать несколько Android и iOS приложений, как для личных нужд, так и по работе. В частности, я написал мобильные клиенты для своего новостного агрегатора Scanvine, который собирает необычно популярные истории из социальных медиа. Исходники моих приложений можно найти на Github (Android | iOS), а сами приложения доступны в Google Play и App Store.

Ну что же, пусть начнётся битва.

Среда

Вы по-прежнему можете писать код в текстовых редакторах, и многие так делают до сих пор, но с точки зрения производительности куда полезнее использовать интегрированную среду разработки (Integrated Development Environment — IDE).

В случае с Apple у нас есть Xcode, и работать в этой среде — удовольствие. Она гибкая, быстрая, мощная и способна помогать, не становясь излишне навязчивой. И она же становится всё лучше, несмотря на сложные и параноидальные меры, предпринимаемые Apple с целью удержания полного контроля над iOS приложениями и устройствами. Отладчик работает плавно, а симулятор — быстр и отзывчив.

А что насчёт Android? Ох, Android. На данный момент актуальной средой разработки под него является Eclipse, кастомизированный кучкой Android плагинов, и это ДО НЕПРИЛИЧИЯ плохо. Медленный, неуклюжий, нелогичный, зачастую откровенно непонятный, плохо продуманный, излишне сложный — сущий бардак. Его отладчик настолько неудобен, что большую часть времени я провожу в ковыряниях с логами, в то время как с Xcode в моём распоряжении настоящий инструмент-охотник за багами. Не стоит забывать и о эмуляторе Android, которому сначала требуется несколько минут для загрузки, а потом он не может подключиться к ADB.

Справедливости ради нужно сказать, что Google знает об этой проблеме, и они работают над новой Android Studio IDE:

В настоящее время Android Studio доступна в качестве раннего превью. Некоторые функции ещё не доделаны, либо не реализованы, что может вызвать ошибки. Если использование незаконченного продукта вызывает у вас неудобство, то вы можете загрузить и продолжить использовать ADT Bundle (Eclipse с плагином ADT).

Приятно видеть, что они работают над проблемой, но всё же удивительно — через 4 с половиной года после покупки моего первого Android подобный бардак по-прежнему является пределом совершенства, которого смогла достичь среда разработки под Android.

Тут побеждает iOS, безоговорочно.

Конфигурирование

Под внешним лоском Xcode и Objective-C скрываются ужасы Лавкрафта из эпохи программирования семидесятых. Шучу, я шучу… но всё же. Макросы и файлы заголовков, проекты, цели, схемы и конфигурации сборки, и ужасающе-пугающий список параметров сборки. А ещё невероятные открытия в стиле «Оу, ваш сторонний код не поддерживает ARC? Просто добавьте флаг -fno-objc-arc». Просто? Нет!

В Android у тебя есть один файл манифеста, и Eclipse как правило полностью пересобирает приложение каждый раз, когда ты сохраняешь какой-либо файл. Мне бы хотелось большей ясности в случаях, когда ты, к примеру, получаешь сообщение об ошибке из-за того, что некорректно настроил права, но это незначительный недочёт. Конфигурирование Android приложений выполняется просто и элегантно.

Тут побеждает Android.

Дизайн интерфейса

Казалось бы, здесь Apple безусловно выйдет победителем. С их конструктором ты получаешь возможность легко и быстро собрать простой и красиво выглядящий интерфейс. Проблема в том, что чем дольше я работал с конструктором, тем меньше он мне нравился. Это ещё один момент, когда открывается сложность конфигурирования — инструмент идеально подходит для создания простых вещей, но с развитием приложений простые вещи становятся вдруг сложными, и мне действительно не нравятся эти многоэкранные Storyboards, которые Apple добавила примерно год назад.

В теории Android снабжается сопоставимыми инструментами визуализации, но на практике ты пишешь XML файлы, содержащие инструкции по отрисовке, что при определённом везении приводит к правильному отображению приложения на всём многообразии форматов экранов Android устройств. Apple двигается тем же путём, и их Auto Layout явно затачивается под будущее расширение вариаций экранов на iOS устройствах.

В то же время Android предоставляет разработчикам наборы иконок, тогда как iOS разработчики вынуждены обращаться к сторонним сервисам, либо рисовать собственные значки.

В этом раунде победителя выбрать сложнее, но я отдам предпочтение iOS по двум причинам. Во-первых, она по-прежнему гораздо проще — всего 3 размера экрана (включая iPad) и 2 формата соотношения сторон. Многообразие Android в этом плане добавляет сложностей. Второй момент заключается в привлекательности дефолтных визуальных элементов (всплывающие меню, сообщения и так далее). У iOS всё это выглядит куда привлекательнее.

Тут побеждает iOS.

Язык

Android приложения пишутся на Java, iOS — на Objective-C. Существуют исключения наподобие Xamarin, но в большинстве случаев такое разделение справедливо.

Я учился писать на Java, и поначалу особо не думал об Objective-C, во многом из-за его громоздкости.

Строка вроде:

String s2 = s1.replace(“abc”,”xyz”);

Превращается в нём в:

NSString *s2 = [s1 stringByReplacingOccurrencesOfString:@"abc" withString:@"xyz"];

Но в процессе знакомства этот язык мне очень понравился. Он лучше и чище, чем Java.

При этом у Java тоже есть плюсы. К примеру, более простое отслеживание и отлавливание ошибок. Несколько последних лет у Android было ещё одно очень серьёзное преимущество в плане сбора мусора, то есть автоматического очищения памяти от ненужных объектов, но теперь у iOS умеет то же самое, и преимущество фактически сошло на нет. С учётом последнего факта победа здесь достаётся iOS.

Тут побеждает iOS.

API

У Android и iOS есть огромные библиотеки программного обеспечения, доступные разработчикам, и если говорить в общем, то они довольно схожи: API для работы функций самого телефона и связи, API для доступа в сеть, арсенал средств просмотра, включая мощный WebView — практически аналог полноценного браузера.

Большинство работы при этом выполняется контроллерами, и в общем iOS ViewController является эквивалентом Android Activity.

Чего действительно нет у Android, так это полноценного аналога фреймворка Core Data. Да и в целом система чище и лучше спроектирована. Для примера просто сравните этидва класса в iOS, которые выполняют большую часть работы в приложении, с этими тремяэквивалентными классами в Android. В конце концов, мне гораздо больше нравится работать с iOS CollectionViewController, нежели с Android ListAdapter.

Ещё одна важная метрика: количество строк кода. Мои версии приложений для обеих платформ фактически идентичны по возможностям и функциям, но в iOS на их реализацию потребовалось 1596 строк моего кода, включая файлы заголовков, а при создании Android версии при тех же функциях потребовалось 2109 строк. Разница в 32%.

Тут побеждает iOS.

Интернет

В наши дни подавляющее большинство приложений являются скорее проводниками в Интернет, нежели самостоятельными программами. Это очень важный момент, и его стоит рассмотреть отдельно. В арсенале обеих систем есть множество инструментов и API для реализации взаимодействия с Сетью. Также обе платформы реализуют практически полноценный браузер, который можно встроить в приложение как угодно и куда угодно.

Соединения должны работать в фоне и не мешать самому приложению. Для реализации мультипоточности в Android используется AsyncTask. Он работает очень хорошо и позволяет легко определить, находится ли пользователь в Сети в данный момент. iOS также располагает подобными возможностями, но они реализованы на довольно низком уровне и не удовлетворяют потребностям разработчика.

Однако ,существует множество сторонних библиотек с открытым исходным кодом, и они делают жизнь куда проще. Я использовал AFNetworking, и она работает так же прекрасно, как о ней говорят в рекламе.

Тут побеждает Android по умолчанию, и iOS при использовании сторонних библиотек.

Шаринг

Насколько легко вам расшарить что-либо из конкретного приложения в Facebook, Twitter, Evernote и прочие сервисы? Казалось, что это будет первый раунд, в котором Android выиграет 100% нокаутом: у неё есть мощная система взаимодействия между приложениями под названием Intents, да и в общем Android куда более лоялен к запросу и передаче данных между приложениями.

В общем же Apple значительно догнала конкурента в возможностях шаринга. Можете не верить мне на слово, посмотрите код функции «Поделиться историей» в Scanvine наAndroid и на iOS. Единственная причина, по которой код iOS больше — наличие в нём более гибкого трекинга из Google Analytics, нежели в Android.

Тут ничья.

Фрагментация

Тут вообще не нужно много говорить. Впрочем, Google пытается использоватьинтересную стратегию дефрагментации, так что в скором времени данный пункт можно будет пересмотреть.

Тут побеждает iOS.
Публикация приложения

Публикация Android приложения исключительно проста. Инструмент в Eclipse позволяет быстро собрать приложение, и у тебя в руках уже есть готовый apk файл. Отправляйте его по емейлу, размещайте на сайте, либо загрузите в Google Play, сделав его доступным по всему (почти) миру буквально за час. Тут открывается возможность отслеживать статистику установок и креш-репорты вплоть до конкретной строчки кода, из-за которой приложение вылетает. При необходимости апдейт можно выкатить мгновенно.

Публикация в App Store — это кошмар. Мой друг советует выделять в календаре разработки как минимум день на войну с сертификатами и профилями дистрибуции. Не важно, сколько раз вы делали это раньше, и насколько проще пытается сделать этот процесс очередная версия Xcode — у вас всё равно будет много проблем. Тестирование приложения станет ещё большей проблемой, если только не использовать TestFlight. Добавим к этому iTunes Connect, который не идёт ни в какое сравнение с Google Play Developer Console.

Тут побеждает Android, безоговорочно.

Победитель

Им становится iOS, причём с некоторым отрывом. У Android есть преимущества, но в целом написать хорошее приложение под iOS остаётся куда проще, чем под Android. Добавьте сюда тот факт, что пользователи iOS более платёжеспособны, и вы получите ответ на вопрос, какая платформа должна стать приоритетной для стартапа. Вероятно, разрыв сократится после выхода Android Studio, позволив таким образом решить некоторые проблемы… но не все.

Кстати, мой основной телефон — Nexus 4, и я им очень доволен.

(via)

Комментариев нет:

Отправить комментарий