tvOS — az Apple operációs rendszere Apple TV-hez, először 2015-ben jelent meg a 4. generációs Apple TV-vel együtt. A tvOS alkalmazásfejlesztés Swift nyelven történik SwiftUI és TVMLKit használatával. A legfontosabb különbség az iOS-hez képest az érintés helyett a Siri Remote-on keresztüli fókuszvezérlés. Az Apple szerint a tvOS több mint 100 millió aktív eszközön van telepítve világszerte.
Főbb pontok
tvOS — az Apple operációs rendszere Apple TV set-top boxokhoz, ugyanazon a Darwin XNU kernelen alapul, mint az iOS. Először 2015. október 30-án jelent meg a 4. generációs Apple TV-vel. A tvOS felváltotta az elavult Apple TV Software-t (iOS-alapú, App Store és SDK nélkül). A rendszer TV-n való működésre optimalizált, akár 4K HDR (Dolby Vision) felbontással és Dolby Atmos hanggal.
Az Apple (WWDC 2025) szerint a tvOS telepítve van Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) eszközökön, és beépítve néhány Smart TV modellbe AirPlay-en keresztül. Az Apple TV A8 (HD), A10X Fusion (1. gen 4K), A12 Bionic (2. gen 4K) és A15 Bionic (3. gen 4K) chipeket használ. Minden modell támogatja a tvOS 17-et. A tvOS-nek nincs kamerája, mikrofonja (kivéve a távirányítót), érintőképernyője vagy GPS-e.
A tvOS legfontosabb jellemzője a Focus Engine, amely az érintésvezérlést fókusznavigációval helyettesíti. A felhasználó a Siri Remote segítségével mozgatja a kijelölést a UI elemek között. A fejlesztők Swift/SwiftUI (natív) vagy JavaScript/TVML (Netflix, Hulu médialkalmazások) nyelven készítenek alkalmazásokat.
tvOS 9 (2015) — első verzió SDK-val és App Store-ral. tvOS 10 (2016) — egyszeri bejelentkezés (SSO) kábel-előfizetésekhez. tvOS 11 (2017) — Amazon Prime Video támogatás és automatikus mód. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — többfelhasználós mód. tvOS 17 (2023) — FaceTime, VPN, audió profilok HDMI-n keresztül.
| tvOS verzió | Év | Fő innováció |
|---|---|---|
| tvOS 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | Egyszeri bejelentkezés (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, automatikus mód |
| tvOS 12 | 2018 | Dolby Atmos, jelszó iPhone-nal |
| tvOS 13 | 2019 | Többfelhasználós, Vezérlőközpont a TV-n |
| tvOS 17 | 2023 | FaceTime, VPN, Siri Remote keresése |
A tvOS architektúrája ugyanazon a stack-en alapul, mint az iOS: XNU kernel, Core Services rendszerszolgáltatások, Media réteg és Cocoa Touch felhasználói réteg. Azonban jelentős különbségek vannak a TV platform sajátosságai miatt.
A 3. generációs Apple TV 4K A15 Bionic-ot használ 6 CPU maggal (2 teljesítmény, 4 hatékonyság) és 5 magos GPU-val. RAM — 4 GB (belső SSD tárhely 64 GB-tól). A rendszernek nincs állandó helyi tárolója a klasszikus értelemben: a tvOS törölheti az összes alkalmazásadatot, ha kevés a hely (purgeable). A fejlesztőnek iCloud Key-Value Storage-ot vagy CloudKit-et kell használnia az állapot megőrzéséhez.
TVMLKit — egy egyedi framework a tvOS-hez, amely lehetővé teszi felületek létrehozását JavaScript-ben és TVML-ben (Apple-specifikus XML-szerű nyelv). A TVMLKit JSON/XML-t tölt be a szerverről és natív UI komponenseket jelenít meg. Ez az elsődleges technológia a streaming szolgáltatásokhoz: a Netflix, Hulu, Amazon Prime Video a TVMLKit-et használja. TVJS — egy JavaScript környezet, amely elkülönített kontextusban fut.
A tvOS automatikusan kezeli a lemezterületet: amikor kevés a hely, a rendszer törölheti a gyorsítótárat, a letöltött erőforrásokat, sőt magát az alkalmazást is (megtartva az ikont). Újranyitáskor az alkalmazásnak vissza kell állítania az állapotát. Az iCloud NSUbiquitousKeyValueStore az egyetlen garantált állandó tároló a beállításokhoz (legfeljebb 1 MB alkalmazásonként).
import Foundation
// // Állapot megőrzése és visszaállítása tvOS-ben
final class StateManager {
private let store = NSUbiquitousKeyValueStore.default
private let coder = JSONEncoder()
private let decoder = JSONDecoder()
// Nézési előrehaladás mentése
func saveProgress<T: Codable>(_ value: T, for key: String) {
if let data = try? coder.encode(value) {
store.set(data, for: key)
store.synchronize()
}
}
// Állapot visszaállítása gyorsítótár törlése után
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)
}
// Változás értesítés kezelése másik eszközön
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(ubiquitousKeyValueStoreDidChange),
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: store
)
}
@objc
private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
print("Adatok módosítva másik eszközön")
}
}A StateManager az NSUbiquitousKeyValueStore-t használja az alkalmazás állapotának mentésére tvOS-en. Mivel a helyi tárolót a rendszer törölheti, csak az iCloud garantálja az adatok megmaradását. A store.synchronize() azonnal elküldi az adatokat a szervernek, míg a didChangeExternallyNotification értesíti az alkalmazást a felhasználó más eszközein történt változásokról.
Focus Engine — a tvOS kulcsmechanizmusa, amely az érintési eseményeket fókusznavigációval helyettesíti. A felhasználó a Siri Remote (érintőfelület vagy gombok) segítségével mozgatja a kijelölést a UI elemek között. A rendszer automatikusan kiszámítja a következő fókusz elemet a távolság és a mozgás iránya alapján.
Minden UI elem, amely képes fókuszt fogadni, megvalósítja a UIFocusEnvironment protokollt. Az UIKit automatikusan meghatározza a navigációs sorrendet az elemek geometriája alapján. A fejlesztő felülbírálhatja a kívánt fókuszt a preferredFocusEnvironments segítségével, megadhat egy tömböt a gyermek focusEnvironment-ekből, és vezérelheti a mozgást a UIFocusHeading (up, down, left, right) segítségével. A UIFocusGuide lehetővé teszi egyéni útvonalak beállítását nem triviális elrendezésekhez.
A tvOS automatikusan hozzáadja a UIFocusEffect-et a fókuszált elemhez: árnyék, kiemelés és parallaxis effektus (eltolódás a távirányító megdöntésekor). A fejlesztő letilthatja az effektust a focusedValue segítségével, vagy testreszabhatja a UIFocusEffect.transform segítségével. SwiftUI-ben a parallaxis a .hoverEffect(.highlight) módosítóval adható hozzá.
import SwiftUI
// // tvOS komponens egyéni fókusszal
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 gomb kezelése a távirányítón
startPlayback()
}
.focusable()
.focusEffect { phase in
// Egyéni fókusz effektus
phase == .active ?
AnyView(self.scaleEffect(1.08)) :
AnyView(self.scaleEffect(1.0))
}
}
private func startPlayback() {
print("Lejátszás: \(movie.title)")
}
}
// // Főképernyő film ráccsal
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() // Csoportosítás navigációhoz
}
}A MovieCardView bemutatja a Focus Engine-t SwiftUI-ben: a .focusable() módosító fókuszálhatóvá teszi az elemet, a .onHover nyomon követi az állapotváltozásokat, a .focusEffect lehetővé teszi az egyéni fókusz animációt. A .onPlayPauseCommand kezeli a Play/Pause gomb megnyomását a Siri Remote-on. A focusSection egy rácsot csoportosít a ciklikus navigációhoz.
A második generációs Siri Remote (2021) érintőfelülettel, 5 gombbal és mikrofonnal rendelkezik. A tvOS támogatja a gesztusokat: csúsztatás (navigáció), érintés (kiválasztás), dupla érintés (középre igazítás), csípés-nagyítás (képek), hosszú nyomás (kontextus menü). UIPress típusok .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — előre meghatározott nyomás típusok. A távirányító mikrofonját Siri és hangalapú keresés használja.
Top Shelf egy terület az Apple TV kezdőképernyőjén, amely az alkalmazás dinamikus tartalmát jeleníti meg, amikor az a felső sorban van. A tvOS 17-ben a Top Shelf legfeljebb 8 widgetet támogat egyéni háttérrel és interaktív elemekkel. A fejlesztő a TVTopShelfProvider-t implementálja a tartalom biztosításához.
Három Top Shelf stílus érhető el: Sectioned — kategorizált lista (sorozatok műfaj szerint), Inset — központi elem részletes leírással (ajánlott film), Photo — kép rács (fotóalbumok). A rendszer a Top Shelf-et a háttérben frissíti a BGTaskScheduler segítségével, hasonlóan a watchOS-hez. A szolgáltatónak gyorsan vissza kell adnia a tartalmat — a tvOS 24 óráig gyorsítótárazza az adatokat.
A tvOS kezdőképernyő egy Top Shelf sorból és egy alkalmazás rácsból áll. A felhasználók átrendezhetik az ikonokat és mappákat hozhatnak létre. A tvOS automatikusan kirakodja az alkalmazásokat a memóriából, ha kevés az erőforrás, ezért a fejlesztőnek megfelelően kell kezelnie a UISceneDidDisconnectNotification-t és vissza kell állítania az állapotot újraindításkor.
| Top Shelf stílus | Formátum | Mikor használja |
|---|---|---|
| Sectioned | Szekciók fejlécekkel és elemekkel | Sorozatok, podcastok, lejátszási listák |
| Inset | Egy nagy elem leírással | A nap filmje, exkluzív |
| Photo | Kép rács feliratok nélkül | Fotóalbumok, galériák |
| Tab | Lapok váltással | Sport típus szerint, hírek téma szerint |
SwiftUI teljes mértékben támogatott a tvOS-ben a tvOS 13-tól kezdve. Az Apple a SwiftUI-t ajánlja minden új projekthez. Ugyanaz a SwiftUI kód működik iOS, iPadOS, macOS és tvOS rendszeren minimális adaptációval a Focus Engine-hez. A SwiftUI tvOS-hez a .focusable(), .focusSection(), .onPlayPauseCommand és .onExitCommand módosítókat biztosítja.
Amikor egy iOS alkalmazást tvOS-re portol, a következőket kell tennie: cserélje ki a TabView-t NavigationView-ra fókusznavigációval, növelje a betűméreteket (minimum 30pt a címsorokhoz, 22pt a szöveghez), adjon hozzá margókat (minimum 40pt a szélektől — biztonsági terület a TV-ken). A tvOS nem támogatja a szövegmezős UIAlertController-t, a UIWebView-t és a MFMailComposeViewController-t.
| iOS komponens | tvOS megfelelő | Megjegyzés |
|---|---|---|
| UISlider | UIProgressView + gombok | Slider nem támogatott |
| UIPickerView | Tábla fókusszal | Picker lista által helyettesítve |
| UITextField | UIAlertController (csak olvasás) | Szövegbevitel Siri-n keresztül |
| UIActionSheet | UIAlertController | Támogatott |
| UIWebView | Nem támogatott | Használja a WKWebView-t |
| MFMailCompose | Nem támogatott | Nyissa meg a mailto: URL-t |
Apple HIG tvOS-hez: minimális érintőterület méret 60×60 pont, szöveg olvasható 3 méterről (betűméret nem kevesebb mint 22pt a szövegtörzshöz), szöveg kontraszt 4.5:1, sötét háttér (a világos háttér tükröződést okoz az OLED TV-ken), minden elem elérhető bonyolult gesztusok nélkül. Felbontás: Apple TV 4K 3840×2160 (4K) vagy 1920×1080 (HD) felbontást produkál 60 FPS mellett. Minden képnek @2x (1080p-hez) és @4x (4K-hoz) kell lennie.
TVMLKit — egy framework médiaalkalmazások létrehozásához tvOS-en webtechnológiák használatával: JavaScript (TVJS) és TVML (Apple-specifikus XML). A TVMLKit alkalmazások nem igényelnek fordítást — a felület a szerverről töltődik be, lehetővé téve a tartalomfrissítéseket az App Review megkerülésével. A nagy streaming szolgáltatások használják tartalomkarusszelekhez.
A TVML kész sablonokat biztosít: CatalogTemplate (katalógus szekciókkal), ProductTemplate (tartalom részletes oldala), FormTemplate (bejelentkezési űrlapok), LoadingTemplate (betöltés jelző). A sablonok XML-ben vannak leírva és CSS-szerű attribútumokkal stílusozva. A TVJS kód kezeli a lenyomásokat és natív API-kat hív.
<!-- CatalogTemplate — filmkatalógus a TVML-ben -->
<document>
<catalogTemplate>
<banner>
<title>Filmes újdonságok</title>
<description>Friss premierek és exkluzív tartalmak</description>
</banner>
<section>
<header>
<title>Népszerű</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>Nachalo</title>
</lockup>
</items>
</section>
</catalogTemplate>
</document>A TVML CatalogTemplate egy címet tartalmazó banner-t és lockup elemeket tartalmazó szekciókat tartalmaz. Minden lockup egy filmkártya képpel és címmel. A Focus Engine automatikusan kezeli a navigációt a lockup elemek között. Lenyomáskor a TVJS kezelő megkapja a select eseményt és megjeleníthet egy részletes oldalt a ProductTemplate segítségével.
A TVJS egy JavaScript környezet, amely elkülönül a fő alkalmazástól. A TVJS kód TVML sablon betöltésekor és események kezelésekor hívódik meg. A TVJS hozzáfér a natív API-khoz az Appliance és Player segítségével a videolejátszás vezérléséhez. Az Apple a TVMLKit használatát csak gyakori tartalomfrissítésű médiaalkalmazásokhoz ajánlja. Játékokhoz és interaktív alkalmazásokhoz a SwiftUI az előnyben részesített.
tvOS alkalmazás közzététele Apple Developer Program előfizetést igényel ($99/év). Az alkalmazás az App Store Connect-en keresztül tölthető fel külön termékként vagy univerzális bináris részeként (iOS + tvOS). Az App Review ellenőrzi a stabilitást, a HIG megfelelést és a 4 GB méretkorlátozást.
Az Xcode tvOS célt hoz létre .app kiterjesztéssel (.ipa csomag). Architektúra — arm64 (az Apple TV Apple Silicon ARM chipeket használ). A tvOS nem támogatja az i386 vagy x86_64 framework-öket. Az alkalmazás Apple Development tanúsítvánnyal (tesztelés) vagy Apple Distribution tanúsítvánnyal (közzététel) van aláírva. Terjesztés a Volume Purchase Program-on keresztül üzleti ügyfelek számára lehetséges.
Speciális tvOS követelmények: minden felületi elemnek elérhetőnek kell lennie a Focus Engine-en keresztül érintőképernyő vagy billentyűzet használata nélkül. Az engedélyt igénylő alkalmazásoknak támogatniuk kell az egyszeri bejelentkezést (SSO) az iTunes Store-on keresztül. A reklámtartalom nem szakíthatja meg a lejátszást a felhasználó beleegyezése nélkül. A feltöltött bináris mérete nem haladhatja meg a 4 GB-ot.
| Követelmény | Leírás |
|---|---|
| Alkalmazás mérete | Nem több mint 4 GB, ajánlott 500 MB |
| Grafikus felbontás | @2x (1920×1080) és @4x (3840×2160) 4K-hoz |
| Fókusz navigáció | Minden elem elérhető Siri Remote-on keresztül |
| Videó formátum | H.264, HEVC, Dolby Vision (Profile 5) |
| Hang | Dolby Atmos (E-AC-3 JOC) és sztereó AAC |
Gyakran ismételt kérdések
A fő nyelv a Swift a SwiftUI és UIKit framework-ökkel. Médiaalkalmazásokhoz a TVMLKit használatos JavaScript és a szerverről betöltött TVML sablonokkal. Az Objective-C támogatott régebbi projektekhez. Az Apple a SwiftUI-t ajánlja minden új tvOS projekthez.
tvOS a Focus Engine-t használja érintési események helyett, nincs kamerája vagy mikrofonja (kivéve Siri Remote), korlátozza az alkalmazás méretét 4 GB-ra, nem támogatja az állandó helyi tárolót (purgeable), és Metal-t igényel a rendereléshez. Minden alkalmazás csak ARM64-en fut.
Focus Engine kezeli a fókusz mozgását a UI elemek között a Siri Remote segítségével. A fejlesztő a preferredFocusEnvironments segítségével állítja be a kívánt fókuszt. A UIFocusHeading (up, down, left, right) határozza meg az irányt. A UIFocusEffect automatikusan parallaxist és árnyékot ad az aktív elemhez.
A közzétételhez Apple Developer Program előfizetés szükséges ($99/év). Az alkalmazást az Xcode Organizer vagy Transporter segítségével töltse fel az App Store Connect-be. A moderáció ellenőrzi: Focus Engine kompatibilitás, stabilitás, UIWebView hiánya és a 4 GB méretkorlátozás.
Igen, a UIKit teljes mértékben támogatott a tvOS-ben: UIView, UIViewController, UICollectionView, UITableView. Az UIKit azonban a Focus Engine-hez van igazítva: a UIButton és UIControl eseményeket a távirányító lenyomásával kapja, nem érintéssel. A SwiftUI ajánlott új projektekhez az automatikus fókusz adaptáció miatt.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is