Сервисы дистрибуции мобильных приложений для iOS. Часть 1: TestFlight

С каждым годом становится всё очевиднее, что для распространения тестовых версий iOS-приложений нужны специализированные сервисы. Это актуально не только для компаний, занимающихся разработкой приложений в «промышленных масштабах», но и для инди-разработчиков. Причины: увеличение количества устройств с «нестандартным»/«не кратным» размером экрана, отличия в архитектуре центрального и графических процессоров — всё то, что раньше было повседневностью для разработки под Android, теперь становится справедливым и для iOS.Исторически самым популярным сервисом дистрибуции являлся TestFlight — практически идеал, как в техническом отношении, так и в юзабилити. Однако, после приобретения компанией Apple в начале 2014 года, сервис претерпел ряд неоднозначных изменений, которые с одной стороны сказались негативно на его позиции лидера, а с другой дали шанс альтернативным сервисам побороться за первое место и предложить как минимум равноценную замену, а может быть и что-то более удобное и функциональное.

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

В обзоре участвуют следующие сервисы (в таком порядке и будут публиковаться части обзора):

Apple TestFlight HockeyApp Ubertesters Crashlytics (как часть Fabric) TestFlight старой версии не будет рассмотрен, так как хотя он по-прежнему работает и доступен по адресу www.testflightapp.com/, использование его в долгосрочной перспективе не имеет смысла по ряду причин:

нет никаких гарантий, что Apple не приостановит или не прекратит его работу в любой момент SDK сервиса не доступно для скачивания, более того невозможно использовать сервис, если приложение использует SDK сервис больше не является кросс-платформенным, поддерживается только распространения приложений для iOS (подробнее) Важно! Буквально накануне публикации статьи команда TestFlight (старой версии) разослала уведомление, в котором сообщается, что старый сервис прекратит свою работу 26 февраля 2015 года (подробности).Система оценки: сервисы будут оценены по 10-балльной шкале по каждому из разделов (Регистрация и интеграция, Основной функционал, Дополнительный функционал, Continuous Integration). Суммарная оценка позволит определить победителя (итоговое заключение войдет в последнюю часть обзора).

Регистрация и интеграция Для использования сервиса кроме аккаунта разработчика (iOS Developer Program) необходимо получить доступ к iTunesConnect. Функционал зависит от роли (группы), к которой относится используемый аккаунт iTunesConnect. Пользователи из группы Technical могут: включать/отключать режим TestFlight Beta Testing для приложений (вкладка Prerelease) выбирать тестеров из списка доступных Internal Testers, но не имеют возможности формировать этот список на странице iTunes Connect → Users and Roles → TestFlight Beta Testers → Internal формировать список внешних тестеров My Apps → APP → Prerelease → External Testers (но для распространения версий для внешних тестеров приложение должно пройти ревью в Apple) Пользователи из группы Admin обладают теми же правами, что и пользователи группы Technical, а также могут добавлять новых пользователей в список Internal Testers.

На данный момент установка или использование какого-либо специализированного SDK не требуется.

9adb85f746ff4e76ba4d3062513b07f6.png2bddb76046dd4950804c3ddf23361fa9.pngec2ed210341c4fcd8905e92968aa0fb3.png

Оценка: 8/10.

Основной функционал Если сравнивать новую версию TestFlight с тем, что было доступно разработчикам ранее в рамках стандартных сервисов Apple, то она, в чем-то, несомненно, является шагом вперед. Так, например, количество тестеров увеличено с условных 100 до 1125 (из которых 100 — это доступные и раньше устройства для AdHoc распространения, 25 — это внутренние тестировщики (Internal Testers), а 1000 — внешние (External Testers)), причем если ранее привязка осуществлялась к устройству, то теперь уникальным идентификатором является Apple ID, а значит каждый тестер может проверить работу приложения на всех доступных ему (и, конечно, поддерживаемых приложением) устройствах.Разница между внутренними и внешними тестировщиками заключается в дополнительном шаге, который добавляется во втором случае: тестовая версия приложения должна быть отправлена для обзора и одобрена специалистами Apple (Beta App Review). Причем первоначальный обзор будет проводиться более тщательно, а все последнующие могут проходить быстрее (но не обязательно). Это, конечно, накладывает определенные ограничения на процесс разработки и требует дополнительного планирования фаз тестирования приложения, с учетом неопределенности сроков прохождения обзора (как и в случае с обычным обзором приложений перед публикацие в AppStore, при отказе в публикации, повторная заявка рассматривается снова в порядке очереди).

Но есть другие особенности, которые отличают решение Apple от альтернативных, увы, не в лучшую сторону:

Приложение-клиент сервиса может быть установлен только на iOS 8.0 и выше, соответственно нет возможности тестировать приложения на устройствах с iOS предыдущих версий. Для распространения тестовых версий необходимо создать AppStore Distribution provisioning profile и настроить профиль приложения в iTunes Connect. Так как загрузка дистрибутива приложения осуществляется через стандартный визард Xcode → Archive → Export, необходимо чтобы проект приложения содержал 3 основных иконки. 608afbb9f4ce43158df04043c94ba6ca.png

Количество приложений, одновременно доступных для тестирование ограничено 10. Сервис работает очень медленно, это касается как скорости обновления списка доступных приложений и их версий, так и скорости скачивания/установки приложений на тестовые устройства. Отправка отзыва с тестового устройства осуществляется при помощи приложения-клиента, но так как это обычное письмо, нет возможности прикрепить скриншот (как плюс можно отметить, то что в письмо автоматически вставляется блок с описанием характеристик тестового устройства). Возможность отправки отзыва появляется только, если в iTunes Connect в настройках версии имеется указание, что именно требуется протестировать (а если не будет указан адрес электронной почты для получения отзывов, то поле «To» в письме окажется незаполненным). Для тестирования может быть доступна только одна версия приложения (тестер не имеет возможность для выбора, настройки доступности делаются в профиле приложения в iTunesConnect). Поле «Feedback Email» в настройках версии приложения в iTunesConnect приходится заполнять каждый раз (логичней было бы запоминать, оставляя возможность для редактирования). Как не удивительно, но TestFlight в версии от Apple не является сервисом, работающим по принципу 24×7, например в конце декабря при попытке входа в iTunesConnect можно было увидеть такое сообщение: iTunes Connect is unavailable until December 29. (справедливости ради, стоит отметить, что подобные «каникулы» Apple устраивает ежегодно и рассылает уведомление за неделю до их наступления). Однако есть и некоторые уникальные возможности: так, например, клиент сервиса (приложение TestFlight) единственный, кто наверняка знает статус установки тестовой версии, альтернативные решения попросту не имеют возможности использовать системные функцие, позволяющие реализовать подобное.

Примечание: статус установки — смена индикации процесса установки, привычная пользователям AppStore. Когда поочередно статус меняется Get — Install — Installing — Open. В других сервисах дистрибуции эта цепочка выглядит так: Install — Installing — Install — приложения попросту не знают результат, был ли установлен тестовый дистрибутив или нет. В случае же с Apple TestFlight цепочка имеет привычный вид: Install — Installing — Open.

9530059b49924614ab71221b21803e7d.png Иконка обновленного приложения TestFlight (правильнее будет сказать, что это абсолютно новое native приложение, разработанное в Apple). Ниже пример иконки тестовой версии приложения — оранжевая «точка» позволяет определить, что это не версия из AppStore.

87221c44d9d54b2fb1591441d3aef830.png «Страховка» Apple от обвинений в распространении спама.

b605cf06667b49a5a5ab0f8a3254ebf1.png Apple не разрешает загрузку дистрибутивов без изменения версии или номера сборки.

a816aa86e4de4320acb458d4d027b8c4.png Достаточно лаконичная и понятная страница администрирования версий приложения для тестирования.

9530059b49924614ab71221b21803e7d.png Письмо-приглашение для участия в тестировании, HTML-форматирование не слишком оптимизировано для мобильных платформ (справедливости ради, хочу отметить, что приложение Mail отображает такие письма корректно, но письма от других сервисов отображаются нормально и в OWA).

eca0577a82a24d09a2f97a9df6332544.png Приложение TestFlight: информация о доступном для тестирования приложении.

138a8631f2f34058905c2cd02630e413.png 7750d17fb0e945a88ffa173b3001486b.png Приложение TestFlight единственное умеет определять результат установки тестовой версии (кнопка Install поменялась на Open) — преимущество, полученное с переходом к Apple.

f2724343805d4a3daa03a68ca1415af7.png Письмо с отправленным из приложения TestFlight отзывом. Кроме скудного форматирования и невозможности добавить вложения, можно отметить еще один недостаток: отправленные отзывы попадают только в почтовый ящик, в iTunes Connect эта информация не сохраняется и недоступна.

Резюмируя, можно сказать, что обновленная версия TestFlight просто работает. В данный момент она не имеет особых конкурентных преимуществ (речь идёт о функционале, а не неоспоримом преимуществе — принадлежности компании Apple, которое пока в большей мере является потенциалом).

Оценка: 6/10.

Дополнительный функционал На данный момент, к сожалению, компания Apple берет только числом, а не умением. Из явного преимущества можно отметить разве что гораздо большее количество бета-тестеров, которое можно задействовать для внешнего тестирования: на порядок больше, чем у всех остальных альтернативных решений (причина ясна: компания сама контролирует условия распространения приложений и имеет преимущество перед решениями третьих сторон).Оценка: 0/10.

Continuous Integration Примечание: описанные далее нюансы использования сервисов как части непрерывной интеграции (continuous integration) в данном обзоре подразумевают, что она будет делаться на основе решения, предлагаемого компание Apple. То есть при помощи Mac OS X Server и Xcode bots — подробно на организации такой интеграции я не буду останавливаться, возможно это станет темой для отдельной статьи. Желающие могут ознакомиться с темой самостоятельно, например, обратившись к официальному руководству от Apple.Каким бы странным это не казалось, но на данный момент не существует возможности для публикации приложений в Apple TestFlight в автоматическом режиме. Я надеюсь, что этот большой недостаток будет исправлен компанией в одном из ближайших крупных обновлений Xcode, тем более что в оригинальном TestFlight такая возможность имелась.

Оценка: 0/10.

Итого суммарная оценка по всем разделам: 14 баллов.

Продолжение следует…

© Habrahabr.ru