top of page

Пропозиція від Apple: як застосунок від Boosters потрапив на Apple Watch



Наприкінці 2022 року Apple запропонувала команді Boosters з екосистеми Genesis оптимізувати застосунок для покращення сну Avrora під Apple Watch в межах програми AppleLab. Остання дозволяє розробникам переймати найкращий досвід техногіганта — використовувати найновіші технології, консультуючись із дизайнерами та інженерами Apple.


Попри те, що Avrora уже мала аналог під watchOS, застосунок розробили з нуля — за три місяці. Про всі нюанси процесу, співпрацю з Apple та особливості розробки продукту для смартгодинника розповідає Богдан Бессараб, продакт-менеджер в Boosters. За півтора року в Genesis Богдан попрацював з мобільними та вебзастосунками, а віднедавна — і з продуктами для Apple Watch.



Богдан Бессараб, Product Manager в Boosters

Пропозиція, від якої неможливо відмовитися


Ідея від Apple була пов’язана з оновленнями технології трекінгу сну. Після релізу iOS 16 та watchOS 9 компанія дала розробникам змогу збирати та використовувати відповідні користувацькі дані, зокрема показники фаз сну.


Є три типи продуктів, які можна розробити для Apple Watch:


  • Dependent watchOS app працює в парі з застосунком на iPhone та залежить від нього у своїй роботі;

  • Independent watchOS app може працювати самостійно на годиннику Apple Watch та не залежить від iPhone;

  • Standalone app призначений спеціально для годинників Apple Watch та може не мати аналога на iPhone.


Два роки тому ми вже розробили Dependent watchOS app. Застосунок працював як віддалений контролер для iOS-додатку та дозволяв юзерам коригувати типи контенту в апці. Зараз завдання полягало у створенні окремого продукту для Apple Watch із використанням нових можливостей від платформи. Спочатку ми думали робити Standalone, однак представники Apple порадили обрати варіант Independent. Рішення справді стало більш виграшним, адже дає кращі можливості для дистрибуції застосунку.



Підписуйтеся на розсилку блогу Gen.Read


Жорсткого дедлайну нам не ставили, однак ми розуміли: чим швидше впораємося, тим краще. Розробка продукту тривала три місяці. Працювали командою з п’ятьох людей — двох iOS-розробників, продакт-дизайнера, тестувальника та продакт-менеджера.



З чого складається продукт


Проєкт почали зі створення макета нового застосунку. Ми накидали основний функціонал — всього вийшло шість частин:


  • Main Screen — основний екран.

  • Sleep Ritual — медитації, дихальні вправи та calming sounds.

  • Sleep Data — дані, які ми отримуємо, обробляємо та показуємо користувачу.

  • Smart Alarm — будильник, який допомагає користувачу легко прокидатися у швидкій фазі сну.

  • Notifications — система сповіщень у застосунку.

  • Complications — функція на кшталт віджетів, яка дає змогу виводити користувацькі показники застосунку на Watch Face.


Схема продукту Avrora для Apple Watch

Інтерфейс та технологічний стек обговорювали з представниками Apple — кожну частину окремо. Після п’яти ітерацій у дизайні ми нарешті затвердили фінальний макет і змогли перейти безпосередньо до розробки. Весь перелік необхідних кроків виглядав так: спроєктувати User Interface, обрати технологічний стек, обрати архітектуру та рушій, розробити застосунок, забезпечити аналітику, тестування й реліз.



Особливості продуктів для смартгодинника


Функціонал основного продукту потрібно було реалізувати, враховуючи обмежені можливості Apple Watch. Наприклад, на iPhone є плеєр, через який ми запускаємо Sleep Ritual. А от у годинника можливості програвати аудіоконтент немає — якщо тільки не підключити навушники або колонки.


Крім того, в Apple Watch маленький акумулятор, тому ми оптимізували продукт так, щоб він не витрачав багато заряду. Зробили сповіщення, яке попереджає про оптимальний стан батареї: якщо показник падає до 30%, гаджет треба підзарядити.


Водночас інші особливості Apple Watch дали змогу зробити продукт кращим. Наприклад, щоби зіграв будильник, апка має піднятися з бекґраунду у встановлений момент. На iPhone є проблема: застосунок не вийде підняти, поки юзер не зробить активну дію. Ми викручувалися, залишаючи calming sounds на нульовому звуці — так Avrora продовжувала працювати в фоновому режимі. А от на Apple Watch можна запланувати виклик апки з бекґраунду в конкретний проміжок часу. Це дає нам змогу реалізувати функцію будильника набагато елегантніше.


Раніше ми не знали про цю особливість — про неї розказали представники Apple. Також за їхньою порадою ми реалізували Notifications Actions. Опція дає юзеру змогу відстежити показники сну на головному екрані, не заходячи у безпосередньо в застосунок. Так, зранку після пробудження він отримує сповіщення із визначенням рівня сну та одним з чотирьох показників (Good, Bad, Well та Poor).


Технології, які використали для застосунку

Технологічний стек


У проєкті ми застосували MVVM архітектуру. Оскільки ми мали справу з останньою на той момент watchOS 9, могли собі дозволити попрацювати з усіма новими технологіями від Apple. Підтримувати старіші версії не було сенсу, адже на них немає нових опцій для трекінгу сну.


Основний стек виглядає ось так:

  • SwiftUI. На ньому легко створювати User Interface, зокрема кастомні графіки. Єдина проблема — навігація. Хоча ми й могли використовувати новий NavigationStack, він не розв'язував проблему ініціалізації наступної View з батьківської. Хотілося винести створення View та збір модулей в окрему фабрику або білдер.

Спочатку ми придумали кастомне рішення для навігації з Routers, де ViewModel викликала потрібний метод у свого Router, а та своєю чергою «проштовхувала» тип, пов‘язаний з наступним View. На жаль, на етапі відтворення аудіо у бекґраунді, ми помітили баг — під час переходу з бекґраунду у фореґраунд аудіо відтворювалося заново. Через кастомну навігацію View губила свій State, тому від роутерів довелося відмовитися.

  • Combine. Уся комунікація між об‘єктами реалізована саме через Combine, ми не використовували делегування. Технологія дає змогу легко керувати асинхронними стрімами й добре поєднується зі SwiftUI.

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

  • CoreMotion. Технологія використовується для визначення фази сну, в якій краще розбудити користувача. Цей підхід ми обрали для MVP як найпростіший варіант, пізніше плануємо замінити його на CoreML-модель з розпізнаванням руху.

  • AVFoundation. Використали для відтворення аудіо.

  • Local Notification. Більшість сповіщень прив’язані до «івентів», наприклад, коли користувач виставив будильник на новий час. З цікавого — ми реалізували сповіщення, які приходять через певний проміжок часу після того, як користувач прокинувся. Це вдалося зробити за допомогою трекінгу даних про сон у бекґраунді.

  • WidgetKit. Його ми використали для створення Complications. Тут ми зіштовхнулися одразу з декількома проблемами. Наприклад, функціонал, пов’язаний з будильником та трекінгом сну потрібно оновлювати досить часто, але, на жаль, Apple не дає такої можливості. Тому довелося адаптувати ідеї під їхні вимоги. Інша проблема — некоректне відображення зображень на деяких девайсах. Втім, це вирішилося простим зменшенням розміру картинки.

  • Extended runtime sessions. Використовується для пробудження застосунку в момент, коли потрібно моніторити фази сну користувача та відтворювати звук будильника. Багато проблем було пов’язано з тим, що Smart Alarm неможливо зробити повторюваним, тому довелося писати кастомну логіку, щоб завести будильник під капотом.


Продукт Avrora на Apple Watch

Як тестувати застосунок на Apple Watch


Ця задача була досить складною, бо ніхто раніше не працював з повноцінними застосунками для Apple Watch. Виявилося, що порівняно з iOS, watchOS набагато вибагливіша. Серед особливостей, на які потрібно було зважати:

  • інсталяція. Якщо користувач уже встановив Avrora на iPhone, ми маємо стежити, щоб застосунок автоматично завантажувався й на watchOS — за умови, що годинник під’єднаний до телефону;

  • дозвіл та права доступу. Ми використовуємо дані з Apple Health Sleep Data, тому при тестуванні потрібно впевнитися, чи коректно застосунок запитує та використовує відповідні дозволи;

  • адаптивність інтерфейсу. Оскільки екран годинників суттєво менший, ніж у мобільних пристроїв, потрібно переконатися, що контент буде оптимізованим для всіх розмірів та варіацій шрифтів. Крім того, варто звернути увагу на адаптивність у різних локалізаціях. Avrora підтримує шість мов — і треба перевірити кожну з них на різних розмірах екрана;

  • взаємодія з іншими пристроями. Як зазначалося вище, аудіоконтент на кшталт Sleep Rituals відтворюється тільки у додаткових бездротових девайсах, тому окремо потрібно пересвідчитися, чи під’єднується гарнітура до годинника, чи коректно програється звук тощо;

  • обмеженість ресурсів. Окремо потрібно перевірити, як застосунок працює під час низького рівня зарядки годинника та в різних режимах економії батареї;

  • віджети та сповіщення. Важливо, щоби дані про користувача у віджетах вчасно оновлювалися.

Цікава особливість тестування конкретно нашого застосунку — це необхідність спати з Apple Watch, щоби стежити, як саме апка буде трекати фази сну, та чи коректно працюватиме Smart Alarm.


Продукт Avrora на Apple Watch

Труднощі на шляху


Можливості Apple Watch передбачають низку цікавих технологій, але не всі з них можна адаптувати під себе. Наприклад, попри те, що Extended runtime sessions дає змогу викликати будильник з бекґраунду, вона майже не дозволяє кастомізувати UI.


Або момент з даними щодо сну. Apple надає їх лише після того, як користувач прокинувся. Але нам було б корисніше отримувати їх у режимі реального часу. Це, наприклад, дає змогу простіше та точніше реалізувати функцію Smart Alarm, та будити людину у швидкій фазі сну.


Ще один недолік — Apple Watch дає дуже обмежені можливості для дистрибуції, і майже ніяких можливостей для монетизації застосунку. Є можливість пропонувати підписки через Store Kit, але з точки зору маркетингу це не надто вдале рішення. Тому зараз важко похвалитися якимись шаленими цифрами щодо завантажень — всього продукт встановило десь три тисячі осіб.


Попри те, що ми вперше працювали з Apple Watch, можна стверджувати, що, з точки зору функціонала, Avrora — найкращий застосунок для цієї платформи у ніші апок для сну.

Ми пропонуємо і графіки відстеження сну, і медитації, і інші «сонні ритуали», і «віджети» — аби юзер міг розв'язувати свої проблеми зі сном найбільш комплексно. А нові технології та експерти з команди Apple допомогли зробити крутий та довершений продукт з точки зору користувацького досвіду.

Підписуйся на нашу розсилку та отримуй корисні матеріали першим!

Надаючи вашу електронну адресу, ви погоджуєтесь з нашою Політикою приватності.

Дякуємо, що підписалися.

image-from-rawpixel-id-5996033-png.png
bottom of page