Сервіси дистрибуції мобільних додатків для iOS. Частина 2: HockeyApp

Вступ
Друга частина огляду присвячена сервісу HockeyApp, з першою частиною огляду можна ознайомитися тут.

По всій видимості, Miscrosoft вирішила не відставати від компанії Apple, в результаті чого на початку грудня було оголошено про придбання HockeyApp (детальніше блозі HockeyApp і на сайті Microsoft). На відміну від Apple, Microsoft не стала урізати функціонал сервісу або обмежувати список підтримуваних платформ. У прес-релізі говориться, що сервіс продовжить свою роботу без змін, а в подальшому отримає розвиток, про подробиці якого ми дізнаємося пізніше.

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



HockeyApp
Реєстрація та інтеграція
Реєстрація в сервісі проста, з обов'язковим підтвердженням електронною поштою. Безкоштовний аккаунт не дає можливості повноцінного використання сервісу доступний тільки участь в якості тестера, або використання сервісу без обмежень в складі іншої команди (акаунту організації). Для того щоб оцінити сервіс, можливо включити режим Trial — на 1 місяць (причому відлік trial-період почнеться тільки з моменту створення профілю першого додатка, а не з дня реєстрації). Вартість платного аккаунта починається від $10 в місяць, докладніше можна ознайомитися тут. З плюсів можна відзначити, що для будь-якого типу платних аккаунтів відсутні обмеження на розмір збережених даних і кількість користувачів, які прив'язані до аккаунту. Відмінність різних тарифних планів кількість додатків і кількості акаунтів з типом «Owner» (тільки для тарифних планів категорії «Business»).

Єдине побажання до процесу створення аккаунта: зробити більш зрозумілим результат вибору опції «i'm developer»:

Зараз, коли за замовчуванням вона не обрана, наступне далі пояснення можна сприйняти як список можливостей, які вже доступні, а в разі вибору опції, як очікується, має з'явитися ще щось. Насправді ж акаунт за замовчуванням дозволяє лише переглядати список доступних додатків (і, звичайно, встановлювати їх), додавати свої пристрої і залишати відгуки.

Окремо хотілося б відзначити, що на сайті сервісу є спеціальне керівництво для тих розробників, кому необхідно зробити міграцію проекту, що використовує TestFlight старої версії (до переходу до Apple): http://support.hockeyapp.net.

Інтеграція з SDK теж досить проста, але звичайно ж далека від ідеалу, яким, по-моєму, на даний момент є рішення, використовуване Fabric (Crashlytics) — про нього ми поговоримо в заключній — четвертої — частині огляду.





Оцінка: 7/10.

Основний функціонал
Примітка: говорячи про дистрибуції додатків для iOS необхідно пам'ятати, що на даний момент всі сервіси, крім TestFlight від Apple, як і раніше, повинні враховувати обмеження на кількість доступних пристроїв при використанні AdHoc provision profiles. Отже, максимум використовуваних пристроїв дорівнює 100, в які входять в тому числі і пристрої, що використовуються безпосередньо розробниками. Найбільшим обмеженням є те, що список зареєстрованих пристроїв можна «обнуляти» тільки раз на рік, після продовження підписки на iOS Developer Program.

Наступним кроком після активації нового аккаунта HockeyApp (будь-якого типу) стає реєстрація пристрою, який буде використано для встановлення тестових версій додатків:

Сервіс пропонує кілька способів:
  • перехід по посиланню в мобільному браузері на пристрої
  • зчитування QR-коду (в якому закодована та ж посилання)
  • додавання ідентифікатора вручну
Цікавий момент: при первісній реєстрації тестового пристрою я не отримав повідомлення по пошті, що новий пристрій було додано і доступний для використання. Однак надалі, при реєстрації нового пристрою на інший рахунок, сервіс автоматично визначив, що пристрій з таким UDID вже включено в provision profile програми і мені на пошту було надіслано повідомлення з можливістю запросити нового користувача в свою команду:

Ще одне зауваження загального характеру: сайт HockeyApp досить часто використовує спеціальні «попап» для повідомлення про результаті якої-небудь дії. Наприклад, після запрошення нового користувача вгорі сторінки з'явиться новий (тимчасовий) блок з повідомленням:


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

Сервіс також дозволяє імпортувати список користувачів з текстового файлу:

Вміст файлу може бути як мінімалістичним (адреси електронної пошти), так і з додатковими даними (ім'я та роль).

Примітка. Роль кодується наступним чином:
  • «1» означає Developer
  • «2» — Member

  • «3» — Tester


Присвоїти роль «Owner» (або будь-яку іншу) можна на сторінці керування користувачами. Детальніше про ролях можна дізнатися тут і тут.

Новий білд можна відправити або вручну через сайт сервісу:

Або в напівавтоматичному режимі, якщо встановлено десктопное додаток — в цьому випадку достатньо буде виконати архівування проекту (Product-Archive) — далі у діалоговому попапі вибрати Upload:



А потім закінчити публікацію, при необхідності задавши додаткові налаштування у вікні:

Примітка: Release type — може бути Store — в цьому випадку на сайт сервісу завантажуються тільки налагоджувальні символи — сам додаток можна завантажити з клієнта сервісу, але збір та аналіз звітів про падіння буде проводиться.

Важливо: номер зборки завжди повинен збільшуватися! Так як, навіть якщо змінюється версія, номер зборки не можна використовувати у значенні менше того, що використовувалося до цього. Якщо ж все-таки порушити дане правило, то новий білд буде вважатися «старим» і, як наслідок, не буде працювати автоматичне повідомлення про наявність нової версії і в інформації про історію версій програми «неправильний» білд виявиться не на початку спискудокладніше.

Навіть якщо десктопное додаток не було запущено в момент підготовки архіву, завантаження всіх архівованих версій можна виконати з розділу «Upload New Build»:

Нотатки для релізу можуть бути як в простому текстовому вигляді, так і з додатковим форматування за допомогою поширеного мови розмітки Markdown.

При завантаженні нової версії програми через сайт сервісу можливо обмежити доступ до цієї версії (за допомогою опції Restrict downloads — в десктопному додаток ця опція не активна).

Також можна вибрати повідомлення всіх користувачів (яким буде доступна дана версія програми) або повідомити тільки окремих користувачів (при використанні десктопного додатка можна тільки вибрати між двома варіантами: розсилати повідомлення або розсилати):

Примітка: можливо баг: після завантаження нової версії без попередження кнопка Notify (Manage version, вкладка Status) не приводить ні до яких дій.

Також при завантаженні можна вказати, що дана версія є обов'язковою у цьому випадку користувач не зможе продовжити використання більш старої версії додатка — повідомлення про наявність оновлень буде показуватися кожен раз і від нього можна відмовитися (за умови, що в додатку використовується фреймворк сервісу).

Первісна установка веб-додатки HockeyApp на мобільному пристрої виконується в кілька кроків:



Іконка встановленого веб-додатки HockeyApp:



Можливість встановлювати попередні версії програми є, але реалізований даний функціонал не дуже зручно. Він недоступний зі сторінки програми на вкладці History, і для того щоб ним скористатися, потрібно через меню (справа вгорі) перейти в розділ Overview, там вибирати підрозділ Versions, в ньому знайти потрібну версію, відкрити сторінку з детальною інформацією і вже тільки там буде доступна установка.



Функціонал надсилання відгуків в HockeyApp в чомусь краще реализованого в Apple TestFlight, так як дозволяє прикріплювати до повідомлення до трьох вкладень (але така можливість є тільки на планшетах):



Самі вкладення поміщаються в хмарне сховище AWS, тому теоретично є можливість відправлення як відео-файлів так і простих скріншотів без обмежень на розмір файлу.

Важливо: перемикання між вкладками Details та Feedback на сторінці надсилання відзиву викликає її перезавантаження. Майте це на увазі, щоб не втратити текст набраний повідомлення.

Відразу після надсилання відгуку він відображається на вкладці Feedback, але зберігається там тільки тимчасово, на мобільних пристроях всі повідомлення можна переглянути:
  • на iPad: Dashboard — вкладка Feedback
  • на iPhone/iPod Touch: детальна інформація про програму — верхнє праве меню — Overview — Feedback
Примітка: можливість перегляду відправлених повідомлень також залежить від ролі користувача і типу пристрою.

Існуючі відмінності в фунционале для пристроїв різного типу я відношу до недоліків сервісу. Можливо цей недолік тимчасовий і надалі функціонал і інтерфейс буде максимально уніфіковані.

Також до недоліків поточної реалізації можна віднести неможливість відстежувати зміни статусу відкликання (Open/Waiting/Resolved/Ignored) для всіх користувачів, крім тих, хто входить в групу Owner. Цей функціонал доступний їм у звичайній/«десктопної версії сайти для користувачів інших груп сервіс не здійснює навіть повідомлення по електронній пошті.

Увага: найбільшим недоліком, на мій погляд, є той факт, що відгуки не зв'язуються з версією програми, тому її необхідно вказувати вручну, якщо це має значення.

Наостанок, як плюса зазначу можливість залишати коментарі до відгуків (знову ж таки з підтримкою вкладень при роботі з сервісом на планшеті).

Оцінка: 8/10.

Додатковий функціонал
Думаю, всі розробники погодяться з тезою „краще один раз побачити, ніж сто разів почути“ стосовно до процесу тестування програмного забезпечення. Дійсно, найчастіше інформація, що надається тестерами є або неповної або помилковою, так як частково заснована на припущеннях. Тому звичайних відгуків буває недостачно і в цьому випадку на допомогу розробникам приходить додатковий функціонал, зокрема „символізація“ звітів про падіння програми.

Подібний функціонал в HockeyApp реалізований на дуже хорошому рівні. Відправка звітів про падіння працює відразу „з коробки“ (природно, якщо додаток використовує фреймворк сервісу). Звіти можуть відправлятися в повністю автоматичному режимі (після перезапуску програми), або запит на відправку з підтвердженням користувачем (вибір режиму робиться один раз і його можна скинути шляхом відновлення додаток).



Якщо при відправленні нової версії використовувалося десктопное додаток, або налагоджувальні символи (*.dSYM) були завантажені додатково з *.ipa, то сервіс автоматично проводить „символизацию“, дозволяючи однозначно визначити клас, метод і номер рядка, які стали причиною помилки:

Також сервіс проводить групування отриманих звітів, допомагаючи оцінити масштаб/частоту проблеми і, отже, визначити пріоритетність у виправленні виявлених помилок (на скріншоті вище кількість звітів у групі можна побачити в колонці Count, додатково про принципи групування можна дізнатися тут).

Більш того, якщо в десктопному додатку сервісу налаштований доступ до сховища проекту, в детальній інформації для звіту про падіння можна відразу побачити „цитату“ з кодом, а також відкрити клас в Xcode:

Додатково є можливість завантаження звіту про падіння вручну, але це можливо зробити тільки на вебсайті сервісу:

Примітка: з рекомендаціями щодо вирішення проблем з „символизацией“ можна ознайомитися тут.

Крім того сервіс надає можливість інтеграції з системою відстеження помилок (наприклад, Basecamp або JIRA, повний список тут).

Після того як зв'язок з такою системою встановлена, сервіс може додавати нові записи (тікети) в автоматичному режимі:


Примітка: за замовчуванням опція автоматичного створення відключена. Також є можливість задати мінімальну кількість отриманих звітів в групі, після досягнення якого спрацьовує автоматизація.

Вручну створення нового тікета на основі даних про помилку можливо тільки на сайті сервісу:

В якості аналітичних даних сервіс пропонує графічне представлення інформації про кількість звітів про падіння, скачувань, установок, а також статистику щодо використання тієї чи іншої версії програми:


Вихідний код для клієнтської частини SDK github.com/bitstadium доступний усім бажаючим — таким чином сервіс демонструє свою прозорість для Enterprise-клієнтів.

Додаткові посилання:
Оцінка: 9/10.

Continuous Integration
Примітки:

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

2. Нажаль на даний момент налаштування CI від Apple не завжди проходить гладко. Як правило виникають проблеми з signing identity і provision profiles, для їх вирішення у простому випадку досить встановити останню версію OS X Server (на момент публікації 4.0.3 для OS X Yosemite) і в налаштуваннях Xcode додати обліковий запис Apple Developer. Якщо ж проблеми залишаються, то в моєму випадку потрібно:
  • додати використовуваний ключ і сертифікат в keychain System
  • скопіювати використовуваний provision profile у папку „/Library/Developer/XcodeServer/ProvisioningProfiles/“ (повідомлення про помилку „No provisioning profiles containing one of the following signing identities was found“)
  • додати виняток для codesign у властивостях для ключа (інакше, якщо бот налаштований на створення архіву, інтеграція не зможе завершитися і буде зупинена з помилкою „Creating archive failed: xcodebuild exited with status 15“, докладніше


Скрипт для використання разом з ботами Xcode може бути в двох варіантах: з використанням curl або з використанням спеціальної утиліти puck (її можна встановити разом з десктопної версією клієнта HockeyApp, докладніше):

У другому випадку необхідно створити symlink для puck: „sudo ln-s /usr/local/bin/puck /usr/bin/puck“, інакше бот не зможе виконати потрібний сценарій.



Сам скрипт додається на останньому кроці майстра створення/налаштування бота:

puck-download=true-notify=true-force=true-submit=auto-app_id=APP_ID-api_token=API_TOKEN "${XCS_ARCHIVE}"

APP_ID - можна знайти на сторінці програми
API_TOKEN - створюється в налаштуваннях облікового запису на вкладці "API Tokens"

В якості додаткових параметрів можна вказати (в тому числі):

-notes=<text> release notes text (single line only!)
-notes_path=<path> absolute path to release notes file
-tags=<comma-separated string> restrict version to tags
-teams=<comma-separated string> restrict version to team IDs
-users=<comma-separated string> restrict version to user IDs

Повний список параметрів можна отримати запуском „puck-help“.

Оцінка: 9/10.

Загальна сумарна оцінка за всіма розділами: 33 бали.

Частина 1. Apple TestFlight. Продовження слідує...

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.