Сегодня мы познакомимся с WatchKit и создадим свое первое приложение для Apple Watch.

Apple Watch & WatchOS

На WWDC 2016 Apple вновь уделило много времени своему молодому детищу — Apple Watch и его обновленной операционной среде watchOS 3. Компания постепенно подходит к моменту, когда часы станут полностью независимыми от телефона. В watchOS 3 увеличилась производительность системы, приложения стали быстрее и более отзывчивыми. Когда вы выходите из приложения, система оставляет его в бэграунде примерно на 8 минут, чтобы повторный запуск осуществлялся намного быстрее. Появился доступ к CloudKit, и часы могут быть синхронизированы с телефоном, если его нет рядом.
Всё это наталкивает на мысли о том, что Apple всё-таки удастся сделать часы более привлекательным девайсом для человека, и нужно быть готовым к созданию красивых и быстрых приложений под watchOS.

Проба пера

Чтобы не отходить от канонов, мы напишем первым приложение «Hello World».

Сочетанием клавиш ⇧⌘N создадим новый проект iOS App with WatchKit App.

ios-app-with-watchkit-app

Назовем наш проект HelloAppleWatch и снимем все галочки — сегодня они нам не понадобятся.

HelloAppleWatch

Watch app состоит из трех главных частей:

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

Watch app: это bundle из файлов и ресурсов, которые содержатся в хосте, но впоследствии устанавливаются на Apple Watch. Здесь хранятся все storyboard’ы, картинки или локализации, используемые storyboard’ами.

Watch extension: содержит весь написаный код, который компилируется и передаётся Apple Watch на выполнение. Здесь должны храниться все картинки и локализации, которые используются в коде.


Как мы видим, xCode создал все эти составляющие с соответствующими именами: HelloAppleWatch, HelloAppleWatch WatchKit App, HelloAppleWatch WatchKit Extension.

Откроем Interface.storyboard в HelloAppleWatch WatchKit App.

interfaceПеред нами давольно привычная картина, ничем не отличающаяся от сториборда для iPhone/iPad.

В Object Library выберем label и перетащим его на наш контроллер.

label

Чтобы переместить label в центр контроллера необходимо в Attributes inspector изменить значения Alignment Horizontal/Alignment Vartical на Center. Если Вы попытаетесь перетащить label мышкой на другую позицию, то у Вас ничего не получится — он вернется на исходную позицию.

alignment

Теперь изменим значение Text на «Hello World!!!«. И поменяем шрифт на System 20.0

textОбратите внимание: размер лэйбла меняется автоматически.

Теперь запустим наше приложение. Для этого изменим активную схему на HelloAppleWatch WatchKit App и нажмём кнопку Run.

run

Видим, что у нас запустилось два симулятора: iPhone и Watch. Текст отображается корректно.

simulatorsТеперь давайте изменим значение Text на «Hello Apple Watch!!!», но на этот раз уже из кода. Для этого перейдем в файл InterfaceController.swift. Добавим аутлет

@IBOutlet var label: WKInterfaceLabel

И внутри метода willActivate() установим новое значение Text:

label.setText("Hello Apple Watch!!!")

Теперь наш класс примет вид:

class

Соединием в Connections inspector наш Outlet с нашим лэйблом. И изменим количество строк у label на 0, а Alignment на center.

lines

Запустим проект и увидим приятную картину.

hello-apple-watchОтлично. Вот первое приложение для Apple Watch и готово.

WatchKit framework

В завершении хочется чуть более детально осветить WatchKit framework, благодаря которому и запускаются все приложения для Apple Watch.

В фреймворк входят порядка 43 классов, но особняком стоят три из них:

  • WKInterfaceController: версия всем привычного UIViewController в WatchKit;
  • WKInterfaceObject: базовый класс всех элементов интерфейса;
  • WKInterfaceDeviceпредоставляет всю информацию о часах, размере экрана, локали.

Lifecycle

Жизненный цикл WKInterfaceController очень похож на жизненный цикл UIViewController’а.

  • awake(withContext:) — вызывается сразу сразу после того, как контроллер был загружен из сториборда;
  • willActivate() — перед тем, как контроллер появится на экране, управление будет передано в этот метод;
  • didAppear() — вызывается после появляения контроллера на экране;
  • willDisappear() — вызывается перед переходом на новый экран;
  • didDeactivate() — вызывается каждый раз, когда пользователь покинул текущий контроллер.

Итоги

Сегодня мы создали самое простое из возможных приложение для Apple Watch. Удостоверились, что WatchKit похож на UIKit. И, что самое главное, я надеюсь, испытали удовольствие от простого введения в разработку под watchOS.

На этом статьи про Apple Watch не заканчиваются. Следите за обновлениями.
Спасибо за внимание)

Автор снимка: @bandwerk

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.