tvOS — operační systém Apple pro Apple TV, poprvé vydaný v roce 2015 společně s Apple TV 4. generace. Vývoj aplikací pro tvOS probíhá ve Swiftu s použitím SwiftUI a TVMLKit. Klíčový rozdíl oproti iOS je ovládání ostření přes Siri Remote místo dotyku. Podle Apple je tvOS nainstalován na více než 100 milionech aktivních zařízení po celém světě.
Hlavní body
tvOS — operační systém Apple pro set-top boxy Apple TV, založený na stejném jádře Darwin XNU jako iOS. Poprvé vydán 30. října 2015 s Apple TV 4. generace. tvOS nahradil zastaralý Apple TV Software (založený na iOS, bez App Store a SDK). Systém je optimalizován pro provoz na televizi s rozlišením až 4K HDR (Dolby Vision) a zvukem Dolby Atmos.
Podle Apple (WWDC 2025) je tvOS nainstalován na Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) a integrován do některých modelů Smart TV přes AirPlay. Apple TV používá čipy A8 (HD), A10X Fusion (1. gen 4K), A12 Bionic (2. gen 4K) a A15 Bionic (3. gen 4K). Všechny modely podporují tvOS 17. tvOS nemá kameru, mikrofon (kromě dálkového ovladače), dotykovou obrazovku ani GPS.
Klíčovou vlastností tvOS je Focus Engine, který nahrazuje dotykové ovládání navigací pomocí ostření. Uživatel přesouvá výběr mezi prvky UI pomocí Siri Remote. Vývojáři vytvářejí aplikace ve Swift/SwiftUI (nativní) nebo JavaScript/TVML (mediální aplikace jako Netflix, Hulu).
tvOS 9 (2015) — první verze s SDK a App Store. tvOS 10 (2016) — jednotné přihlášení (SSO) pro kabelové předplatné. tvOS 11 (2017) — podpora Amazon Prime Video a automatický režim. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — režim více uživatelů. tvOS 17 (2023) — FaceTime, VPN, audio profily přes HDMI.
| Verze tvOS | Rok | Klíčová inovace |
|---|---|---|
| tvOS 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | Jednotné přihlášení (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, automatický režim |
| tvOS 12 | 2018 | Dolby Atmos, heslo s iPhone |
| tvOS 13 | 2019 | Více uživatelů, Ovládací centrum na TV |
| tvOS 17 | 2023 | FaceTime, VPN, Najít Siri Remote |
Architektura tvOS je založena na stejném stacku jako iOS: jádro XNU, systémové služby Core Services, mediální vrstva Media a uživatelská vrstva Cocoa Touch. Existují však významné rozdíly související se specifiky televizní platformy.
Apple TV 4K 3. generace používá A15 Bionic s 6 jádry CPU (2 výkonnostní, 4 úsporné) a 5jádrovým GPU. RAM — 4 GB (interní SSD úložiště od 64 GB). Systém nemá trvalé místní úložiště v klasickém smyslu: všechna data aplikací mohou být smazána tvOS při nedostatku místa (purgeable). Vývojář musí používat iCloud Key-Value Storage nebo CloudKit pro uchování stavu.
TVMLKit — jedinečný framework pro tvOS umožňující vytváření rozhraní v JavaScriptu a TVML (jazyk podobný XML specifický pro Apple). TVMLKit načítá JSON/XML ze serveru a vykresluje nativní UI komponenty. Toto je primární technologie pro streamovací služby: Netflix, Hulu, Amazon Prime Video používají TVMLKit. TVJS — JavaScriptové prostředí běžící v izolovaném kontextu.
tvOS automaticky spravuje místo na disku: při nedostatku místa může systém smazat mezipaměť, stažené zdroje a dokonce i samotnou aplikaci (při zachování ikony). Při opětovném otevření musí aplikace obnovit svůj stav. iCloud NSUbiquitousKeyValueStore je jediné zaručené trvalé úložiště pro nastavení (až 1 MB na aplikaci).
import Foundation
// // Uložení a obnovení stavu v tvOS
final class StateManager {
private let store = NSUbiquitousKeyValueStore.default
private let coder = JSONEncoder()
private let decoder = JSONDecoder()
// Ukládání průběhu sledování
func saveProgress<T: Codable>(_ value: T, for key: String) {
if let data = try? coder.encode(value) {
store.set(data, for: key)
store.synchronize()
}
}
// Obnovení stavu po smazání mezipaměti
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)
}
// Zpracování oznámení o změně na jiném zařízení
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(ubiquitousKeyValueStoreDidChange),
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: store
)
}
@objc
private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
print("Data změněna na jiném zařízení")
}
}Správce StateManager používá NSUbiquitousKeyValueStore k ukládání stavu aplikace na tvOS. Protože místní úložiště může být systémem vymazáno, pouze iCloud zaručuje trvanlivost dat. store.synchronize() okamžitě odesílá data na server, zatímco didChangeExternallyNotification informuje aplikaci o změnách z jiných zařízení uživatele.
Focus Engine — klíčový mechanismus tvOS, který nahrazuje dotykové události navigací pomocí ostření. Uživatel přesouvá výběr mezi prvky UI pomocí Siri Remote (dotykový povrch nebo tlačítka). Systém automaticky vypočítá další prvek ostření na základě vzdálenosti a směru pohybu.
Každý prvek UI schopný přijímat ostření implementuje protokol UIFocusEnvironment. UIKit automaticky určuje pořadí navigace na základě geometrie prvků. Vývojář může přepsat preferované ostření pomocí preferredFocusEnvironments, zadat pole podřízených focusEnvironment a řídit pohyb pomocí UIFocusHeading (up, down, left, right). UIFocusGuide umožňuje nastavit vlastní trasy pro netriviální rozvržení.
tvOS automaticky přidává UIFocusEffect k zaostřenému prvku: stín, zvýraznění a efekt paralaxy (posun při naklonění dálkového ovladače). Vývojář může efekt vypnout pomocí focusedValue nebo přizpůsobit pomocí UIFocusEffect.transform. Ve SwiftUI se paralaxa přidává modifikátorem .hoverEffect(.highlight).
import SwiftUI
// // tvOS komponent s vlastním ostřením
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 {
// Zpracování tlačítka Play/Pause na dálkovém ovladači
startPlayback()
}
.focusable()
.focusEffect { phase in
// Vlastní efekt ostření
phase == .active ?
AnyView(self.scaleEffect(1.08)) :
AnyView(self.scaleEffect(1.0))
}
}
private func startPlayback() {
print("Přehrávání: \(movie.title)")
}
}
// // Hlavní obrazovka s mřížkou filmů
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() // Seskupení pro navigaci
}
}MovieCardView demonstruje Focus Engine ve SwiftUI: modifikátor .focusable() činí prvek zaostřitelným, .onHover sleduje změny stavu, .focusEffect umožňuje vlastní animaci ostření. .onPlayPauseCommand zpracovává stisk tlačítka Play/Pause na Siri Remote. focusSection seskupuje mřížku pro cyklickou navigaci.
Siri Remote druhé generace (2021) má dotykový povrch, 5 tlačítek a mikrofon. tvOS podporuje gesta: přejetí (navigace), klepnutí (výběr), dvojité klepnutí (centrování), sevření-zoom (obrázky), dlouhé stisknutí (kontextová nabídka). UIPress s typy .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — předdefinované typy stisku. Mikrofon dálkového ovladače se používá pro Siri a hlasové vyhledávání.
Top Shelf je oblast na hlavní obrazovce Apple TV zobrazující dynamický obsah aplikace, když je v horním řádku. V tvOS 17 podporuje Top Shelf až 8 widgetů s vlastním pozadím a interaktivními prvky. Vývojář implementuje TVTopShelfProvider pro poskytování obsahu.
K dispozici jsou tři styly Top Shelf: Sectioned — kategorizovaný seznam (seriály podle žánru), Inset — centrální prvek s podrobným popisem (doporučený film), Photo — mřížka obrázků (fotoalba). Systém aktualizuje Top Shelf na pozadí přes BGTaskScheduler, podobně jako watchOS. Poskytovatel musí rychle vracet obsah — tvOS ukládá data do mezipaměti na 24 hodin.
Hlavní obrazovka tvOS se skládá z řádku Top Shelf a mřížky aplikací. Uživatelé mohou přeskupovat ikony a vytvářet složky. tvOS automaticky uvolňuje aplikace z paměti při nedostatku zdrojů, proto musí vývojář správně zpracovat UISceneDidDisconnectNotification a obnovit stav při restartu.
| Styl Top Shelf | Formát | Kdy použít |
|---|---|---|
| Sectioned | Sekce s nadpisy a položkami | Seriály, podcasty, seznamy skladeb |
| Inset | Jedna velká položka s popisem | Film dne, exkluzivně |
| Photo | Mřížka obrázků bez popisků | Fotoalba, galerie |
| Tab | Záložky s přepínáním | Sport podle typu, zprávy podle tématu |
SwiftUI je plně podporováno v tvOS od tvOS 13. Apple doporučuje SwiftUI pro všechny nové projekty. Stejný kód SwiftUI funguje na iOS, iPadOS, macOS a tvOS s minimálními úpravami pro Focus Engine. SwiftUI pro tvOS poskytuje modifikátory .focusable(), .focusSection(), .onPlayPauseCommand a .onExitCommand.
Při přenášení iOS aplikace na tvOS je třeba: nahradit TabView NavigationView s navigací pomocí ostření, zvětšit velikosti písma (minimálně 30pt pro nadpisy, 22pt pro text), přidat okraje (minimálně 40pt od okrajů — bezpečná zóna na televizorech). tvOS nepodporuje UIAlertController s textovým polem, UIWebView a MFMailComposeViewController.
| Komponent iOS | Ekvivalent tvOS | Poznámka |
|---|---|---|
| UISlider | UIProgressView + tlačítka | Slider není podporován |
| UIPickerView | Tabulka s ostřením | Picker nahrazen seznamem |
| UITextField | UIAlertController (pouze čtení) | Vstup textu přes Siri |
| UIActionSheet | UIAlertController | Podporováno |
| UIWebView | Není podporováno | Použijte WKWebView |
| MFMailCompose | Není podporováno | Otevřete mailto: URL |
Apple HIG pro tvOS: minimální velikost dotykové oblasti 60×60 bodů, text čitelný ze vzdálenosti 3 metrů (velikost písma ne menší než 22pt pro tělo), kontrast textu 4.5:1, tmavé pozadí (světlé pozadí způsobuje odlesky na OLED televizorech), všechny prvky přístupné bez složitých gest. Rozlišení: Apple TV 4K produkuje 3840×2160 (4K) nebo 1920×1080 (HD) při 60 FPS. Všechny obrázky by měly být @2x (pro 1080p) a @4x (pro 4K).
TVMLKit — framework pro vytváření mediálních aplikací na tvOS pomocí webových technologií: JavaScript (TVJS) a TVML (XML specifické pro Apple). Aplikace TVMLKit nevyžadují kompilaci — rozhraní se načítá ze serveru, což umožňuje aktualizace obsahu bez procházení App Review. Používají ho hlavní streamovací služby pro karusely obsahu.
TVML poskytuje hotové šablony: CatalogTemplate (katalog s sekcemi), ProductTemplate (stránka podrobností obsahu), FormTemplate (přihlašovací formuláře), LoadingTemplate (indikátor načítání). Šablony jsou popsány v XML a stylovány pomocí atributů podobných CSS. Kód TVJS zpracovává stisky a volá nativní API.
<!-- CatalogTemplate — katalog filmů pro TVML -->
<document>
<catalogTemplate>
<banner>
<title>Filmové novinky</title>
<description>Čerstvé premiéry a exkluzivity</description>
</banner>
<section>
<header>
<title>Oblíbené</title>
</header>
<items>
<lockup>
<img src="https://cdn.example.com/movie1.jpg" width=300 height=450/>
<title>Interstellar</title>
</lockup>
<lockup>
<img src="https://cdn.example.com/movie2.jpg" width=300 height=450/>
<title>Počátek</title>
</lockup>
</items>
</section>
</catalogTemplate>
</document>Šablona TVML CatalogTemplate obsahuje banner s názvem a sekce s prvky lockup. Každý lockup je karta filmu s obrázkem a názvem. Focus Engine automaticky spravuje navigaci mezi prvky lockup. Při stisku obdrží obsluha TVJS událost select a může zobrazit stránku podrobností přes ProductTemplate.
TVJS je JavaScriptové prostředí izolované od hlavní aplikace. Kód TVJS je volán při načítání šablony TVML a zpracování událostí. TVJS má přístup k nativním API přes Appliance a Player pro ovládání přehrávání videa. Apple doporučuje používat TVMLKit pouze pro mediální aplikace s častými aktualizacemi obsahu. Pro hry a interaktivní aplikace je preferován SwiftUI.
Publikování tvOS aplikace vyžaduje předplatné Apple Developer Program ($99/rok). Aplikace se nahrává přes App Store Connect jako samostatný produkt nebo jako součást univerzálního binárního souboru (iOS + tvOS). App Review kontroluje stabilitu, shodu s HIG a omezení velikosti 4 GB.
Xcode vytváří tvOS cíl s příponou .app (balíček .ipa). Architektura — arm64 (Apple TV používá ARM čipy Apple Silicon). tvOS nepodporuje frameworky s i386 nebo x86_64. Aplikace je podepsána certifikátem Apple Development (testování) nebo Apple Distribution (publikace). Distribuce přes Volume Purchase Program pro firemní klienty je možná.
Speciální požadavky tvOS: všechny prvky rozhraní musí být přístupné přes Focus Engine bez použití dotykové obrazovky nebo klávesnice. Aplikace vyžadující autorizaci musí podporovat jednotné přihlášení (SSO) přes iTunes Store. Reklamní obsah nesmí přerušovat přehrávání bez souhlasu uživatele. Velikost nahraného binárního souboru nesmí překročit 4 GB.
| Požadavek | Popis |
|---|---|
| Velikost aplikace | Ne více než 4 GB, doporučeno 500 MB |
| Rozlišení grafiky | @2x (1920×1080) a @4x (3840×2160) pro 4K |
| Navigace ostřením | Všechny prvky přístupné přes Siri Remote |
| Formát videa | H.264, HEVC, Dolby Vision (Profile 5) |
| Audio | Dolby Atmos (E-AC-3 JOC) a stereo AAC |
Často kladené otázky
Hlavním jazykem je Swift s frameworky SwiftUI a UIKit. Pro mediální aplikace se používá TVMLKit s JavaScriptem a šablonami TVML načítanými ze serveru. Objective-C je podporováno pro starší projekty. Apple doporučuje SwiftUI pro všechny nové projekty tvOS.
tvOS používá Focus Engine místo dotykových událostí, nemá kameru ani mikrofon (kromě Siri Remote), omezuje velikost aplikace na 4 GB, nepodporuje trvalé místní úložiště (purgeable) a vyžaduje Metal pro vykreslování. Všechny aplikace běží pouze na ARM64.
Focus Engine spravuje pohyb ostření mezi prvky UI pomocí Siri Remote. Vývojář nastavuje preferované ostření přes preferredFocusEnvironments. UIFocusHeading (up, down, left, right) určuje směr. UIFocusEffect automaticky přidává paralaxu a stín aktivnímu prvku.
Publikace vyžaduje předplatné Apple Developer Program ($99/rok). Aplikace se nahrává přes Xcode Organizer nebo Transporter do App Store Connect. Moderace kontroluje: kompatibilitu s Focus Engine, stabilitu, nepřítomnost UIWebView a omezení velikosti 4 GB.
Ano, UIKit je plně podporován v tvOS: UIView, UIViewController, UICollectionView, UITableView. Nicméně UIKit je přizpůsoben pro Focus Engine: UIButton a UIControl přijímají události stiskem dálkového ovladače, ne dotykem. SwiftUI je doporučován pro nové projekty kvůli automatickému přizpůsobení ostření.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také