tvOS: Apple TV fejlesztés Focus Engine segítségével

Szerző: IT Sectr Megjelenés: 2026-02-07 Olvasási idő: 11 perc

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 OS-e TV set-top boxokhoz XNU kernelen Focus Engine-nel érintés helyett
  • Focus Engine — fókuszkezelő rendszer elemek között Siri Remote-on keresztül
  • SwiftUI és TVMLKit — két fejlesztési megközelítés: natív és JavaScript sablonok
  • Top Shelf — dinamikus tartalom az Apple TV kezdőképernyőjén
  • Alkalmazás mérete szigorúan 4 GB-ra korlátozva, ajánlott legfeljebb 500 MB

Mi az a tvOS?

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 verziótörténet

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óÉvFő innováció
tvOS 92015App Store, SDK, Siri Remote
tvOS 102016Egyszeri bejelentkezés (SSO), Live Tune-In
tvOS 112017Amazon Prime, automatikus mód
tvOS 122018Dolby Atmos, jelszó iPhone-nal
tvOS 132019Többfelhasználós, Vezérlőközpont a TV-n
tvOS 172023FaceTime, VPN, Siri Remote keresése

A tvOS architektúrája és különbségek az iOS-től

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.

Hardver korlátozások

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 és TVJS

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.

Állandó tároló hiánya

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).

swift
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: navigáció és fókusz

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.

UIFocusEnvironment és fókusz hierarchia

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.

UIFocusEffect és parallaxis

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á.

swift
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.

Siri Remote: gesztusok és gombok

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 és alkalmazásképernyő

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.

Top Shelf stílusok

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.

Alkalmazásképernyő

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ílusFormátumMikor használja
SectionedSzekciók fejlécekkel és elemekkelSorozatok, podcastok, lejátszási listák
InsetEgy nagy elem leírássalA nap filmje, exkluzív
PhotoKép rács feliratok nélkülFotóalbumok, galériák
TabLapok váltássalSport típus szerint, hírek téma szerint

SwiftUI Apple TV-hez

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.

Adaptáció tvOS-hez

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 komponenstvOS megfelelőMegjegyzés
UISliderUIProgressView + gombokSlider nem támogatott
UIPickerViewTábla fókusszalPicker lista által helyettesítve
UITextFieldUIAlertController (csak olvasás)Szövegbevitel Siri-n keresztül
UIActionSheetUIAlertControllerTámogatott
UIWebViewNem támogatottHasználja a WKWebView-t
MFMailComposeNem támogatottNyissa meg a mailto: URL-t

Design ajánlások

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 és médiaalkalmazások

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.

TVML: sablon struktúra

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.

xml
<!-- 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.

TVJS: eseménykezelés

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ások közzététele

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.

Build és terjesztés

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.

App Review követelmények

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ényLeírás
Alkalmazás méreteNem 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átumH.264, HEVC, Dolby Vision (Profile 5)
HangDolby Atmos (E-AC-3 JOC) és sztereó AAC

Gyakran ismételt kérdések

Milyen nyelveket használnak a tvOS fejlesztéshez?

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.

Miben különbözik a tvOS az iOS-től?

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.

Hogyan működik a Focus Engine a tvOS-ben?

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.

Hogyan tegyen közzé alkalmazásokat Apple TV-hez?

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.

Használható a UIKit tvOS-ben?

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

  • tvOS — az Apple OS-e TV set-top boxokhoz XNU kernelen Focus Engine vezérléssel
  • Focus Engine az érintésvezérlést fókusz mozgással helyettesíti Siri Remote-on keresztül parallaxis effektusokkal
  • TVMLKit — egyedi framework médiaalkalmazásokhoz JavaScript-ben szerveroldali TVML sablonokkal
  • Top Shelf dinamikus tartalmat biztosít a kezdőképernyőn a TVTopShelfProvider segítségével
  • SwiftUI teljes mértékben támogatott a tvOS 13-tól a focusable, focusSection és onPlayPauseCommand módosítókkal
  • tvOS korlátozások: 4 GB méret, purgeable tároló, nincs kamera, UIWebView vagy MFMailCompose
  • Közzététel Apple Developer Program, @2x/@4x grafika, HEVC formátum és Dolby Atmos szükséges

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.

Projekt megbeszélése

Olvassa el is