Заказная разработка, IT-консалтинг
73,74
рейтинг
15 июня 2015 в 10:41

Разработка → Сервисы дистрибуции мобильных приложений для iOS. Часть 4 (заключительная): Fabric (Crashlytics)

Вступление


Четвёртая часть обзора будет посвящена сервису Fabric (первая часть обзора, вторая часть обзора, третья часть обзора).

Достаточно известный ранее сервис Crashlytics с осени 2014 года является частью Fabric — набора специализированных SDK (или, как сказано на официальном сайте, “modular, cross-platform mobile development suite”), каждый из которых возможно интегрировать по отдельности, либо совместно. В своем обзоре я остановлюсь только на Crashlytics Kit — сервисе и SDK, отвечающими за дистрибуцию мобильных приложений.

Система оценки: сервисы оцениваются по 10-балльной шкале по каждому из разделов (Регистрация и интеграция, Основной функционал, Дополнительный функционал, Continuous Integration). Суммарная оценка позволит определить победителя.

Fabric


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



Регистрация в сервисе построена на заявительном принципе — каждый желающий создать новый аккаунт может оставить заявку, которая, исходя из нашего опыта, будет рассмотрена в кратчайшие сроки (не так давно заявка нашего сотрудника была одобрена в течение часа). Лишним будет говорить, что интеграция SDK Fabric является быстрой и простой. Ни один другой сервис дистрибуции не предоставляет настолько удобный пошаговый мастер интеграции. Через этот процесс лучше пройти самостоятельно, редкий случай, когда рутинная, как правило, работа, доставляет удовольствие и выполняется с интересом.










Оценка: 9/10.

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


Примечание (обновлено 15 июня 2015): говоря о дистрибуции приложений для iOS необходимо помнить, что на данный момент все сервисы, кроме TestFlight от Apple, по-прежнему должны учитывать ограничение на количество устройств доступных при использовании AdHoc provision profiles. Следовательно, максимум используемых устройств равен 100 на каждое семейство устройств (это условие было изменено 8 июня 2015 года, после объявления на WWDC об объединении всех developers programs в одну), в которые входят в том числе и устройства, используемые непосредственно разработчиками. Самым же большим ограничением является то, что список зарегистрированных устройств можно “обнулять” только раз в год, после продления подписки на iOS Developer Program (возможно в последующем и это условие будет изменено).

В части основного функционала Fabric концептуально отличается от всех других рассмотренных сервисов. Так, например, добавление нового проекта (“приложения” в терминологии Fabric) осуществляется не на сайте сервиса, а в десктопном клиенте:



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



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

Примечание: Сервис предоставляет возможность для импорта списка тестировщиков из старой версии TestFlight: dev.twitter.com/crashlytics/beta-distribution/testflight-migration. Но этот функционал будет полезным, если вы заранее позаботились об экспорте списка, так как с марта 2015 года старая версия TestFlight уже недоступна.

Импорт списка тестировщиков возможен из CSV-файла, его формат должен быть следующим:
First name,Last name,E-mail


Последующие шаги совпадают с аналогичными шагами у других сервисов: письмо-приглашение, регистрация устройства, установка тестового приложения.



Установить предыдущие версии приложения очень просто, под кнопкой для установки последней версии находится список всех доступных конкретному пользователю версий:



Оценка: 9/10.

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


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

Посмотрим, что же предлагает Fabric.

Первое — это символизация отчётов о падении приложения. И это очевидно даже из оригинального названия сервиса: Crashlytics.

Разработчики SDK прилагают усилия, чтобы сбор и обработка отчётов работали как часы и с максимальной эффективностью. Не утруждая себя пересказом, просто процитирую список с официального сайта:

  • Defensive Reporting: processes that crash often end up sustaining considerable damage before the kernel takes action to terminate them. This can result in secondary crashes, where the crash handling code itself is unable to operate correctly and fails. We've invested in making our file handling code extremely defensive, so parsing cache files can't crash unexpectedly.
  • Stack Unwinding: one of the most abstruse aspects of crash detection is stack unwinding, the seemingly omniscient ability to determine historic code execution that directly lead to the crash. Our SDK determines the calling instruction that works in the case of objc_msgSend and many other methods that conform to Apple's iOS ABI.
  • Mach Exceptions: we capture crashes using the lowest level system available on iOS and OS X. The Mach Exception API makes it possible for us to capture every crash, consistently, and without some of the indeterminate behavior of other mechanisms. This also gives us data that much more closely matches what a developer would see in Xcode.
  • Uncaught exception reporting: when your app throws an uncaught exception, the Crashlytics springs to life. Crashlytics quickly records the stack trace and state of the device at the time the exception was thrown and sends the crash information to our servers for processing. You get complete visibility for every crash, effortlessly.
  • Caught exception reporting: Crashlytics isn't just for uncaught exceptions! Adding a single line of code in your catch block will report caught exceptions to Crashlytics for processing, and you are still free to handle the exception however is best for your users. You get the full stack trace and all the same device information we collect for fatal crashes, so you can identify and fix bugs even if your app doesn't crash!
  • Fully automated deobfuscation: we automate deobfuscation of ProGuarded stack traces for apps built using our ant tools, maven tools or IDE plugins. We did the legwork for you. Built into your existing workflow, our SDK will have negligible impact on your app.

Более подробную информацию можно получить здесь и из пресс-релиза к 3-й версии SDK.

После отправки отчёта с устройства на сервер Fabric (это происходит после перезапуска “упавшего” приложения), сервис рассылает уведомления по электронной почте, а также выводит оповещение на компьютерах с установленным клиентом:

В качестве недостатка можно отметить то, что во втором случае отсуствует возможность запуска Xcode с нужным проектом, классом и выделенной строкой кода (как это сделано в клиенте HockeyApp).

Также возможно настроить интеграцию с трекерами и другими сервисами, после чего уведомления будут передаваться и туда. Большим плюсом является возможность подключения сразу нескольких сервисов. А недостатком — скудность справочной информации, относящейся к данному функционалу.



Примечание: в тестовом проекте была настроена интеграция с Bitbucket и Hipchat. В результате сообщения о новых падениях приходили только в Hipchat, новые тикеты в Bitbucket не создавались.

Fabric предоставляет возможность повысить полезность связанной с отчётами о падении информации при помощи трёх дополнительных инструментов:

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

+ (void)setObjectValue:(id)value forKey:(NSString *)key; 
+ (void)setIntValue:(int)value forKey:(NSString *)key; 
+ (void)setBoolValue:(BOOL)value forKey:(NSString *)key; 
+ (void)setFloatValue:(float)value forKey:(NSString *)key;


Примечание: максимальное количество переменных — 64. Подробнее можно узнать тут.

Custom logging: использование макроса “CLS_LOG” позволяет записывать служебные сообщения в лог устройства, однако в отличие от стандартного NSLog при использовании этого макроса лог будет прикреплён к отчёту о падении (подробнее).

Примечание: в отчёте сохраняется весь лог целиком с момента запуска приложения. Есть возможность поиска по логу с использованием регулярных выражений.

User information: также есть возможность идентифицировать пользователя приложения (идентификатор, имя и адрес почты — подробнее). При использовании необходимо учитывать политику Apple в отношении персональных данных.

Answers — сервис аналитики, который стал частью Fabric летом 2014 года, является хорошим дополнением для сервиса сбора отчётов о падении. Он позволяет получать оперативную информацию об использовании приложения (отображаются как “мгновенные” показатели, так и суммарные/статистические данные):

Сервис старается дарить позитив, рассылая например такие письма:

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

Оценка: 8/10.

Continuous Integration


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

Для использования API загрузки дистрибутива приложения необходимо получить API_KEY и BUILD_SECRE. Узнать их можно на странице “Settings -> Organizations -> страница с детальной информацией для конкретной организации -> скрытые поля под названием организации”:



Загрузка осуществляется при помощи специальной утилиты, которая включена в фреймворк, пример использования:

/path/to/Crashlytics.framework/submit <API_KEY> <BUILD_SECRET> -ipaPath /path/to/my.ipa -emails TestEmail@crashlytics.com,AmazingTester@twitter.com -notesPath ~/Notes/ReleaseNotes.txt -groupAliases GroupAlias,GroupAlias2


Примечание: emails, notesPath и groupAliases — необязательные параметры.

Полный список параметров:

         -emails            list of individual addresses (comma-separated)
         -groupAliases      list of group aliases from web dashboard (comma-separated)
         -notesPath         absolute path to .txt file
         -notifications     enables/disables email notification to testers (YES|NO)


Справочная страница на официальном сайте: http://support.crashlytics.com

Оценка: 8/10.

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

Заключение


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

По формальным критериям суммарной оценки сервисы распределились следующим образом:

  1. Fabric — 34 балла.
  2. HockeyApp — 33 балла.
  3. Ubertesters — 32 балла.
  4. Testflight — 15 баллов.


На первом месте Fabric, самыми большими достоинствами этого сервиса является бесплатность, высокая эффективность в сборе и обработке отчётов о падениях. Из недостатков можно отметить некоторую ориентированность на разработчиков* и отсутствие встроенной системы сбора отзывов.

*Здесь я подразумеваю узкую специализацию сервиса: если какой-либо член команды не является разработчиком, то в приложении ему недоступен никакой другой дополнительный функционал (кроме того что требуется от приложения по спецификации). И если приложение работает без падений, для предоставления отзыва потребуется использование какого-то другого сервиса.

Второе и третьте место у HockeyApp и Ubertesters — разница в оценках всего 1 балл.

Плюсами HockeyApp является поддержка символизации отчётов о падении и более тесная, в сравнении с другими сервисами, интеграция с Xcode (открытие проекта/класса на строке вызвавшей падение приложения). Из недостатков можно отметить отсутствие нормального бесплатного тарифного плана и ограниченность имеющейся системы сбора отзывов.

Ubertesters на данный момент выглядит самым интересным, с точки зрения дальнейших перспектив, сервисом. Развитая система сбора отзывов и система отслеживания действий тестировщиков позволяет решать определенный круг задач с максимальной эффективностью. Отсутствие встроенной поддержки символизации отчётов о падении на данный момент является недостатком, но я верю, что с дальнейшим развитием он будет устранён. Наличие же бесплатного тарифного плана с доступом ко всему основному функционалу также является большим преимуществом сервиса.

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

Надеюсь, что серия обзоров получилась полезной и смогла кому-то с выбором подходящего сервиса для распространения своего приложения. Буду рад ответить на дополнительные вопросы.
Автор: @sman
Аркадия
рейтинг 73,74
Заказная разработка, IT-консалтинг

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

  • 0
    Как дополнение к статье, история создания Answers: waynechang.com/how-six-people-built-the-2-mobile-analytics-tool-in-just-a-few-months-full-article
  • +1
    Следовательно, максимум используемых устройств равен 100

    С недавних пор:
    You can register up to 100 of each device type (types: Apple TV, Apple Watch, iPad, iPhone, iPod Touch).

    Соответственно максимум 100*5 = 500. Не слишком удобно и логично, но лучше, чем раньше :)

    Интеграция: 9 из 10.

    Вы серьезно?? Вы считаете обязательное приложение на OS X, которое само редактирует ваш проект и должно стоять у каждого разработчика, чтобы запустить проект, правильным методом распространения? Не считая даже того, что оно у меня многократно зависало на промежуточных шагах интеграции, что исправляется только удалением приложения (и всей статистики) или переговорами с техподдержкой.
    Только совсем недавно оно перестало периодически обновлять SDK самостоятельно, теперь предлагает нажать кнопочку Upgrade SDK.

    Crash reporting у Fabric лучший. Да и сервис Answers мне понравился, максимум полезной информации, быстро обновляется. Но процесс интеграции — это просто 0 баллов из 10.
    • 0
      You can register up to 100 of each device type (types: Apple TV, Apple Watch, iPad, iPhone, iPod Touch)


      Спасибо, это хорошая новость — как я понимаю, изменение было сделано вместе с объединением всех типов developers program?

      В статьях внесу исправления.

      По поводу интеграции:
      • я старался рассматривать последнии версии сервисов, оценивать в ретроспективе, по-моему, не имеет смысла
      • мнение изложенное в обзоре априори субьективно, а сложности периодически возникают со всеми решениями (cocoapods, «вручную»)
      • в целом мне не кажется абсолютно верным подход/идеология Fabric, это я старался отразить в обзоре в целом, сервис не должен иметь узкой направленности на разработчиков

      В идеале бы хотелось иметь сервис, совмещающий достоинства хотя бы всех перечисленных в обзоре сервисов, и не имеющий их недостатков. Надеюсь, рано или поздно, такой сервис появится.
    • 0
      500 устройств — действительно факт, но странно, что он до сих пор не отражён даже в pre-release версии документации, там до сих пор говорится: Each individual or company can register up to 100 devices per membership year for development and testing.
      • 0
        Спасибо, это хорошая новость — как я понимаю, изменение было сделано вместе с объединением всех типов developers program?

        Да, буквально неделю назад (https://developer.apple.com/support/account/)

        сложности периодически возникают со всеми решениями

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

        я старался рассматривать последнии версии сервисов, оценивать в ретроспективе, по-моему, не имеет смысла

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

        В целом с выводами согласен, спасибо за цикл статей!
  • 0
    я старался рассматривать последнии версии сервисов, оценивать в ретроспективе, по-моему, не имеет смысла


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

    Из Вашего опыта, если я правильно понял, сложилась отрицательная оценка решения, которое использует Fabric, но при этом Вы отмечаете, что есть положительные изменения и проблемы, хоть и при вынужденном обращении к техподдержке, решаются. Поэтому мне, лично не столкнувшемуся с перечисленными проблемами, ситуация не кажется «катастрофической». Но я готов, если будут другие схожие отзывы, изменить оценку и выводы обзора.

    В целом с выводами согласен, спасибо за цикл статей!

    Спасибо Вам за то что делитесь своим опытом!
  • 0
    Команда Fabric представила обновление сервиса Answers: answers.io/blog/introducing-answers-events — теперь есть возможность для отслеживания событий и дальнейшего анализа.
  • 0
    Спасибо за подробную информацию. Я правильно понял что, если я собираю ipa без Xcode проекта — значит у меня нет шансов использовать fabric?
    • 0
      Если я правильно понял суть вопроса, то выход может быть следующим (в теории): создать «пустой» проект с тем же bundle id, что уже используется в приложении, добавить его в свой аккаунт Fabric через их утилиту, а дальше дистрибутив загружать из командной строки, как описано в разделе про Continuous Integration. Дополнительно можно последить за этой веткой: twittercommunity.com/t/add-new-ios-app-to-crashlytics-beta-via-command-line/56620 возможно что-то в будущем изменится.
      • 0
        Спасибо, надо попробовать.

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

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