tvOS — Apple TV uchun Apple operatsion tizimi, birinchi marta 2015-yilda 4-avlod Apple TV bilan chiqarilgan. tvOS uchun ilova ishlab chiqish SwiftUI va TVMLKit yordamida Swift-da amalga oshiriladi. iOS-dan asosiy farq — sensor oʻrniga Siri Remote orqali fokusni boshqarish. Apple maʼlumotlariga koʻra, tvOS butun dunyo boʻylab 100 milliondan ortiq faol qurilmalarda oʻrnatilgan.
Asosiy fikrlar
tvOS — Apple TV set-top qutilari uchun Apple operatsion tizimi, iOS bilan bir xil Darwin XNU yadrosiga asoslangan. Birinchi marta 2015-yil 30-oktabrda 4-avlod Apple TV bilan chiqarilgan. tvOS eski Apple TV Software (iOS asosidagi, App Store va SDKsiz) oʻrnini egalladi. Tizim 4K HDR (Dolby Vision) gacha rezolyutsiya va Dolby Atmos ovoz bilan televizorda ishlash uchun optimallashtirilgan.
Apple (WWDC 2025) maʼlumotlariga koʻra, tvOS Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) da oʻrnatilgan va AirPlay orqali baʼzi Smart TV modellariga kiritilgan. Apple TV A8 (HD), A10X Fusion (1-avlod 4K), A12 Bionic (2-avlod 4K) va A15 Bionic (3-avlod 4K) chiplaridan foydalanadi. Barcha modellar tvOS 17 ni qoʻllab-quvvatlaydi. tvOS da kamera, mikrofon (pultdan tashqari), sensorli ekran yoki GPS yoʻq.
tvOS ning asosiy xususiyati — Focus Engine, u sensor boshqaruvini fokus navigatsiyasi bilan almashtiradi. Foydalanuvchi Siri Remote yordamida UI elementlari oʻrtasida tanlovni harakatlantiradi. Dasturchilar Swift/SwiftUI (mahalliy) yoki JavaScript/TVML (Netflix, Hulu kabi media ilovalari) da ilovalar yaratadi.
tvOS 9 (2015) — SDK va App Store bilan birinchi versiya. tvOS 10 (2016) — kabel obunalari uchun Yagona Kirish (SSO). tvOS 11 (2017) — Amazon Prime Video qoʻllab-quvvatlashi va avtomatik rejim. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — koʻp foydalanuvchi rejimi. tvOS 17 (2023) — FaceTime, VPN, HDMI orqali audio profillar.
| tvOS versiyasi | Yil | Asosiy yangilik |
|---|---|---|
| tvOS 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | Yagona Kirish (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, avtomatik rejim |
| tvOS 12 | 2018 | Dolby Atmos, iPhone bilan parol |
| tvOS 13 | 2019 | Koʻp foydalanuvchi, TV da Boshqaruv Markazi |
| tvOS 17 | 2023 | FaceTime, VPN, Siri Remote ni topish |
tvOS arxitekturasi iOS bilan bir xil stackka asoslangan: XNU yadrosi, Core Services tizim xizmatlari, Media qatlami va Cocoa Touch foydalanuvchi qatlami. Biroq, TV platformasining oʻziga xosliklari bilan bogʻliq muhim farqlar mavjud.
3-avlod Apple TV 4K 6 CPU yadrosi (2 samaradorlik, 4 tejamkorlik) va 5 yadroli GPU bilan A15 Bionic dan foydalanadi. RAM — 4 GB (64 GB dan ichki SSD xotira). Tizim klassik maʼnoda doimiy mahalliy xotiraga ega emas: joy kam boʻlganda tvOS barcha ilova maʼlumotlarini oʻchirishi mumkin (purgeable). Dasturchi holatni saqlash uchun iCloud Key-Value Storage yoki CloudKit dan foydalanishi kerak.
TVMLKit — tvOS ga xos freymvork boʻlib, JavaScript va TVML (Apple-ga xos XML oʻxshash til) da interfeyslar yaratish imkonini beradi. TVMLKit serverdan JSON/XML yuklaydi va mahalliy UI komponentlarini koʻrsatadi. Bu striming xizmatlari uchun asosiy texnologiya: Netflix, Hulu, Amazon Prime Video TVMLKit dan foydalanadi. TVJS — izolyatsiyalangan kontekstda ishlaydigan JavaScript muhiti.
tvOS disk maydonini avtomatik boshqaradi: joy kam boʻlganda, tizim keshni, yuklab olingan resurslarni va hatto ilovaning oʻzini oʻchirishi mumkin (belgini saqlab). Qayta ochganda, ilova oʻz holatini tiklab olishi kerak. iCloud NSUbiquitousKeyValueStore sozlamalar uchun yagona kafolatlangan doimiy xotira (ilova uchun 1 MB gacha).
import Foundation
// // tvOS da holatni saqlash va tiklash
final class StateManager {
private let store = NSUbiquitousKeyValueStore.default
private let coder = JSONEncoder()
private let decoder = JSONDecoder()
// Tomosha qilish jarayoni saqlanmoqda
func saveProgress<T: Codable>(_ value: T, for key: String) {
if let data = try? coder.encode(value) {
store.set(data, for: key)
store.synchronize()
}
}
// Kesh oʻchirilgandan keyin holat tiklanmoqda
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)
}
// Boshqa qurilmadagi oʻzgarish bildirishnomasini boshqarish
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(ubiquitousKeyValueStoreDidChange),
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: store
)
}
@objc
private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
print("Boshqa qurilmada maʼlumotlar oʻzgartirildi")
}
}StateManager tvOS da ilova holatini saqlash uchun NSUbiquitousKeyValueStore dan foydalanadi. Mahalliy xotira tizim tomonidan tozalanishi mumkinligi sababli, faqat iCloud maʼlumotlarning doimiyligini kafolatlaydi. store.synchronize() darhol serverga maʼlumot yuboradi, didChangeExternallyNotification esa foydalanuvchining boshqa qurilmalaridagi oʻzgarishlar haqida ilovaga xabar beradi.
Focus Engine — sensor hodisalarini fokus navigatsiyasi bilan almashtiradigan tvOS ning asosiy mexanizmi. Foydalanuvchi Siri Remote (sensor sirt yoki tugmalar) yordamida UI elementlari oʻrtasida tanlovni harakatlantiradi. Tizim masofa va harakat yoʻnalishiga qarab avtomatik ravishda keyingi fokus elementini hisoblab chiqadi.
Fokus qabul qila oladigan har bir UI elementi UIFocusEnvironment protokolini amalga oshiradi. UIKit element geometriyasiga qarab navigatsiya tartibini avtomatik aniqlaydi. Dasturchi preferredFocusEnvironments orqali afzal fokusni bekor qilishi, bola focusEnvironment massivini belgilashi va UIFocusHeading (up, down, left, right) orqali harakatni boshqarishi mumkin. UIFocusGuide murakkab layoutlar uchun maxsus marshrutlarni belgilash imkonini beradi.
tvOS fokuslangan elementga avtomatik UIFocusEffect qoʻshadi: soya, yoritish va parallaks effekti (pultni egishda siljish). Dasturchi effektni focusedValue orqali oʻchirishi yoki UIFocusEffect.transform orqali sozlashi mumkin. SwiftUI da parallaks .hoverEffect(.highlight) modifikatori bilan qoʻshiladi.
import SwiftUI
// // Maxsus fokusli 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 tugmasini boshqarish
startPlayback()
}
.focusable()
.focusEffect { phase in
// Maxsus fokus effekti
phase == .active ?
AnyView(self.scaleEffect(1.08)) :
AnyView(self.scaleEffect(1.0))
}
}
private func startPlayback() {
print("Ijro etilmoqda: \(movie.title)")
}
}
// // Film panjarali bosh 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() // Navigatsiya uchun guruhlash
}
}MovieCardView SwiftUI da Focus Engine ni namoyish etadi: .focusable() modifikatori elementni fokuslanadigan qiladi, .onHover holat oʻzgarishlarini kuzatadi, .focusEffect maxsus fokus animatsiyasiga imkon beradi. .onPlayPauseCommand Siri Remote dagi Play/Pause tugmasini bosishni boshqaradi. focusSection tsiklik navigatsiya uchun panjarani guruhlaydi.
Ikkinchi avlod Siri Remote (2021) sensor sirt, 5 tugma va mikrofonga ega. tvOS imo-ishoralarni qoʻllab-quvvatlaydi: surish (navigatsiya), tegish (tanlash), ikki marta tegish (markazlashtirish), chimdilash-zoom (rasmlar), uzoq bosish (kontekst menyu). UIPress turlari .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — oldindan belgilangan bosish turlari. Pult mikrofoni Siri va ovozli qidiruv uchun ishlatiladi.
Top Shelf — Apple TV bosh ekranidagi maydon boʻlib, ilova yuqori qatorda boʻlganda dinamik kontentni koʻrsatadi. tvOS 17 da Top Shelf maxsus fon va interaktiv elementlar bilan 8 ta vidjetgacha qoʻllab-quvvatlaydi. Dasturchi kontent taqdim etish uchun TVTopShelfProvider ni amalga oshiradi.
Uchta Top Shelf uslubi mavjud: Sectioned — kategoriyalangan roʻyxat (janr boʻyicha seriallar), Inset — batafsil tavsifli markaziy element (tavsiya etilgan film), Photo — rasm panjarasi (foto albomlar). Tizim watchOS ga oʻxshab BGTaskScheduler orqali Top Shelf ni fonda yangilaydi. Taʼminotchi kontentni tez qaytarishi kerak — tvOS maʼlumotlarni 24 soat keshlaydi.
tvOS bosh ekrani Top Shelf qatori va ilova panjarasidan iborat. Foydalanuvchilar belgilarni qayta tartiblashi va papkalar yaratishi mumkin. Resurslar kam boʻlganda tvOS xotiradan ilovalarni avtomatik tushiradi, shuning uchun dasturchi UISceneDidDisconnectNotification ni toʻgʻri boshqarishi va qayta ishga tushirishda holatni tiklab olishi kerak.
| Top Shelf uslubi | Format | Qachon ishlatish |
|---|---|---|
| Sectioned | Sarlavhalar va elementlar bilan boʻlimlar | Seriallar, podkastlar, pleylistlar |
| Inset | Tavsifli bitta katta element | Kun filmi, eksklyuziv |
| Photo | Sarlavhasiz rasm panjarasi | Foto albomlar, galereyalar |
| Tab | Almashtiriladigan tablar | Tur boʻyicha sport, mavzu boʻyicha yangiliklar |
SwiftUI tvOS 13 dan boshlab tvOS da toʻliq qoʻllab-quvvatlanadi. Apple barcha yangi loyihalar uchun SwiftUI ni tavsiya qiladi. Xuddi shu SwiftUI kodi Focus Engine uchun minimal moslashuvlar bilan iOS, iPadOS, macOS va tvOS da ishlaydi. tvOS uchun SwiftUI .focusable(), .focusSection(), .onPlayPauseCommand va .onExitCommand modifikatorlarini taqdim etadi.
iOS ilovasini tvOS ga koʻchirishda: TabView ni fokus navigatsiyali NavigationView bilan almashtiring, shrift oʻlchamlarini oshiring (sarlavhalar uchun kamida 30pt, matn uchun 22pt), chekkalardan kamida 40pt masofa qoʻshing (TV larda xavfsiz zona). tvOS matn maydonli UIAlertController, UIWebView va MFMailComposeViewController ni qoʻllab-quvvatlamaydi.
| iOS komponenti | tvOS ekvivalenti | Eslatma |
|---|---|---|
| UISlider | UIProgressView + tugmalar | Slider qoʻllab-quvvatlanmaydi |
| UIPickerView | Fokusli jadval | Picker roʻyxat bilan almashtirildi |
| UITextField | UIAlertController (faqat oʻqish) | Siri orqali matn kiritish |
| UIActionSheet | UIAlertController | Qoʻllab-quvvatlanadi |
| UIWebView | Qoʻllab-quvvatlanmaydi | WKWebView dan foydalaning |
| MFMailCompose | Qoʻllab-quvvatlanmaydi | mailto: URL oching |
tvOS uchun Apple HIG: minimal sensor maydoni oʻlchami 60×60 nuqta, matn 3 metrdan oʻqilishi mumkin (matn uchun shrift oʻlchami 22pt dan kam boʻlmasligi kerak), matn kontrasti 4.5:1, qorongʻi fon (yorugʻ fon OLED TV larda porlashni keltirib chiqaradi), barcha elementlar murakkab imo-ishoralarsiz foydalanish mumkin. Rezolyutsiya: Apple TV 4K 60 FPS da 3840×2160 (4K) yoki 1920×1080 (HD) chiqaradi. Barcha rasmlar @2x (1080p uchun) va @4x (4K uchun) boʻlishi kerak.
TVMLKit — veb texnologiyalaridan foydalanib tvOS da media ilovalar yaratish uchun freymvork: JavaScript (TVJS) va TVML (Apple ga xos XML). TVMLKit ilovalari kompilyatsiyani talab qilmaydi — interfeys serverdan yuklanadi, bu App Review dan oʻtmasdan kontentni yangilash imkonini beradi. Katta striming xizmatlari kontent karusellari uchun foydalanadi.
TVML tayyor shablonlarni taqdim etadi: CatalogTemplate (boʻlimlar bilan katalog), ProductTemplate (kontent tafsilot sahifasi), FormTemplate (kirish formlari), LoadingTemplate (yuklash indikatori). Shablonlar XML da tavsiflanadi va CSS oʻxshash atributlar orqali stillashtiriladi. TVJS kodi bosishlarni boshqaradi va mahalliy API larni chaqiradi.
<!-- CatalogTemplate — TVML bo'yicha filmlar katalogi -->
<document>
<catalogTemplate>
<banner>
<title>Kino yangiliklari</title>
<description>Yangi premyeralar va eksklyuzivlar</description>
</banner>
<section>
<header>
<title>Ommabop</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>Inception</title>
</lockup>
</items>
</section>
</catalogTemplate>
</document>TVML CatalogTemplate sarlavhali banner va lockup elementlari bilan boʻlimlarni oʻz ichiga oladi. Har bir lockup rasm va sarlavhali film kartasidir. Focus Engine lockup elementlari oʻrtasidagi navigatsiyani avtomatik boshqaradi. Bosilganda, TVJS ishlovchisi select hodisasini qabul qiladi va ProductTemplate orqali tafsilot sahifasini koʻrsatishi mumkin.
TVJS asosiy ilovadan ajratilgan JavaScript muhitidir. TVJS kodi TVML shabloni yuklanganda va hodisalar boshqarilganda chaqiriladi. TVJS video ijro etishni boshqarish uchun Appliance va Player orqali mahalliy API larga kirish huquqiga ega. Apple TVMLKit dan faqat tez-tez kontent yangilanadigan media ilovalari uchun foydalanishni tavsiya qiladi. Oʻyinlar va interaktiv ilovalar uchun SwiftUI afzal.
tvOS ilovasini nashr qilish Apple Developer Program obunasini ($99/yil) talab qiladi. Ilova App Store Connect orqali alohida mahsulot yoki universal binar (iOS + tvOS) qismi sifatida yuklanadi. App Review barqarorlik, HIG muvofiqligi va 4 GB hajm cheklovini tekshiradi.
Xcode .app kengaytmali (.ipa paket) tvOS maqsadini yaratadi. Arxitektura — arm64 (Apple TV Apple Silicon ARM chiplaridan foydalanadi). tvOS i386 yoki x86_64 boʻlgan freymvorklarni qoʻllab-quvvatlamaydi. Ilova Apple Development sertifikati (test) yoki Apple Distribution sertifikati (nashr) bilan imzolanadi. Biznes mijozlar uchun Volume Purchase Program orqali tarqatish mumkin.
tvOS maxsus talablari: barcha interfeys elementlari sensorli ekran yoki klaviatura ishlatmasdan Focus Engine orqali foydalanish mumkin boʻlishi kerak. Avtorizatsiya talab qiladigan ilovalar iTunes Store orqali Yagona Kirish (SSO) ni qoʻllab-quvvatlashi kerak. Reklama kontenti foydalanuvchi roziligisiz ijroni toʻxtata olmaydi. Yuklangan binar hajmi 4 GB dan oshmasligi kerak.
| Talab | Tavsif |
|---|---|
| Ilova hajmi | 4 GB dan oshmasligi kerak, tavsiya 500 MB |
| Grafik rezolyutsiyasi | @2x (1920×1080) va @4x (3840×2160) 4K uchun |
| Fokus navigatsiyasi | Barcha elementlar Siri Remote orqali foydalanish mumkin |
| Video format | H.264, HEVC, Dolby Vision (Profile 5) |
| Audio | Dolby Atmos (E-AC-3 JOC) va stereo AAC |
Tez-tez beriladigan savollar
Asosiy til Swift boʻlib, SwiftUI va UIKit freymvorklari bilan. Media ilovalari uchun serverdan yuklanadigan JavaScript va TVML shablonlari bilan TVMLKit ishlatiladi. Objective-C eski loyihalar uchun qoʻllab-quvvatlanadi. Apple barcha yangi tvOS loyihalari uchun SwiftUI ni tavsiya qiladi.
tvOS sensor hodisalari oʻrniga Focus Engine dan foydalanadi, kamera va mikrofon yoʻq (Siri Remote dan tashqari), ilova hajmini 4 GB bilan cheklaydi, doimiy mahalliy xotirani (purgeable) qoʻllab-quvvatlamaydi va koʻrsatish uchun Metal ni talab qiladi. Barcha ilovalar faqat ARM64 da ishlaydi.
Focus Engine Siri Remote yordamida UI elementlari oʻrtasida fokus harakatini boshqaradi. Dasturchi preferredFocusEnvironments orqali afzal fokusni belgilaydi. UIFocusHeading (up, down, left, right) yoʻnalishni aniqlaydi. UIFocusEffect avtomatik ravishda faol elementga parallaks va soya qoʻshadi.
Nashr qilish uchun Apple Developer Program obunasi ($99/yil) talab qilinadi. Ilova Xcode Organizer yoki Transporter orqali App Store Connect ga yuklanadi. Moderatsiya tekshiradi: Focus Engine muvofiqligi, barqarorlik, UIWebView yoʻqligi va 4 GB hajm cheklovi.
Ha, UIKit tvOS da toʻliq qoʻllab-quvvatlanadi: UIView, UIViewController, UICollectionView, UITableView. Biroq, UIKit Focus Engine ga moslashtirilgan: UIButton va UIControl sensor emas, balki pult bosishi orqali hodisalarni qabul qiladi. Avtomatik fokus moslashuvi tufayli yangi loyihalar uchun SwiftUI tavsiya etiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.