Apple TV

0d0dd02dc92b49aa885008636689ff37.jpg

Привет, Хабр! Подходит к концу разработка моего первого приложения под Apple TV, и я решил поделиться собранной информацией об этой платформе.

tvOS поддерживает два типа приложений: TVML и традиционные.
Традиционные приложения — практически то же самое, что и приложения под iOS (UIKit, Storyboard)
TVML — фреймворк для создания клиент-серверных приложений. Вся логика, дизайн и данные находятся на удаленном сервере.
Средства ввода
1. Стандартный контроллер — Apple TV Remote (Siri Remote). Все функции приложения должны быть доступны с него. Приложение не может требовать использования стороннего контроллера.
2. GameController — геймпад. Бывают двух видов
2.1. Standalone controller — обычный геймпад;
2.2. Девайс, который подключается к айфону и превращает его в геймпад.
3. Кроме того, геймпады (обоих вышеназванных видов) делятся еще на два типа — Gamepad Profile и Extended Gamepad Profile. Различаются они количеством кнопок.
4. Все гейм-контроллеры могут подключаться по wi-fi и посредством кабеля.
5. Приложение, использующее гейм-контроллеры, должно поддерживать все вышеперечисленное (т.е. уметь работать с любым геймпадом, подключенным как угодно).
6. Текущая версия симулятора TV не поддерживает гейм-контроллеры.
7. Bluetooth LE — через него работает стандартный контроллер. Дополнительно можно подключить не больше двух устройств. Не работает на симуляторе.
8. Bonjour — соединение по WiFi. Выглядит наиболее привлекательно. Нет ограничения на количество подключенных девайсов. Однако здесь представитель эппла пишет, что разработчики должны будут сами определить, какое количество подключенных девайсов будет приемлемым в плане производительности.
9. CloudKit — обмен данными через iCloud.

В комплекте с TV идет Siri Remote — пульт с тачскрином, акселерометром, гироскопом и микрофоном.
1. Тачскрин — поддерживает форс тач, жесты. Можно получить доступ к «сырым» данным (т. е. к координатам касания)
2. Кнопка «Menu» — работает подобно кнопке «back» на Android: возвращает на предыдущее окно. Создает некоторые проблемы, к примеру, с загрузочными экранами (после загрузки пользователь может на него вернуться). Однако может быть переопределена в коде.
3. Кнопка «Siri» — как следует из названия, стартует Siri. К сожалению, не может быть использована в приложениях.
4. Кнопка «Play/Pause» — может быть переопределена в коде
5. Кнопка «TV» — сворачивает приложение.
6. Регулировка громкости.

Более подробно о кнопке «Menu».

Наиболее простой способ переопределить кнопку «Menu» — завести для нее gesture recognizer. Добавьте во viewDidLoad() вашего ViewController'а следующий код:

let menuClickRecognizer = UITapGestureRecognizer(target: self, action:«menuButtonClicked»)
menuClickRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)]
self.view.addGestureRecognizer(menuClickRecognizer)

Осталось создать функцию menuButtonClicked.

func menuButtonClicked(){
     debugPrint(«Menu button clicked!»)
}

Стоит отметить, что если для кнопки «Menu» был определен кастомный gesture recognizer, то стандартный перестает работать. Это может вызвать проблемы с выходом из приложения. В соответствии с этим гайдлайном, кнопка «Menu» должна возвращать пользователя на предыдущий экран, а с первого выходить на home screen. Проблему можно решить используя unwind segue, а не обычный переход между ViewController'ами.

Иконки
Довольно интересная фича нового tvos — Parallax Icons. Иконка приложения может состоять из нескольких слоев, которые красиво движутся друг за другом при смещении фокуса. Иконка может иметь от одного до пяти слоев, причем первый (фоновый) слой должен быть непрозрачным (у него не должно быть альфаканала).

Кроме того, есть возможность использовать параллакс внутри приложения. Например, для кастомных кнопок.
Посмотреть, как это все выглядит можно, например, здесь.

Top Shelf Image
Top Shelf Image — «шапка» приложения на домашнем экране. Отображается только для тех приложений, у которых иконка находится в верхней строке. Может представлять собой:
1. Обычную картинку
2. Слайдшоу
3. Dynamic Content — набор иконок, которые могут быть ссылками на какие-нибудь окна приложения. Apple запрещает использовать его для рекламы.

Ограничения
Размер приложения не может превышать 200 мб. Это ограничение можно обойти, используя On-Demand Resources, т. е. динамически подгружаемый контент.

Но самым печальным ограничением является отсутствие у приложения доступа к внутреннему хранилищу. Приложение не может просто сохранить что-нибудь на девайс. Apple предлагает использовать iCloud key-value storage для хранения небольших объемов информации (до 1 мб) и CloudKit в иных случаях.

Как пишет Apple в одном из своих многочисленных гайдлайнов, прочие продукты Apple (iPhone, iPad, Mac…) предполагают одного пользователя. Apple TV ориентирован на нескольких пользователей, взаимодействующих с приставкой и друг с другом.

Создание приложений для группы друзей или семьи — вот то, чего Apple ждет от разработчиков под tvOS.

© Habrahabr.ru