Заказная разработка, IT-консалтинг
61,11
рейтинг
27 января 2015 в 12:16

Разработка → Сервисы дистрибуции мобильных приложений для 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). Суммарная оценка позволит определить победителя (итоговое заключение войдет в последнюю часть обзора).



TestFlight от Apple


Регистрация и интеграция


Для использования сервиса кроме аккаунта разработчика (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 не требуется.





Оценка: 8/10.

Основной функционал


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

Примечание (от 15 июня 2015): количество устройств, доступных при использовании AdHoc provision profiles с с 8 июня 2015 года было изменено со 100 суммарно, на 100 на каждое семейство устройств (изменение произошло после объявления на WWDC об объединении всех developers programs в одну).

Разница между внутренними и внешними тестировщиками заключается в дополнительном шаге, который добавляется во втором случае: тестовая версия приложения должна быть отправлена для обзора и одобрена специалистами Apple (Beta App Review). Причем первоначальный обзор будет проводиться более тщательно, а все последнующие могут проходить быстрее (но не обязательно). Это, конечно, накладывает определенные ограничения на процесс разработки и требует дополнительного планирования фаз тестирования приложения, с учетом неопределенности сроков прохождения обзора (как и в случае с обычным обзором приложений перед публикацие в AppStore, при отказе в публикации, повторная заявка рассматривается снова в порядке очереди).

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




  • Количество приложений, одновременно доступных для тестирование ограничено 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.



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



“Страховка” Apple от обвинений в распространении спама.



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



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



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



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




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



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

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

Оценка: 6/10.

Дополнительный функционал


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

Обновление (5 мая 2015): с релизом Xcode 6.3 разработчикам стал доступен Crashes Organizer. Новый функционал, несомненно, хороший признак того, что Apple продолжает развивать свои сервисы, но, к сожалению, компания всё ещё отстаёт от других сервисов:

When you open the Crashes organizer, Xcode begins refreshing the crash reports for your apps. Xcode downloads the top crash reports—crash reports with the most number of occurrences on unique devices—that occurred during the past two weeks. However, there may be up to a three day delay between when you first distribute your app and when crash reports are available in Xcode.

Три дня задержки и период архивного доступа в две недели выглядит несколько обескураживающе.


Оценка: 1/10.

Continuous Integration


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

Каким бы странным это не казалось, но на данный момент не существует возможности для публикации приложений в Apple TestFlight в автоматическом режиме. Я надеюсь, что этот большой недостаток будет исправлен компанией в одном из ближайших крупных обновлений Xcode, тем более что в оригинальном TestFlight такая возможность имелась.

Оценка: 0/10.

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

Продолжение следует...
Автор: @sman
Аркадия
рейтинг 61,11
Заказная разработка, IT-консалтинг

Комментарии (36)

  • +2
    Автоматически заливать приложение в аппстор и Apple TestFlight можно с помощью вот этой штуки например:
    • 0
      Спасибо! Если правильно понимаю, то это только частично автоматизирует процесс — т.е. билд попадает в iTunesConnect, но все администрирование (вкл доступ для тестеров, выбрать тестеров, написать комментарий для билда) всё это нужно будет делать вручную.
    • +1
      + А инструмент действительно интересный, проверю в действии, спасибо ещё раз!
    • 0
      Мы используем deliver как финальный этап непрерывной интеграции. Он очень многофунционален. А если вы используете сторонний build сервер(Jenkins, Bamboo etc.), то просто незаменим.
  • 0
    мне в этом плане нравится Beta by Crashlytics, при создании билда для откладки, выплывает окошко с предложением отправить билд тестерам и все. Для небольших команд это достаточно удобно
    • 0
      да, про них будет отдельно
      спойлер
      Образец, с моей точки зрения
  • 0
    Спасибо за труд! Давно не следил за TestFlight, не знал, что их Apple выкупила и обрезала андроид.
  • 0
    Спасибо, очень вовремя статья. Жалко, что такой хороший продукт испортили. Что теперь делать с заливкой из коммандной строки не понятно пока. Придется либо искать алтернативы либо использовать deliver либо еще что-нибудь…
    Ждем продолжения и в сложившейся ситуации — с нетерпением!
    • 0
      я надеюсь, что будет более тесная интеграция с CI via Xcode bots — это минимум, а дальше уже чем больше, тем лучше. Подождем беты следующей версии Xcode.
      • 0
        Эти боты — стременное го… но! Работали у меня несколько месяцев, выгружали автоматом на старый TestFlight мои сборки, по скрипту после архивирования. Так эти яблоки обновили свой сервер и чуть поменяли процесс архивации… добавили триггеры и ничерта не объяснили как ими пользоваться, какая-то мишура и пыль в глаза на презентации и чего дельного.
        Мало того, работают боты хорошо только репозиториями а ля гитХаб… где надо платить деньги за то, что явно этого не стоит. Если кто читал статьи об автовыгрузке в TestFlight, наверное заметили общее негодование, как можно «научить» бота работать с самодельными ssh репозиториями…
        • 0
          Заливаю curl, проблем небыло :)
  • 0
    Prepare to flight!
  • 0
    Подобных сервисов много. Есть еще неплохие малоизвестные ребята типа getupdraft.com и buildozer.io/ которые делают сборки прямо из репы.
    • +1
      Еще несколько:

      После обьявления об отключении testlfightapp.com думаем перейти на Crashlytics Beta для поддержки iOS7.
      • 0
        Да, с «обрубанием» всего что старше 8.0 Apple нехорошо поступили. С другой стороны это в их стратегии «неумолимой поступи прогресса» — все надежды на то что дальше будут серьезные улучшения.
  • 0
    Спасибо за трезвый взгляд! Думаю у многих возникла мысль об обходе ограничения в 100 устройств, при использовании «обычной» лицензии, для распространения так называемых Ad Hoc приложений среди тестеров. Думаю не многие компании сообразили как можно получить огромное количество пользователей и не ограничиваться 100 устройствами, а для рядовых разработчиков такая услуга вообще не предусмотрена. Думаю в ближайшее время найдется компания, отважный пират в этом океане, наполненном китами и акулами бизнеса, которая обойдет это ограничение даже без применения джейлбрейка, ну и станет лучшим сервисом для тестирования. Если такая уже не существует, может быть я о ней просто не знаю!
  • 0
    Извините за чайниковский вопрос? А почему «сервисы дистрибуции»? Это же сервис тестирования?
    • 0
      Да, но только частично, в основе — доставить приложение кому-либо из команды, не важно будет ли это QA-инженер, менеджер проекта, дизайнер, заказчик, представитель фокус-группы и т.д.
  • 0
    К слову, могу добавить комментарий об использовании сервиса с другой стороны — как пользователя. Я принимал участие в закрытом тестировании новой версии приложения itunes.apple.com/us/app/stackables-layered-textures/id704236938?mt=8

    К самому процессу установки, обновления тестовой версии никаких вопросов нет. Всё работает как часы.

    Но вот руководство по тестированию и приём отзывов команда разработчиков вела просто через email — потому что так пока удобнее, в комментариях к версии были только краткие инструкции.

    Мне же, как внешнему тестеру, было неудобно вручную делать скриншоты, сопровождать их пометками и т.п. При наличии такого функционала в рамках сервиса, делать это было бы гораздо удобнее.
  • 0
    нет никаких гарантий, что Apple не приостановит или не прекратит его работу в любой момент

    Ну сейчас там уже есть сообщение
    The services offered at TestFlightapp.com will shutdown on 2/26/2015

    Learn about the All-New TestFlight Beta Testing service available inside of iTunes Connect. For more information, please refer to our FAQ.
    • 0
      … и сразу под этим приписка курсивом, не?
      • 0
        Да. Сразу не увидел. А когда увидел — возможности грохнуть каммент уже нет. Не аккуратненько получилось.
  • 0
    Написал письмо в TestFlightApp, там ответили, что можно использовать iTunes Transporter, оно как раз работает из консоли. Кстати он используется в Deliver проекте.
    • 0
      Если я правильно понял, речь идёт о iTMSTransporter и проблема, на мой взгляд, та же: нет возможности полностью автоматизировать распространение новой версии приложения. В iTunesConnect билд попадёт, но дальше нужно будет вручную всё делать. Если это не так, расскажите подробнее, пожалуйста.
      • 0
        Вы имеете ввиду релиз после сабмита? Да, такого нет. В Deliver пошли другим путем: github.com/KrauseFx/deliver/blob/master/lib/deliver/itunes_connect/itunes_connect_additional.rb#L39 просто сэмулировав нажатие кнопки на сайте.

        Я еще полностью не изучил тонкости использования. Пока что мне было важно узнать как заливать из консоли. Не очень понравилось, что надо указывать логин-пароль в командной строке.
        • 0
          Спасибо за ссылку, посмотрел и мне кажется, что этот скрипт предназначен для публикации в AppStore, а не Prerelease версий.

          versionInfo.releaseOnApproval.value — насколько я понимаю, чекбокс перед отправкой на обзор, чтобы приложение сразу же попадало в AppStore, в автоматическом режиме, сразу же как только будет одобрено (альтернативный вариант сделать это вручную, например, когда это привязано к каким-то маркетинговым мероприятиям и т.п.)
          • 0
            Эм, не только, если верить документации:
            beta_ipa

            A path to a signed ipa file, which will be uploaded and used for Apple TestFlight. After the upload was successful, it will wait until iTunesConnect processing is finished and submit the update to the testers. You have to add --beta to your deliver call to use beta_ipa instead of ipa.
            github.com/KrauseFx/deliver/blob/master/lib/deliver/itunes_connect/itunes_connect_submission.rb#L11

            тут, правда опять же эмуляция кликов, заливка бета версии для тестеров.

            Вообщем на данный момент лучший вариант — использовать Deliver как я понимаю. Врядли чтото изменится. Но так как это стороний проект, то уверенности в будущем не особо есть :)
            • 0
              Спасибо! Эта часть скрипта действительно «кликает» на нужный переключатель.

              Формально, исходя из целей обзора, я буду рассматривать только штатные способы работы с сервисами. Но в любом случае, хорошо, что уже есть «нештатные» средства, потому что в работе приходится решать конкретные задачи, а не писать обзоры и там уж не до формализма! Спасибо всем, кто делится своим опытом.
              • 0
                Пожалуйста. Ждем от Вас продолжения. Мы решили искать альтернативы.
  • 0
    Для распространения тестовых версий необходимо создать AppStore Distribution provisioning profile и настроить профиль приложения в iTunes Connect.

    Это одно из самых важных преимуществ Apple TestFlight от остальных, а совсем не недостаток. Здесь мы получаем рабочую протестированную версию с нужным provisioning profile для того чтобы легко и без лишних сборок отправить билд в AppStore.
    • 0
      А что Вам мешает создать сборку подписанную нужным provisioning profile и отправить ее в любой другой сервис?
      Так же во многих проектах где задействован сервер (API например), важно тестировать сначала dev, а затем prod версию. Как Вы соберете версию debug и зальете ее на Apple TestFlight? Обычно в таких случаях создают несколько схем, при сборке, в зависимости от схемы, определяют на какой URL «смотрит» приложение, получают нужную сборку и отправляют например в Crashlytics, а вот для Apple TestFlight такое уже не прокатит.
      Apple TestFlight скорее уже альфа тестирование, нежели система для тестирования «сырых, рабочих» версий…
      • 0
        Я не исключаю AdHoc провижен и он безусловно полезен в процессе разработки и тестирования. Конечно, создаются дополнительные схемы с соответствующими ключами, чтобы управлять теми же ссылками на сервер, но несмотря на все предосторожности ошибки случаются. До запуска Apple Beta-Testing, продакшн версию никак нельзя было проверить, пока она не появится в AppStore. Например, могут забыть новый ключ для продакшн схемы или условие в коде, которое отвечает за миграцию базы данных, а при обновлении выяснится, что апп крашится. Apple TestFlight на данный момент не достаточен для того, чтобы перестать пользоваться другими сервисами на подобии HockeyApp и Crashlytics.
    • +2
      Недостаток — в том смысле, что требует дополнительных усилий, например, нельзя отправить билд без иконок приложения, которых на ранних этапах проекта может и не быть, значит нужно будет сделать какой-то черновой вариант — временные затраты, конечно, могут быть и не значительными (можно получить все нужные иконки в онлайн-генераторе, например, makeappicon.com и пр.), но иногда, в зависимости от особенностей проекта и сложившейся практики управления проектами, могут оказаться и довольно ощутимыми. Также не всегда у разработчиков есть доступ к iTunesConnect (исходя из моего опыта работы в нескольких компаниях, нередко его либо предоставляют позднее, на завершающей стадии проекта, либо не предоставляют совсем).

      В других же сервисах для распространения достаточно AdHoc-профиля — вот именно в таком сравнении, я считаю такую особенность недостатком.

      Здесь мы получаем рабочую протестированную версию с нужным provisioning profile для того чтобы легко и без лишних сборок отправить билд в AppStore.


      Это, конечно, плюс, но фактически нам ничто не мешает выполнить эту сборку один раз, перед релизом, даже если мы использовали другой сервис в ходе работы над проектом.
      • +1
        Выше я написал ответ, к которому добавлю, что Apple Beta-Testing это скорее для тестирования Beta и больше Release Candidate версий. Всё же быстрое ревью неприятно замедяет тестирование приложения, которое находится на стадии разработки. В Apple Beta-Testing ещё многого не хватает по сравнению с другими сервисами, но уникальность тестирования продакшн версии, я считаю очень полезной и важной.
  • 0
    комментарий для третье части (сейчас и для TestFlight добавлю)
  • 0
    обновил раздел «Дополнительный функционал»: Apple добавили в последнюю версию Xcode новый функционал Crashes Organizer developer.apple.com/library/ios/recipes/xcode_help-crashes_organizer/AboutCrashesOrganizer/AboutCrashesOrganizer.html#//apple_ref/doc/uid/TP40015147-CH1-SW1

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

Самое читаемое Разработка