Изучаем WatchKit — создаем первое приложение для Apple Watch

Буквально пару дней назад Apple выпустила Xcode 6.2 с поддержкой iOS 8.2 beta и WatchKit.
Данный фреймворк предназначен для взаимодействия с Apple Watch и разработки приложений для них.
Впрочем, все не так просто.

Первой и самой главной особенностью приложений для Apple Watch является то, что их код выполняется не на самих Watch, а на iPhone. Как это происходит? Достаточно просто: приложение для часов содержит только файлы пользовательского интерфейса, а вот расширение WatchKit — все контроллеры для обработки событий. Это обязательные компоненты приложения, которому требуется взаимодействовать с Watch. При установке приложения с поддержкой WatchKit на iPhone пользователю будет так же предложено установить приложение и на Watch (конечно, если Watch у пользователя есть, и они спарены с iPhone). При запуске приложения интерфейс отображается на часах, а код исполняется в бекграунде на телефоне. Очевидный и совсем не радующий вывод — без iPhone (или Jailbreak) запустить сторонний софт на Watch нельзя.

Приложения для часов бывают трех типов: Watch App, Glance Interface и Notifications. Наиболее функциональным является первый, его я и рассмотрю в статье. Glance Interface и Notifications предназначены для уведомления пользователей о каких-либо событиях, Glance позволяет создать свой кастомный вид оповещения, а Notifications работает с локальными и push уведомлениями, отображает их пользователю и позволяет добавить несколько кнопок для действий.

Приступим. Запускаем Xcode, выбираем «Create new Xcode project» и создаем новый проект из шаблона iOS — Application — Single View Application.



Название проекта, организация — на свой вкус. Мой пример будет написан на Objective-C, его и выбираем.



После выбора папки для сохранения проекта Xcode создаст его в ней и откроет. Наше приложение пока умеет только показывать белый экран на айфоне, добавим поддержку Watch: идем в меню File -> New -> Target и в появившемся окне выбираем iOS — Apple Watch — WatchApp:



На следующем окне настраиваются основные параметры приложения для Watch: язык программирования (Objective-C), типы поддерживаемых режимов приложения (у меня убраны Glance Interface и Notifications, будет только Watch App):



После нажатия «Finish» обращаем внимание на появившиеся файлы в Project Navigator:



InterfaceController.m — контроллер интерфеса нашего приложения. Этот файл будет исполняться на iPhone.
Interface.storyboard — интерфейс приложения на Watch. С его помощью мы сможем изменить интерфейс приложения на Watch.

Первым приложением будет традиционный «Helloworld». Нажимаем на Interface.storyboard и видим экран Watch в редакторе:



Компонентов у часов не так уж много: Button, Label, Slider, Image, Separator, Switch, Date, Map, Menu и Table (довольно аскетичный аналог UITableView). В режиме Glance выбор еще меньше — например, кнопки добавлять нельзя.
В Helloworld нам потребуется кнопка и текстовый лейбл. Чтобы добавить компоненты Label и Button — ищем их в Object Library (обычно внизу справа):



Просто перетягиваем нужные нам компоненты на форму Watch. В Attributes Inspector я задал свои Title кнопки и Text для Label:



Интерфейс у нас имеется, но InterfaceController.m о нем не знает. Исправим это — нам нужно добавить обработчик нажатия на кнопку и свойство, отвечающее за Label. Для удобного редактирования переключаем Xcode в Assistent Editor — кнопка со смокингом слева сверху:



В этом режиме Xcode показывает файл интерфейса с одной стороны и редактор кода с другой:



Знакомим код и интерфейс — перетягиваем с зажатой правой кнопкой мыши Label и Button на код контроллера, между
interface InterfaceController() и end. Для Label создаем свойство (firstLabel), а для Button — Action (tapOnButton). Xcode автоматически создаст пустой метод tapOnButton для кнопки в разделе implementation.



Делаем последний штрих — изменим текст firstLabel по нажатию на кнопку. Редактируем метод tapOnButton:

- (IBAction)tapOnButton 
{
    [_firstLabel setText:@"Hello World!"];
}


Интересно, что код ниже не сработает:

firstLabel.text = @"Text";

firstLabel является объектом типа WKInterfaceLabel, у которого есть только метод установки текста, но не свойство для его чтения. Из-за таких ограничений фреймворка Apple рекомендует хранить все значения элементов в коде, а не надеяться на то, что их можно будет прочитать непосредственно из компонента на интерфейсе Watch.

Для запуска приложения на Watch нужно выбрать правильную активную схему проекта. По умолчанию запускается приложение для iPhone, нам нужно выбрать запуск приложения для Watch, в моем примере это вторая строка. Выбираем iPhone 6:



Запускаем приложение. Если окошко с симулятором Watch не появилось — заходим в настройки симулятора и включаем:



В запущенном виде все выглядит так:



Наконец-то нажимаем на кнопку и с заметной задержкой наблюдаем результат:



Вот так в общем виде выглядит создание простейшего приложения для Watch. Так как приложение выполняется на iPhone — программисту доступны все методы и данные с самого iPhone (Apple уже уведомила о возможных ограничениях на энергозатратные операции). WatchKit же является «мостиком» между кодом на iPhone и интерфейсом на Watch.

Готов принять критику по статье, предложения для усовершенствования (или написания новой по данной тематике), постараюсь ответить на вопросы.

Спасибо за внимание.
Share post

Similar posts

Comments 13

  • UFO just landed and posted this here
      0
      В девайсах Эпл шифрование аппаратное. Про это написано в официальном документе о секурности яблочно й экостистемы.
      • UFO just landed and posted this here
          0
          Согласен. Не удивлюсь если для канала данных — так же. Связь же через bluetooth? Я думаю все необходимое уже несет в себе ответственная за него микросхема.
        +2
        не совсем так, приложение гибридное получается. Именно расширение часов, которое изначально хранится в приложении — передается на часы при установке или первом старте и там живет. Это приложение даже может иметь собственный кэш для картинок (вроде до 20 мегабайт).
        Правда вот вся логика приложения должна быть на телефоне, чтоб не загружать ресурсы часов. Что с одной стороны очень удобно: доступ к GPS, сети, мощному процессору. Ну а другой конечно сказывается на автономности приложения. Без телефона оно работать не будет.
        Но насколько я смог разобраться, если приложению не обязательна взаимодействие с приложением, то оно может и само иногда работать.
        Например приложение для часов: погода.
        При первом запуске оно получило из телефона картинку с текущей погодой и закэшировало. Потом при отсутствии телефона оно будет показывать последние актуальные данные.
        Только вот пока пытаюсь это реализовать на практике. Сложность в том, что надо как-то ссылку на эту картинку в storyboard прописать, так как динамически без телефона её уже не подгрузишь.

        В любом случае я думаю дальше будет расширяться функционал. Для первой версии айос вообще нельзя было писать приложения, я вообще думал, что и с часами такая-же история.
          0
          Я правильно понимаю, что такая хитрость с выполнением программ на айфоне будет давать плюс к энергосбережению и в этом главный смысл?
            +2
            Обычно у продукции apple немного другой главный смысл.
              –2
              Помимо этого в часы не надо ставить много памяти, быстрый процессор, продумывать соответствующее охлаждение.
            0
            Скачал я вчера Xcode beta с WatchKit, пощупал немного. Что хочу сказать: пока сыро, неудобно. Все завязано на IB. Ручками ничего создашь, init методы у вьюшек закрыты. Про кастомные контролы пока можно не вспоминать. Радует наличие свойства contentFrame у WKInterfaceController — наверняка задел на будущее. В целом ситуация как с айфонами — Apple постепенно давала разработчикам все больше и больше возможностей для воплощения своих идей. Надеюсь, с умными часами этот процесс будет идти быстрее.
              0
              Первой и самой главной особенностью приложений для Apple Watch является то, что их код выполняется не на самих Watch, а на iPhone.

              1) Хранение всех данных в облаке;
              2) Запуск приложений только на айфоне;

              4) Эппл увеличили время работы айфона до 2 недель, яблоконенавистники негодуют. Разгадка проста — все приложения для айфона запускается в облаке, нужен лишь постоянный канал с интернетом (об этом, как обычно, в презентации ни слова);


              Что же дальше?
                0
                iPhone в облаке? Теперь его даже не нужно будет носить с собой — Вам будет нужен только доступ в интернет.
                  0
                  А постоянные канал связи с интернетом и ест активнее всего батарейку, после экрана.
                    0
                    del

                  Only users with full accounts can post comments. Log in, please.