tvOS: Focus Engine ilə Apple TV üçün tərtibat

Müəllif: IT Sectr Dərc olunub: 2026-02-07 Oxuma vaxtı: 11 dəq

tvOS — Apple TV üçün Apple əməliyyat sistemi, ilk dəfə 2015-ci ildə 4-cü nəsil Apple TV ilə buraxılmışdır. tvOS üçün tətbiq tərtibatı SwiftUI və TVMLKit istifadə edərək Swift dilində aparılır. iOS-dan əsas fərq toxunma əvəzinə Siri Remote vasitəsilə fokus idarəsidir. Apple-a görə, tvOS dünya üzrə 100 milyondan çox aktiv cihazda quraşdırılmışdır.

Əsas məqamlar

  • tvOS — XNU nüvəsində toxunma əvəzinə Focus Engine ilə TV set-top qutuları üçün Apple ƏS
  • Focus Engine — Siri Remote vasitəsilə elementlər arasında fokus idarəetmə sistemi
  • SwiftUI və TVMLKit — iki tərtibat yanaşması: yerli və JavaScript şablonları
  • Top Shelf — Apple TV ana ekranında dinamik məzmun
  • Tətbiq ölçüsü ciddi şəkildə 4 GB ilə məhdudlaşdırılıb, 500 MB-dan çox olmaması tövsiyə olunur

tvOS nədir?

tvOS — Apple TV set-top qutuları üçün Apple əməliyyat sistemi, iOS ilə eyni Darwin XNU nüvəsinə əsaslanır. İlk dəfə 30 oktyabr 2015-ci ildə 4-cü nəsil Apple TV ilə buraxılmışdır. tvOS köhnə Apple TV Software-i (iOS əsaslı, App Store və SDK olmadan) əvəz etmişdir. Sistem 4K HDR (Dolby Vision) qədər qətnamə və Dolby Atmos səsi ilə TV-də işləmək üçün optimallaşdırılmışdır.

Apple-a (WWDC 2025) görə, tvOS Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) cihazlarında quraşdırılmışdır və AirPlay vasitəsilə bəzi Smart TV modellərinə daxil edilmişdir. Apple TV A8 (HD), A10X Fusion (1-ci nəsil 4K), A12 Bionic (2-ci nəsil 4K) və A15 Bionic (3-cü nəsil 4K) çiplərindən istifadə edir. Bütün modellər tvOS 17-ni dəstəkləyir. tvOS-da kamera, mikrofon (pultdan başqa), toxunma ekranı və ya GPS yoxdur.

tvOS-un əsas xüsusiyyəti Focus Engine-dir, o toxunma idarəsini fokus naviqasiyası ilə əvəz edir. İstifadəçi Siri Remote-dan istifadə edərək UI elementləri arasında seçimi hərəkət etdirir. Tərtibatçılar Swift/SwiftUI (yerli) və ya JavaScript/TVML (Netflix, Hulu kimi media tətbiqləri) ilə tətbiqlər yaradır.

tvOS versiya tarixi

tvOS 9 (2015) — SDK və App Store ilə ilk versiya. tvOS 10 (2016) — kabel abunəlikləri üçün Tək Giriş (SSO). tvOS 11 (2017) — Amazon Prime Video dəstəyi və avtomatik rejim. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — çoxistifadəçi rejimi. tvOS 17 (2023) — FaceTime, VPN, HDMI vasitəsilə audio profilləri.

tvOS versiyasıİlƏsas yenilik
tvOS 92015App Store, SDK, Siri Remote
tvOS 102016Tək Giriş (SSO), Live Tune-In
tvOS 112017Amazon Prime, avtomatik rejim
tvOS 122018Dolby Atmos, iPhone ilə şifrə
tvOS 132019Çoxistifadəçi, TV-də İdarəetmə Mərkəzi
tvOS 172023FaceTime, VPN, Siri Remote-u Tap

tvOS arxitekturası və iOS-dan fərqlər

tvOS arxitekturası iOS ilə eyni yığına əsaslanır: XNU nüvəsi, Core Services sistem xidmətləri, Media təbəqəsi və Cocoa Touch istifadəçi təbəqəsi. Lakin TV platformasının xüsusiyyətləri ilə bağlı əhəmiyyətli fərqlər mövcuddur.

Avadanlıq məhdudiyyətləri

3-cü nəsil Apple TV 4K 6 CPU nüvəsi (2 performans, 4 səmərəlilik) və 5 nüvəli GPU ilə A15 Bionic istifadə edir. RAM — 4 GB (64 GB-dan daxili SSD yaddaş). Sistem klassik mənada davamlı yerli yaddaşa malik deyil: yer az olduqda tvOS bütün tətbiq məlumatlarını silə bilər (purgeable). Tərtibatçı vəziyyəti qorumaq üçün iCloud Key-Value Storage və ya CloudKit istifadə etməlidir.

TVMLKit və TVJS

TVMLKit — tvOS-a xas olan, JavaScript və TVML (Apple-a xas XML bənzəri dil) ilə interfeyslər yaratmağa imkan verən freymvork. TVMLKit serverdən JSON/XML yükləyir və yerli UI komponentlərini göstərir. Bu, axın xidmətləri üçün əsas texnologiyadır: Netflix, Hulu, Amazon Prime Video TVMLKit istifadə edir. TVJS — təcrid olunmuş kontekstdə işləyən JavaScript mühiti.

Davamlı yaddaşın olmaması

tvOS disk sahəsini avtomatik idarə edir: yer az olduqda sistem keşi, endirilmiş resursları və hətta tətbiqin özünü silə bilər (işarəni saxlayaraq). Yenidən açıldıqda tətbiq vəziyyətini bərpa etməlidir. iCloud NSUbiquitousKeyValueStore parametrlər üçün yeganə zəmanətli davamlı yaddaşdır (tətbiq başına 1 MB-a qədər).

swift
import Foundation

// // tvOS-da vəziyyətin qorunması və bərpası
final class StateManager {

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

    // İzləmə gedişatı saxlanılır
    func saveProgress<T: Codable>(_ value: T, for key: String) {
        if let data = try? coder.encode(value) {
            store.set(data, for: key)
            store.synchronize()
        }
    }

    // Keş silindikdən sonra vəziyyət bərpa edilir
    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)
    }

    // Başqa cihazda dəyişiklik bildirişi işlənir
    init() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(ubiquitousKeyValueStoreDidChange),
            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
            object: store
        )
    }

    @objc
    private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
        print("Başqa cihazda məlumatlar dəyişdirildi")
    }
}

StateManager tvOS-da tətbiq vəziyyətini saxlamaq üçün NSUbiquitousKeyValueStore istifadə edir. Yerli yaddaş sistem tərəfindən təmizlənə bildiyi üçün yalnız iCloud məlumat davamlılığını təmin edir. store.synchronize() dərhal serverə məlumat göndərir, didChangeExternallyNotification isə istifadəçinin digər cihazlarındakı dəyişikliklər barədə tətbiqə xəbər verir.

Focus Engine: naviqasiya və fokus

Focus Engine — toxunma hadisələrini fokus naviqasiyası ilə əvəz edən tvOS-un əsas mexanizmi. İstifadəçi Siri Remote-dan (toxunma səthi və ya düymələr) istifadə edərək UI elementləri arasında seçimi hərəkət etdirir. Sistem məsafə və hərəkət istiqamətinə əsasən avtomatik olaraq növbəti fokus elementini hesablayır.

UIFocusEnvironment və fokus iyerarxiyası

Fokus qəbul edə bilən hər bir UI elementi UIFocusEnvironment protokolunu tətbiq edir. UIKit element həndəsəsinə əsasən avtomatik naviqasiya sırasını müəyyən edir. Tərtibatçı preferredFocusEnvironments vasitəsilə üstünlük verilən fokuza keçid edə, uşaq focusEnvironment massivi təyin edə və UIFocusHeading (up, down, left, right) vasitəsilə hərəkəti idarə edə bilər. UIFocusGuide qeyri-trivial düzənlər üçün xüsusi marşrutlar təyin etməyə imkan verir.

UIFocusEffect və paralaks

tvOS fokuslanmış elementə avtomatik UIFocusEffect əlavə edir: kölgə, vurğulama və paralaks effekti (pultu əydikdə yerdəyişmə). Tərtibatçı effekti focusedValue vasitəsilə söndürə və ya UIFocusEffect.transform vasitəsilə fərdiləşdirə bilər. SwiftUI-də paralaks .hoverEffect(.highlight) dəyişdiricisi ilə əlavə edilir.

swift
import SwiftUI

// // Xüsusi fokuslu tvOS komponenti
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 {
            // Pultda Play/Pause düyməsinin işlənməsi
            startPlayback()
        }
        .focusable()
        .focusEffect { phase in
            // Xüsusi fokus effekti
            phase == .active ?
                AnyView(self.scaleEffect(1.08)) :
                AnyView(self.scaleEffect(1.0))
        }
    }

    private func startPlayback() {
        print("Oxudulur: \(movie.title)")
    }
}

// // Film şəbəkəsi ilə əsas ekran
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() // Naviqasiya üçün qruplaşdırma
    }
}

MovieCardView SwiftUI-də Focus Engine-i nümayiş etdirir: .focusable() dəyişdiricisi elementi fokuslana bilən edir, .onHover vəziyyət dəyişikliklərini izləyir, .focusEffect xüsusi fokus animasiyasına imkan verir. .onPlayPauseCommand Siri Remote-da Play/Pause düyməsinin basılmasını idarə edir. focusSection dövri naviqasiya üçün şəbəkəni qruplaşdırır.

Siri Remote: jestlər və düymələr

İkinci nəsil Siri Remote (2021) toxunma səthi, 5 düymə və mikrofonla təchiz olunub. tvOS jestləri dəstəkləyir: sürüşdürmə (naviqasiya), toxunma (seçim), iki dəfə toxunma (mərkəzləşdirmə), çimdik-yaxınlaşdırma (şəkillər), uzun basma (kontekst menyu). UIPress növləri .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — əvvəlcədən təyin edilmiş basma növləri. Pultun mikrofonu Siri və səsli axtarış üçün istifadə olunur.

Top Shelf və tətbiq ekranı

Top Shelf Apple TV ana ekranında tətbiq yuxarı cərgədə olduqda dinamik məzmunu göstərən sahədir. tvOS 17-də Top Shelf xüsusi fonlar və interaktiv elementlərlə 8 vidcetə qədər dəstəkləyir. Tərtibatçı məzmun təmin etmək üçün TVTopShelfProvider tətbiq edir.

Top Shelf üslubları

Üç Top Shelf üslubu mövcuddur: Sectioned — kateqoriyalara ayrılmış siyahı (janra görə seriallar), Inset — ətraflı təsviri olan mərkəzi element (tövsiyə olunan film), Photo — şəkil şəbəkəsi (foto albomlar). Sistem watchOS kimi BGTaskScheduler vasitəsilə Top Shelf-i fonda yeniləyir. Təminatçı məzmunu tez qaytarmalıdır — tvOS məlumatları 24 saat keşləyir.

Tətbiq ekranı

tvOS ana ekranı Top Shelf cərgəsi və tətbiq şəbəkəsindən ibarətdir. İstifadəçilər işarələri yenidən təşkil edə və qovluqlar yarada bilər. Resurslar az olduqda tvOS yaddaşdan tətbiqləri avtomatik boşaldır, buna görə tərtibatçı UISceneDidDisconnectNotification-u düzgün idarə etməli və yenidən başlatmada vəziyyəti bərpa etməlidir.

Top Shelf üslubuFormatNə vaxt istifadə etməli
SectionedBaşlıqlar və elementlərlə bölmələrSeriallar, podkastlar, pleylistlər
InsetTəsviri olan bir böyük elementGünün filmi, eksklüziv
PhotoBaşlıqsız şəkil şəbəkəsiFoto albomlar, qalereyalar
TabKeçid edilən tablarNövünə görə idman, mövzuya görə xəbərlər

Apple TV üçün SwiftUI

SwiftUI tvOS 13-dən etibarən tvOS-da tam dəstəklənir. Apple bütün yeni layihələr üçün SwiftUI tövsiyə edir. Eyni SwiftUI kodu Focus Engine üçün minimal uyğunlaşmalarla iOS, iPadOS, macOS və tvOS-da işləyir. tvOS üçün SwiftUI .focusable(), .focusSection(), .onPlayPauseCommand və .onExitCommand dəyişdiricilərini təmin edir.

tvOS-a uyğunlaşma

iOS tətbiqini tvOS-a port edərkən: TabView-i fokus naviqasiyası ilə NavigationView ilə əvəz edin, şrift ölçülərini artırın (başlıqlar üçün minimum 30pt, mətn üçün 22pt), kənarlardan minimum 40pt məsafə əlavə edin (TV-lərdə təhlükəsiz sahə). tvOS mətn sahəsi olan UIAlertController, UIWebView və MFMailComposeViewController dəstəkləmir.

iOS komponentitvOS ekvivalentiQeyd
UISliderUIProgressView + düymələrSlider dəstəklənmir
UIPickerViewFokuslu cədvəlPicker siyahı ilə əvəz edildi
UITextFieldUIAlertController (yalnız oxumaq)Siri ilə mətn daxil etmə
UIActionSheetUIAlertControllerDəstəklənir
UIWebViewDəstəklənmirWKWebView istifadə edin
MFMailComposeDəstəklənmirmailto: URL açın

Dizayn tövsiyələri

tvOS üçün Apple HIG: minimum toxunma sahəsi ölçüsü 60×60 nöqtə, mətn 3 metrdən oxuna bilən (bədən mətni üçün şrift ölçüsü 22pt-dən az olmamalı), mətn kontrastı 4.5:1, tünd fon (açıq fon OLED TV-lərdə parıltı yaradır), bütün elementlər mürəkkəb jestlər olmadan əlçatan. Qətnamə: Apple TV 4K 60 FPS-də 3840×2160 (4K) və ya 1920×1080 (HD) çıxış edir. Bütün şəkillər @2x (1080p üçün) və @4x (4K üçün) olmalıdır.

TVMLKit və media tətbiqləri

TVMLKit — veb texnologiyalarından istifadə edərək tvOS-da media tətbiqləri yaratmaq üçün freymvork: JavaScript (TVJS) və TVML (Apple-a xas XML). TVMLKit tətbiqləri kompilyasiya tələb etmir — interfeys serverdən yüklənir, App Review-dan keçmədən məzmun yeniləməyə imkan verir. Böyük axın xidmətləri tərəfindən məzmun karuselləri üçün istifadə olunur.

TVML: şablon strukturu

TVML hazır şablonlar təqdim edir: CatalogTemplate (bölmələrlə kataloq), ProductTemplate (məzmun təfərrüat səhifəsi), FormTemplate (giriş formaları), LoadingTemplate (yükləmə göstəricisi). Şablonlar XML-də təsvir edilir və CSS bənzəri atributlar vasitəsilə stilləşdirilir. TVJS kodu basmaları idarə edir və yerli API-ləri çağırır.

xml
<!-- CatalogTemplate — TVML üçün film kataloqu -->
<document>
  <catalogTemplate>
    <banner>
      <title>Kino yenilikləri</title>
      <description>Təzə premyeralar və eksklüziylər</description>
    </banner>
    <section>
      <header>
        <title>Populyar</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>Başlanğıc</title>
        </lockup>
      </items>
    </section>
  </catalogTemplate>
</document>

TVML CatalogTemplate başlıqlı banner və lockup elementləri olan bölmələrdən ibarətdir. Hər lockup şəkil və başlığı olan film kartıdır. Focus Engine lockup elementləri arasında naviqasiyanı avtomatik idarə edir. Basıldıqda TVJS işləyicisi select hadisəsini alır və ProductTemplate vasitəsilə təfərrüat səhifəsini göstərə bilər.

TVJS: hadisə idarəetmə

TVJS əsas tətbiqdən təcrid olunmuş JavaScript mühitidir. TVJS kodu TVML şablonu yüklənərkən və hadisələr idarə edilərkən çağırılır. TVJS video oxutmanı idarə etmək üçün AppliancePlayer vasitəsilə yerli API-lərə giriş əldə edir. Apple TVMLKit-dən yalnız tez-tez məzmun yeniləyən media tətbiqləri üçün istifadə etməyi tövsiyə edir. Oyunlar və interaktiv tətbiqlər üçün SwiftUI üstünlük təşkil edir.

tvOS tətbiqlərinin yayımlanması

tvOS tətbiqinin yayımlanması Apple Developer Program abunəliyi ($99/il) tələb edir. Tətbiq App Store Connect vasitəsilə ayrıca məhsul və ya universal ikili faylın (iOS + tvOS) hissəsi kimi yüklənir. App Review sabitliyi, HIG uyğunluğunu və 4 GB ölçü məhdudiyyətini yoxlayır.

Qurma və paylama

Xcode .app uzantısı (.ipa paketi) ilə tvOS hədəfi yaradır. Arxitektura — arm64 (Apple TV Apple Silicon ARM çiplərindən istifadə edir). tvOS i386 və ya x86_64 olan freymvorkları dəstəkləmir. Tətbiq Apple Development sertifikatı (test) və ya Apple Distribution sertifikatı (yayım) ilə imzalanır. Biznes müştərilər üçün Volume Purchase Program vasitəsilə paylama mümkündür.

App Review tələbləri

tvOS xüsusi tələbləri: bütün interfeys elementləri toxunma ekranı və ya klaviatura olmadan Focus Engine vasitəsilə əlçatan olmalıdır. İcazə tələb edən tətbiqlər iTunes Store vasitəsilə Tək Giriş (SSO) dəstəkləməlidir. Reklam məzmunu istifadəçinin razılığı olmadan oxutmanı kəsə bilməz. Yüklənmiş ikili faylın ölçüsü 4 GB-ı keçməməlidir.

TələbTəsvir
Tətbiq ölçüsü4 GB-dan çox olmamalı, tövsiyə 500 MB
Qrafik qətnaməsi@2x (1920×1080) və @4x (3840×2160) 4K üçün
Fokus naviqasiyasıBütün elementlər Siri Remote ilə əlçatan
Video formatıH.264, HEVC, Dolby Vision (Profile 5)
SəsDolby Atmos (E-AC-3 JOC) və stereo AAC

Tez-tez verilən suallar

tvOS tərtibatı üçün hansı dillər istifadə olunur?

Əsas dil Swift-dir SwiftUI və UIKit freymvorkları ilə. Media tətbiqləri üçün serverdən yüklənən JavaScript və TVML şablonları ilə TVMLKit istifadə olunur. Objective-C köhnə layihələr üçün dəstəklənir. Apple bütün yeni tvOS layihələri üçün SwiftUI tövsiyə edir.

tvOS iOS-dan nə ilə fərqlənir?

tvOS toxunma hadisələri əvəzinə Focus Engine istifadə edir, kamera və mikrofonu yoxdur (Siri Remote xaric), tətbiq ölçüsünü 4 GB ilə məhdudlaşdırır, davamlı yerli yaddaşı (purgeable) dəstəkləmir və göstərmə üçün Metal tələb edir. Bütün tətbiqlər yalnız ARM64-də işləyir.

tvOS-da Focus Engine necə işləyir?

Focus Engine Siri Remote istifadə edərək UI elementləri arasında fokus hərəkətini idarə edir. Tərtibatçı preferredFocusEnvironments vasitəsilə üstünlük verilən fokus təyin edir. UIFocusHeading (up, down, left, right) istiqaməti müəyyən edir. UIFocusEffect aktiv elementə avtomatik paralaks və kölgə əlavə edir.

Apple TV üçün tətbiqləri necə yayımlamaq olar?

Yayımlamaq üçün Apple Developer Program abunəliyi ($99/il) tələb olunur. Tətbiq Xcode Organizer və ya Transporter vasitəsilə App Store Connect-ə yüklənir. Yoxlama: Focus Engine uyğunluğu, sabitlik, UIWebView olmaması və 4 GB ölçü məhdudiyyəti.

tvOS-da UIKit istifadə etmək olar?

Bəli, UIKit tvOS-da tam dəstəklənir: UIView, UIViewController, UICollectionView, UITableView. Lakin UIKit Focus Engine-ə uyğunlaşdırılıb: UIButton və UIControl toxunma əvəzinə pult basması ilə hadisə alır. Avtomatik fokus uyğunlaşması səbəbindən yeni layihələr üçün SwiftUI tövsiyə olunur.

Xülasə

  • tvOS — XNU nüvəsində Focus Engine idarəsi ilə TV set-top qutuları üçün Apple ƏS
  • Focus Engine paralaks effektləri ilə Siri Remote vasitəsilə toxunma idarəsini fokus hərəkəti ilə əvəz edir
  • TVMLKit — server tərəfi TVML şablonları ilə JavaScript-də media tətbiqləri üçün unikal freymvork
  • Top Shelf TVTopShelfProvider vasitəsilə ana ekranda dinamik məzmun təmin edir
  • SwiftUI tvOS 13-dən focusable, focusSection və onPlayPauseCommand dəyişdiriciləri ilə tam dəstəklənir
  • tvOS məhdudiyyətləri: 4 GB ölçü, purgeable yaddaş, kamera, UIWebView və ya MFMailCompose yoxdur
  • Yayımlama Apple Developer Program, @2x/@4x qrafika, HEVC formatı və Dolby Atmos tələb edir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun