tvOS: развој за Apple TV са Focus Engine

Аутор: IT Sectr Објављено: 2026-02-07 Време читања: 11 мин

tvOS — Аплов оперативни систем за Apple TV, први пут објављен 2015. године заједно са Apple TV 4. генерације. Развој апликација за tvOS се врши у Swift-у коришћењем SwiftUI и TVMLKit-а. Кључна разлика од iOS-а је управљање фокусом преко Siri Remote-а уместо додира. Према Apple-у, tvOS је инсталиран на више од 100 милиона активних уређаја широм света.

Главне тачке

  • tvOS — Аплов ОС за ТВ сет-топ кутије на XNU кернелу са Focus Engine уместо додира
  • Focus Engine — систем управљања фокусом између елемената преко Siri Remote-а
  • SwiftUI и TVMLKit — два приступа развоју: изворни и JavaScript шаблони
  • Top Shelf — динамички садржај на главном екрану Apple TV-а
  • Величина апликације строго ограничена на 4 ГБ, препоручено не више од 500 МБ

Шта је tvOS?

tvOS — Аплов оперативни систем за 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, који замењује управљање додиром навигацијом фокусом. Корисник помера избор између 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Вишекориснички, Контролни центар на ТВ-у
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-у (Apple-специфичан XML-сличан језик). 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-а који замењује додирне догађаје навигацијом фокусом. Корисник помера избор између 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 уместо додирних догађаја, нема камеру или микрофон (осим 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 — Аплов ОС за ТВ сет-топ кутије на XNU кернелу са контролом Focus Engine
  • Focus Engine замењује контролу додиром кретањем фокуса преко 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође