Розробка Apple TV додатка (tvOS)
tvOS — це iOS з віддаленим пультом замість тачскрину. Звучить просто, але ломает більшість мобільних паттернів: нема прямого касання, навігація через Siri Remote, екран дивлять з 3 метрів, а не з 30 см. Додаток, портований з iPhone без адаптації, отримає відмову на App Store review за tvOS HIG або просто виявиться незручним.
Фокус-навігація — головна складність
На iOS користувач тапає куди хочет. На tvOS — натискає свайп на пульті, та система переміщає фокус між focusable елементами. Focusable — це UIButton, UITextField, кастомні UIView з canBecomeFocused = true.
Проблеми починаються з кастомного UI. Якщо верстати через UIKit з кастомними View та не реалізувати UIFocusEnvironment, фокус просто не доходить до ваших елементів. SwiftUI на tvOS працює краще — focusable() модифікатор та @FocusState з коробки керують навігацією. Але LazyVGrid в tvOS вимагає явного focusSection(), інакше фокус при горизонтальному свайпі йде не в сусідній елемент сітки, а прискаку непередбачуваємо.
Parallax effect. tvOS очікує, що focusable зображення мають ефект паралакса при фокусировке. Це не просто красота — користувачі звикли до нього як візуального індикатора. Реалізується через UIImageView з adjustsImageWhenAncestorFocused = true та багатошарові LSR/LCR формати зображень (Layered Still/Animated Image). Для SwiftUI — через CardButtonStyle.
UIKit vs SwiftUI на tvOS
SwiftUI — переважний путь для нових додатків. Декларативна верстка хорошо ложиться на grid-навігацію tvOS. Але є обмеження:
-
VideoPlayerу SwiftUI не підтримує кастомні оверлеї транспортного управління — потрібенAVPlayerViewControllerчерезUIViewControllerRepresentable - Кастомний
AVPlayerViewControllerDelegateдля керування жестами пульта — лише UIKit -
TVTopShelfProviderдля контенту на головному екрані Apple TV — лише UIKit/Info.plist, без SwiftUI API
Відеоплеєр — ключовий компонент більшості tvOS-додатків. AVPlayerViewController дає стандартний інтерфейс з підтримкою пульта, субтитрів (через AVMediaSelectionGroup), глав (через AVTimedMetadataGroup) та Picture-in-Picture (з tvOS 14). Кастомізація — через contentOverlayView та customInfoViewController.
Top Shelf Extension
Якщо додаток встановлений в першому ряду головного екрану Apple TV, можна показувати динамічний контент в «полці» сверху. Реалізується через TVTopShelfContentProvider в окремому Extension target.
Два формати: TVTopShelfSectionedContent (секції з елементами) та TVTopShelfInsetContent (широкий баннер). Контент запрошується системою періодично — deferredTopShelfContent(completionBlock:). Без реалізації Top Shelf додаток показує статичну іконку.
Процес розробки
Аналіз контентної моделі та сценаріїв використання (VOD, гра, утиліта). Проектування навігації під пульт — обов'язковий етап, не можна просто перенести мобільний флоу. Розробка на SwiftUI + UIKit де потрібно. Інтеграція Top Shelf, жестів Siri Remote (UISwipeGestureRecognizer + UITapGestureRecognizer на allowedPressTypes: [.playPause, .menu]). Тестування з фізичним пультом та з iPhone як пультом через Remote app.
Публікація в App Store через окремий tvOS bundle target. tvOS-додаток може бути частиною універсального додатка (iOS + tvOS в одному bundle) або окремим продуктом.
Сроки
Просте інформаційне або VOD-додаток: 6–10 тижнів. Додаток з Top Shelf, кастомним плеєром та авторизацією: 10–16 тижнів. Гра або інтерактивний досвід — оцінка індивідуально. Вартість розраховується після аналізу функціональних вимог.







