Зацікавившись появою розумного годинника від Apple, ми взялись за розробку додатка, який дає змогу керувати електромобілем Tesla Model S через Інтернет за допомогою веб-сервісу API. Додаток досконало вписується в концепт розумних годинників, дозволяє користувачам отримувати важливу інформацію про їхнє авто та керувати ним швидко, не витрачаючи часу на те, щоби дістати з кишені та розблокувати свій телефон.
Можливості Apple Watch для розробників
Якщо ви знайомі з WatchKit, SDK для розробки додатку для Apple Watch, то можете одразу переходити до частини, що безпосередньо стосується додатку.
Якщо ж ні, то у вас є можливість ознайомитися з технічними можливостями WatchKit. Apple люб’язно надав бета-версію SDK учасникам Developer Program. А тут, на жаль, не все так гладко, як це розказує у своїй презентації Тім Кук. Коротко кажучи, Apple Watch — це всього-на-всього додатковий монітор для вашого iPhone, і він не здатен робити що-небудь самостійно. Ось що кажуть з цього приводу представники Apple:
«Застосунки для Apple Watch доповнюють ваш основний iOS-додаток, але не замінюють його. Якщо сьогодні час, який користувач проводить в програмі, вимірюється у хвилинах, то час роботи з додатками Apple Watch буде вимірюватися у секундах».
Саме додаток для iPhone містить у собі весь код у вигляді так званого Watch Extension (ще один тип розширень на додачу до Today Extension, Share Extension та ін., які існували в iOS8), а на боці Apple Watch — виключно ресурси додатка та UI дисплей (у вигляді Storyboard). Ось, власне, діаграми, надані нам компанією Apple, які пояснюють, як це працює і яким чином відбувається взаємодія між смартфоном і розумним годинником.
Тобто, як бачимо, розумний годинник Apple без iPhone — просто іграшка, з якої жодної користі. І хоча Apple згадував про WatchKit Apps — повнофункційні додатки, які, теоретично, повинні працювати без iPhone, поки що вони недоступні, і ніхто не знає, коли з’являться на ринку.
З іншого боку цей істотний недолік — як би парадоксально це не звучало — є великим плюсом. Зважаючи на те, що додаток годинника, по суті, працює на iPhone, програміст має у своєму розпорядженні увесь функціонал і дані з самого iPhone (щоправда, Apple вже попередив нас про ймовірні обмеження на енергозатратні операції). Сам же WatchKit — це такий собі «місток», що з’єднує код на iPhone з інтерфейсом на Apple Watch.
Усі додатки для Apple Watch мають три cхеми роботи:
1) повноцінний додаток, з яким можна працювати з екрану розумного годинника;
2) Glances, що відображає лише картки з необхідною для користувача інформацією;
3) активні сповіщення із двома сценаріями виконання:
— коли ви піднімаєте руку, щоби прочитати нотифікацію і не опускаєте її впродовж кількох секунд, розумний годинник показує вам детальнішу інформацію;
— ви можете швидко реагувати на нотифікації, виконуючи певні дії.
Якщо зануритись глибше і подивитися на можливості, доступні розробникам додатків, відкриється доволі невтішна картина. Apple не балує девелоперів надміром функціоналу та інструментів. Проте, є надія, що така обмеженість функціоналу пов’язана з тим, що це лише перша бета-версія.
А зараз про погане, тобто про функції, які не доступні для девелоперів:
— у розумного годинника є акселерометр та гідроскоп, але девелопери не мають до них доступу;
— існує також Bluetooth, проте, через нього можна з’єднатися виключно з вашим iPhone, і девелоперам він також не доступний;
— екран годинника чутливий до сили натиску, однак розробникам доступний тільки Force Touch, який використовується для виклику контекстного меню;
— поки що також недоступна система тактильних сповіщень TapTic Engine;
— є вбудований динамік і мікрофон, але доступу до нього немає;
— щодо GPS, то ніби-то він є, але тільки на вашому iPhone.
Таким чином, з точки зору розробки, Apple Watch на сьогодні є дуже обмеженим пристроєм зі слабким потенціалом для програмістів. Хоча сміливі висновки з цього приводу ми зможемо робити після 24 квітня, коли годинник з’явиться у продажі. Наразі говорити про нього ми можемо лише виходячи із наданого SDK, який, нагадаємо ще раз, перебуває на першій бета стадії.
У результаті в нас складається досить неоднозначне враження про новинку від Apple. З одного боку все гарно, інноваційно і цікаво, а з іншого — обмежений функціонал не дає можливості розробити дійсно функціональний додаток із гарним дизайном.
Apple Watch для Tesla Car
Але ми не здалися і поставили собі за мету використати увесь доступний функціонал управління Tesla Car, адаптувавши UX до контексту Apple Watch. Після брейнштормінгу ми зупинилися на 6 екранах:
— main screen (водночас екран статусу автомобіля) —повідомляє про загальний стан електромобіля: стан батареї, температуру повітря, пробіг та ін.;
— controls menu (контекстне меню з командами) — дає можливість відчиняти/зачиняти авто, вмикати/вимикати фари та сигналити;
— charging screen (екран заряду батареї авто) — детально інформує про стан батареї та перебіг процесу заряджання;
— climate screen (екран клімату всередині авто) — показує температуру і дає можливість змінювати її в різних зонах авто;
— location screen (екран місця перебування авто) — повідомляє про поточне місце перебування електромобіля;
— glance screen — екран, на який виводиться інформація про стан автомобіля для Apple Watch Glance.
Технічні деталі додатку
Watch Extension для годинника, так само як і версія додатка для iPhone, взаємодіє із веб-сервісом API від Tesla через окремий модуль роботи з сервісом, у формі окремого Cocoa Touch Framework (ще одна порада для розробниківвід Apple з написання додатків, що містять Extension).
Окрім цього був реалізований механізм обміну даними між iPhone і Apple Watch за допомогою shared app group:
«App group — це спеціальний контейнер групи додатків, що уможливлює одночасний доступ до спільних даних. Звичайний обмін даними між додатком та розширенням не можливий, оскільки кожен з них виконується у своєму „sandbox“ і не має доступу до пам’яті інших додатків. Тому, щоби уможливити передачу та обмін даними між додатком і розширенням, компанія Apple розробила App Group. Завдяки цій технології розробники можуть без будь-яких проблем додати функцію обміну даними між додатками».
Із документації Apple для девелоперів
Ось приклад коду, який забезпечує завантаження і збереження контейнера даних у NSUserDefaults:
+ (void)saveSummaryModel:(SummaryModel *)summaryModel { NSData *archivedData = [NSKeyedArchiverarchivedDataWithRootObject:summaryModel]; NSUserDefaults *defaults = [LocalStorageHelper getSharedDefaults]; [defaults setObject:archivedData forKey:SummaryModelKey]; [defaults synchronize]; } + (SummaryModel *)loadSummaryModel { NSUserDefaults *defaults = [LocalStorageHelper getSharedDefaults]; NSData *archivedData = [defaults dataForKey:SummaryModelKey]; SummaryModel *summaryModel = [NSKeyedUnarchiverunarchiveObjectWithData:archivedData]; return summaryModel; } + (NSUserDefaults *)getSharedDefaults { NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.eleks.TeslaModelS"]; return sharedDefaults; }
Окрім цього, ми створили гарний і зручний дизайн для додатка, який відповідає усім вимогам Apple.
Проблеми і труднощі
У процесі розробки додатку у нас виникали певні труднощі, переважно — під час імплементації дизайну. Ось детальніше про деякі з них.
Перша і найприкріша — це запуск додатку для годинника на симуляторі. Час від часу він просто-напросто не запускається, зависаючи на статусі «Waiting to Attach». Скоріш за все, проблема викликана нестабільністю бета-версії XCode і не пов’язана з налаштуваннями проекту чи чогось іншого.
Застосування кастомних шрифтів до текстових об’єктів.Спроба використовувати шрифти у редакторі storyboard в IDE не дала бажаного результату: сам шрифт змінювався, однак колір і розмір шрифта залишалися тими ж. Кастомізація шрифта наразі доступна тільки в коді.
// Configure an attributed string with custom font information. let menloFont = UIFont(name: "Menlo", size: 12.0)! var fontAttrs = [NSFontAttributeName : menloFont] var attrString = NSAttributedString(string: "My Text", attributes: fontAttrs) // Set the text on the label object self.label.setAttributedText(attrString)
Цифрова Коронка доволі обмежена.Перш за все, вона не доступна в емуляторі, отже ми не могли використати її для нашого додатку. Але що гірше — сторонні додатки можуть використовувати її лише для прокрутки (scrolling). Сумно, але наразі це не дає достатньо можливостей для розробників third-party додатків.
Застосування стилів дизайну до контекстного меню, що викликається за допомогою Force Touch. Кнопки меню та іконки на кнопках — сірого кольоруі не дають простору для дизайнерських пошуків.
Елемент WKInterfaceSliderмає напівпрозорий сірий фон, що накладається екрану на фон самого екрану, і його неможливо замінити чи забрати. Тому, щоби застосувати створений дизайн, довелося робити зовнішній аналог слайдера з двох кнопок — WKInterfaceButton і тексту в WKInterfaceLabel.
Через відсутність ProgressBar, ми змушені були створювати щось подібне.
Як бачимо, більшість проблем пов’язані саме із застосуванням елементів дизайну до інтерфейсу. Навіть той невеликий набір елементів, який сьогодні надає розробникам WatchKit, має дуже обмежені можливості для кастомізації. До того ж обмеження накладає сильно врізаний функціонал SDK, який на сьогодні доступний для розробників.
Результат
Увесь вихідний код ви можете знайти на нашій сторінці у Github, а ось скрінкасти функціонування додатку на емуляторі:
Попри загальне враження, що Apple Watch пропонує широке поле для творчості, на жаль, поточні можливості розробки на емуляторі не збігаються із очікуваннями. Робити щось дійсно потрібне і функціональне для Apple Watch з поточною версією SDK дуже і дуже непросто. До того ж, деякі початково обіцяні функції, що ідеально підійшли би до цікавих бізнес-ідей, поки що не доступні.
Єдине, що залишається розробникам, — чекати на реліз нової версії WatchKit і початок продажу Apple Watch.
Робоча група
— Олександр Маляренко — співавтор ідеї, iOS-інженер;
— Влад Кріченко — дизайнер;
— Олександр Болховецький — iOS інженер;
— Олександр Кабаченко — співавтор ідеї;
— Віктор Малейчик — співавтор ідеї.