tvOS: разработка за Apple TV с Focus Engine

Автор: IT Sectr Публикувано: 2026-02-07 Време за четене: 11 мин

tvOS — операционната система на Apple за Apple TV, пусната за първи път през 2015 г. заедно с Apple TV от 4-то поколение. Разработката на приложения за tvOS се извършва на Swift с използване на SwiftUI и TVMLKit. Ключовата разлика от iOS е управлението на фокуса чрез Siri Remote вместо докосване. Според Apple, tvOS е инсталиран на над 100 милиона активни устройства по света.

Основни точки

  • tvOS — ОС на Apple за телевизионни приемници на ядро XNU с Focus Engine вместо touch
  • Focus Engine — система за управление на фокуса между елементи чрез Siri Remote
  • SwiftUI и TVMLKit — два подхода за разработка: естествен и JavaScript шаблони
  • Top Shelf — динамично съдържание на началния екран на Apple TV
  • Размер на приложението строго ограничен до 4 ГБ, препоръчително не повече от 500 МБ

Какво е tvOS?

tvOS — операционната система на Apple за телевизионни приемници Apple TV, базирана на същото ядро Darwin XNU като iOS. Пусната за първи път на 30 октомври 2015 г. с Apple TV от 4-то поколение. tvOS замени остарялата Apple TV Software (базирана на iOS, без App Store и SDK). Системата е оптимизирана за работа на телевизор с разделителна способност до 4K HDR (Dolby Vision) и звук Dolby Atmos.

Според Apple (WWDC 2025), tvOS е инсталиран на Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) и е вграден в някои модели Smart TV чрез AirPlay. Apple TV използва чипове A8 (HD), A10X Fusion (1-во поколение 4K), A12 Bionic (2-ро поколение 4K) и A15 Bionic (3-то поколение 4K). Всички модели поддържат tvOS 17. tvOS няма камера, микрофон (освен дистанционното), сензорен екран или GPS.

Ключовата характеристика на tvOS е Focus Engine, който заменя touch управлението с фокусна навигация. Потребителят премества избора между UI елементи с помощта на Siri Remote. Разработчиците създават приложения на Swift/SwiftUI (естествени) или JavaScript/TVML (медийни приложения Netflix, Hulu).

История на версиите на tvOS

tvOS 9 (2015) — първа версия с SDK и App Store. tvOS 10 (2016) — единично влизане (SSO) за кабелни абонаменти. tvOS 11 (2017) — поддръжка на Amazon Prime Video и автоматичен режим. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — режим за множество потребители. tvOS 17 (2023) — FaceTime, VPN, аудио профили чрез HDMI.

Версия tvOSГодинаКлючова иновация
tvOS 92015App Store, SDK, Siri Remote
tvOS 102016Единично влизане (SSO), Live Tune-In
tvOS 112017Amazon Prime, автоматичен режим
tvOS 122018Dolby Atmos, парола с iPhone
tvOS 132019Множество потребители, Контролен център на TV
tvOS 172023FaceTime, VPN, Намиране на Siri Remote

Архитектура на tvOS и разлики от iOS

Архитектурата на tvOS се базира на същия стек като iOS: ядро XNU, системни услуги Core Services, медиен слой Media и потребителски слой Cocoa Touch. Съществуват обаче значителни разлики, свързани със спецификата на телевизионната платформа.

Хардуерни ограничения

Apple TV 4K от 3-то поколение използва A15 Bionic с 6 ядра CPU (2 производителни, 4 енергийно ефективни) и 5-ядрен GPU. RAM — 4 ГБ (вътрешна SSD памет от 64 ГБ). Системата няма постоянна локална памет в класически смисъл: всички данни на приложенията могат да бъдат изтрити от tvOS при липса на място (purgeable). Разработчикът трябва да използва iCloud Key-Value Storage или CloudKit за запазване на състоянието.

TVMLKit и TVJS

TVMLKit — уникална рамка за tvOS, която позволява създаване на интерфейси на JavaScript и TVML (подобен на XML език, специфичен за Apple). TVMLKit зарежда JSON/XML от сървъра и изобразява естествени UI компоненти. Това е основната технология за стрийминг услуги: Netflix, Hulu, Amazon Prime Video използват TVMLKit. TVJS — JavaScript среда, работеща в изолиран контекст.

Липса на постоянно хранилище

tvOS автоматично управлява дисковото пространство: при липса на място системата може да изтрие кеша, изтеглените ресурси и дори самото приложение (запазвайки иконата). При повторно отваряне приложението трябва да възстанови състоянието си. iCloud NSUbiquitousKeyValueStore е единственото гарантирано постоянно хранилище за настройки (до 1 МБ на приложение).

swift
import Foundation

// // Запазване и възстановяване на състояние в tvOS
final class StateManager {

    private let store = NSUbiquitousKeyValueStore.default
    private let coder = JSONEncoder()
    private let decoder = JSONDecoder()

    // Запазване на напредъка на гледане
    func saveProgress<T: Codable>(_ value: T, for key: String) {
        if let data = try? coder.encode(value) {
            store.set(data, for: key)
            store.synchronize()
        }
    }

    // Възстановяване на състоянието след изтриване на кеша
    func restoreProgress<T: Codable>(_ type: T.Type, for key: String) -> T? {
        guard let data = store.data(for: key) else { return nil }
        return try? decoder.decode(type, from: data)
    }

    // Обработка на уведомление за промяна на друго устройство
    init() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(ubiquitousKeyValueStoreDidChange),
            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
            object: store
        )
    }

    @objc
    private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
        print("Данните са променени на друго устройство")
    }
}

Мениджърът StateManager използва NSUbiquitousKeyValueStore за запазване на състоянието на приложението на tvOS. Тъй като локалното хранилище може да бъде изчистено от системата, само iCloud гарантира постоянство на данните. store.synchronize() незабавно изпраща данни на сървъра, докато didChangeExternallyNotification уведомява приложението за промени от други устройства на потребителя.

Focus Engine: навигация и фокус

Focus Engine — ключовият механизъм на tvOS, който заменя touch събитията с фокусна навигация. Потребителят премества избора между UI елементи с помощта на Siri Remote (сензорна повърхност или бутони). Системата автоматично изчислява следващия фокусен елемент въз основа на разстояние и посока на движение.

UIFocusEnvironment и йерархия на фокуса

Всеки UI елемент, способен да получава фокус, имплементира протокола UIFocusEnvironment. UIKit автоматично определя реда на навигация въз основа на геометрията на елементите. Разработчикът може да преопредели предпочитания фокус чрез preferredFocusEnvironments, да посочи масив от дъщерни focusEnvironment и да контролира движението чрез UIFocusHeading (up, down, left, right). UIFocusGuide позволява задаване на персонализирани маршрути за нетривиални оформления.

UIFocusEffect и паралакс

tvOS автоматично добавя UIFocusEffect към фокусирания елемент: сянка, подчертаване и паралакс ефект (отместване при накланяне на дистанционното). Разработчикът може да деактивира ефекта чрез focusedValue или да го персонализира чрез UIFocusEffect.transform. В SwiftUI паралаксът се добавя с модификатора .hoverEffect(.highlight).

swift
import SwiftUI

// // tvOS компонент с персонализиран фокус
struct MovieCardView: View {
    let movie: Movie
    @State private var isFocused = false
    @Environment(\.isFocused) var envFocused

    var body: some View {
        VStack(spacing: 8) {
            AsyncImage(url: movie.posterURL) { phase in
                if let image = phase.image {
                    image
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: 320, height: 180)
                        .cornerRadius(8)
                        .overlay(
                            RoundedRectangle(cornerRadius: 8)
                                .stroke(isFocused ? Color.blue : Color.clear, lineWidth: 3)
                        )
                        .scaleEffect(isFocused ? 1.08 : 1.0)
                }
            }

            Text(movie.title)
                .font(.caption)
                .lineLimit(2)
                .foregroundStyle(isFocused ? .white : .gray)
        }
        .onHover { hovering in
            withAnimation(.spring(response: 0.35)) {
                isFocused = hovering
            }
        }
        .onPlayPauseCommand {
            // Обработка на бутона Play/Pause на дистанционното
            startPlayback()
        }
        .focusable()
        .focusEffect { phase in
            // Персонализиран фокусен ефект
            phase == .active ?
                AnyView(self.scaleEffect(1.08)) :
                AnyView(self.scaleEffect(1.0))
        }
    }

    private func startPlayback() {
        print("Възпроизвеждане: \(movie.title)")
    }
}

// // Главен екран с мрежа от филми
struct MovieGridScreen: View {
    let movies: [Movie]

    var body: some View {
        ScrollView {
            LazyVGrid(columns: [GridItem(.adaptive(minimum: 320, maximum: 400))], spacing: 24) {
                ForEach(movies) { movie in
                    MovieCardView(movie: movie)
                }
            }
            .padding(60)
        }
        .focusSection() // Группировка для навигации
    }
}

MovieCardView демонстрира Focus Engine в SwiftUI: модификаторът .focusable() прави елемента фокусируем, .onHover проследява промени на състоянието, .focusEffect позволява персонализирана фокусна анимация. .onPlayPauseCommand обработва натискане на бутона Play/Pause на Siri Remote. focusSection групира мрежа за циклична навигация.

Siri Remote: жестове и бутони

Siri Remote от второ поколение (2021) има сензорна повърхност, 5 бутона и микрофон. tvOS поддържа жестове: плъзгане (навигация), докосване (избор), двойно докосване (центриране), прищипване-зуум (изображения), продължително натискане (контекстно меню). UIPress с типове .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — предварително определени типове натискане. Микрофонът на дистанционното се използва за Siri и гласово търсене.

Top Shelf и екран на приложения

Top Shelf е зона на началния екран на Apple TV, която показва динамично съдържание на приложението, когато то е в горния ред. В tvOS 17 Top Shelf поддържа до 8 джаджи с персонализиран фон и интерактивни елементи. Разработчикът имплементира TVTopShelfProvider за предоставяне на съдържание.

Стилове на Top Shelf

Налични са три стила на Top Shelf: Sectioned — категоризиран списък (сериали по жанр), Inset — централен елемент с подробно описание (препоръчан филм), Photo — мрежа от изображения (фотоалбуми). Системата актуализира Top Shelf във фонов режим чрез BGTaskScheduler, подобно на watchOS. Доставчикът трябва бързо да връща съдържание — tvOS кешира данни за 24 часа.

Екран на приложения

Началният екран на tvOS се състои от ред Top Shelf и мрежа от приложения. Потребителите могат да пренареждат икони и да създават папки. tvOS автоматично разтоварва приложения от паметта при недостиг на ресурси, затова разработчикът трябва правилно да обработва UISceneDidDisconnectNotification и да възстановява състоянието при рестартиране.

Стил Top ShelfФорматКога да се използва
SectionedСекции с заглавия и елементиСериали, подкасти, плейлисти
InsetЕдин голям елемент с описаниеФилм на деня, ексклузив
PhotoМрежа от изображения без надписиФотоалбуми, галерии
TabРаздели с превключванеСпорт по вид, новини по тема

SwiftUI за Apple TV

SwiftUI се поддържа напълно в tvOS от tvOS 13. Apple препоръчва SwiftUI за всички нови проекти. Същият SwiftUI код работи на iOS, iPadOS, macOS и tvOS с минимални адаптации за Focus Engine. SwiftUI за tvOS предоставя модификаторите .focusable(), .focusSection(), .onPlayPauseCommand и .onExitCommand.

Адаптиране към tvOS

При пренасяне на iOS приложение на tvOS трябва: да замените TabView с NavigationView с фокусна навигация, да увеличите размерите на шрифтовете (минимум 30pt за заглавия, 22pt за текст), да добавите полета (минимум 40pt от ръбовете — безопасна зона на телевизори). tvOS не поддържа UIAlertController с текстово поле, UIWebView и MFMailComposeViewController.

iOS компонентЕквивалент в tvOSЗабележка
UISliderUIProgressView + бутониSlider не се поддържа
UIPickerViewТаблица с фокусPicker заменен със списък
UITextFieldUIAlertController (само за четене)Въвеждане на текст чрез Siri
UIActionSheetUIAlertControllerПоддържа се
UIWebViewНе се поддържаИзползвайте WKWebView
MFMailComposeНе се поддържаОтворете mailto: URL

Препоръки за дизайн

Apple HIG за tvOS: минимален размер на сензорната зона 60×60 точки, текст четим от 3 метра (размер на шрифта не по-малък от 22pt за тяло), контраст на текста 4.5:1, тъмен фон (светлият фон отблясва на OLED телевизори), всички елементи достъпни без сложни жестове. Разделителна способност: Apple TV 4K извежда 3840×2160 (4K) или 1920×1080 (HD) при 60 FPS. Всички изображения трябва да бъдат @2x (за 1080p) и @4x (за 4K).

TVMLKit и медийни приложения

TVMLKit — рамка за създаване на медийни приложения на tvOS с уеб технологии: JavaScript (TVJS) и TVML (специфичен за Apple XML). Приложенията TVMLKit не изискват компилиране — интерфейсът се зарежда от сървъра, което позволява актуализации на съдържание без преминаване през App Review. Използва се от големи стрийминг услуги за въртележки със съдържание.

TVML: структура на шаблони

TVML предоставя готови шаблони: CatalogTemplate (каталог с секции), ProductTemplate (страница с детайли на съдържание), FormTemplate (формуляри за вход), LoadingTemplate (индикатор за зареждане). Шаблоните се описват в XML и се стилизират чрез подобни на CSS атрибути. TVJS кодът обработва натискания и извиква естествени API.

xml
<!-- CatalogTemplate — каталог фильмов на TVML -->
<document>
  <catalogTemplate>
    <banner>
      <title>Новинки кино</title>
      <description>Свежие премьеры и эксклюзивы</description>
    </banner>
    <section>
      <header>
        <title>Популярное</title>
      </header>
      <items>
        <lockup>
          <img src="https://cdn.example.com/movie1.jpg" width=300 height=450/>
          <title>Интерстеллар</title>
        </lockup>
        <lockup>
          <img src="https://cdn.example.com/movie2.jpg" width=300 height=450/>
          <title>Начало</title>
        </lockup>
      </items>
    </section>
  </catalogTemplate>
</document>

TVML шаблонът CatalogTemplate съдържа банер със заглавие и секции с lockup елементи. Всеки lockup е карта на филм с изображение и заглавие. Focus Engine автоматично управлява навигацията между lockup елементите. При натискане TVJS обработчикът получава събитие select и може да покаже страница с детайли чрез ProductTemplate.

TVJS: обработка на събития

TVJS е JavaScript среда, изолирана от основното приложение. TVJS кодът се извиква при зареждане на TVML шаблон и обработка на събития. TVJS има достъп до естествени API чрез Appliance и Player за контрол на възпроизвеждането на видео. Apple препоръчва използването на TVMLKit само за медийни приложения с чести актуализации на съдържание. За игри и интерактивни приложения SwiftUI е за предпочитане.

Публикуване на tvOS приложения

Публикуването на tvOS приложение изисква абонамент за Apple Developer Program ($99/година). Приложението се качва чрез App Store Connect като отделен продукт или като част от универсален двоичен файл (iOS + tvOS). App Review проверява стабилност, съответствие с HIG и ограничението за размер от 4 ГБ.

Изграждане и разпространение

Xcode създава tvOS цел с разширение .app (пакет .ipa). Архитектура — arm64 (Apple TV използва ARM чипове Apple Silicon). tvOS не поддържа рамки с i386 или x86_64. Приложението се подписва със сертификат Apple Development (тестване) или Apple Distribution (публикуване). Възможно е разпространение чрез Volume Purchase Program за бизнес клиенти.

Изисквания на App Review

Специални изисквания на tvOS: всички елементи на интерфейса трябва да бъдат достъпни чрез Focus Engine без използване на сензорен екран или клавиатура. Приложенията, изискващи оторизация, трябва да поддържат единично влизане (SSO) чрез iTunes Store. Рекламното съдържание не може да прекъсва възпроизвеждането без съгласието на потребителя. Размерът на качения двоичен файл не трябва да надвишава 4 ГБ.

ИзискванеОписание
Размер на приложениетоНе повече от 4 ГБ, препоръчително 500 МБ
Разделителна способност на графиката@2x (1920×1080) и @4x (3840×2160) за 4K
Фокусна навигацияВсички елементи достъпни чрез Siri Remote
Видео форматH.264, HEVC, Dolby Vision (Profile 5)
АудиоDolby Atmos (E-AC-3 JOC) и стерео AAC

Често задавани въпроси

Какви езици се използват за разработка на tvOS?

Основният език е Swift с рамките SwiftUI и UIKit. За медийни приложения се използва TVMLKit с JavaScript и TVML шаблони, зареждани от сървъра. Objective-C се поддържа за наследени проекти. Apple препоръчва SwiftUI за всички нови tvOS проекти.

По какво tvOS се различава от iOS?

tvOS използва Focus Engine вместо touch събития, няма камера или микрофон (освен Siri Remote), ограничава размера на приложението до 4 ГБ, не поддържа постоянно локално хранилище (purgeable) и изисква Metal за рендериране. Всички приложения работят само на ARM64.

Как работи Focus Engine в tvOS?

Focus Engine управлява движението на фокуса между UI елементи чрез Siri Remote. Разработчикът задава предпочитания фокус чрез preferredFocusEnvironments. UIFocusHeading (up, down, left, right) определя посоката. UIFocusEffect автоматично добавя паралакс и сянка към активния елемент.

Как да публикувате приложения за Apple TV?

Публикуването изисква абонамент за Apple Developer Program ($99/година). Приложението се качва чрез Xcode Organizer или Transporter в App Store Connect. Модерацията проверява: съвместимост с Focus Engine, стабилност, липса на UIWebView и ограничението за размер от 4 ГБ.

Може ли да се използва UIKit в tvOS?

Да, UIKit се поддържа напълно в tvOS: UIView, UIViewController, UICollectionView, UITableView. Въпреки това UIKit е адаптиран за Focus Engine: UIButton и UIControl получават събития чрез натискане на дистанционното, а не чрез докосване. SwiftUI се препоръчва за нови проекти поради автоматичното адаптиране към фокуса.

Резюме

  • tvOS — ОС на Apple за телевизионни приемници на ядро XNU с управление Focus Engine
  • Focus Engine заменя touch управлението с движение на фокуса чрез Siri Remote с паралакс ефекти
  • TVMLKit — уникална рамка за медийни приложения на JavaScript сървърни TVML шаблони
  • Top Shelf предоставя динамично съдържание на началния екран чрез TVTopShelfProvider
  • SwiftUI се поддържа напълно от tvOS 13 с модификатори focusable, focusSection и onPlayPauseCommand
  • Ограничения на tvOS: размер 4 ГБ, purgeable хранилище, без камера, UIWebView или MFMailCompose
  • Публикуване изисква Apple Developer Program, графика @2x/@4x, формат HEVC и Dolby Atmos

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също