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 — 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 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 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | Tək Giriş (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, avtomatik rejim |
| tvOS 12 | 2018 | Dolby Atmos, iPhone ilə şifrə |
| tvOS 13 | 2019 | Çoxistifadəçi, TV-də İdarəetmə Mərkəzi |
| tvOS 17 | 2023 | FaceTime, VPN, Siri Remote-u Tap |
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.
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 — 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.
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).
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 — 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.
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.
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.
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.
İ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 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 ü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.
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 üslubu | Format | Nə vaxt istifadə etməli |
|---|---|---|
| Sectioned | Başlıqlar və elementlərlə bölmələr | Seriallar, podkastlar, pleylistlər |
| Inset | Təsviri olan bir böyük element | Günün filmi, eksklüziv |
| Photo | Başlıqsız şəkil şəbəkəsi | Foto albomlar, qalereyalar |
| Tab | Keçid edilən tablar | Növünə görə idman, mövzuya görə xəbərlər |
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.
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 komponenti | tvOS ekvivalenti | Qeyd |
|---|---|---|
| UISlider | UIProgressView + düymələr | Slider dəstəklənmir |
| UIPickerView | Fokuslu cədvəl | Picker siyahı ilə əvəz edildi |
| UITextField | UIAlertController (yalnız oxumaq) | Siri ilə mətn daxil etmə |
| UIActionSheet | UIAlertController | Dəstəklənir |
| UIWebView | Dəstəklənmir | WKWebView istifadə edin |
| MFMailCompose | Dəstəklənmir | mailto: URL açın |
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 — 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 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.
<!-- 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 ə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 Appliance və Player 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ə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.
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.
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əb | Tə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əs | Dolby Atmos (E-AC-3 JOC) və stereo AAC |
Tez-tez verilən suallar
Ə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 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.
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.
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.
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ə
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.
Həm də oxuyun