tvOS — operating system ng Apple para sa Apple TV, unang inilabas noong 2015 kasama ang ika-4 na henerasyon ng Apple TV. Ang pag-develop ng app para sa tvOS ay ginagawa sa Swift gamit ang SwiftUI at TVMLKit. Ang pangunahing pagkakaiba sa iOS ay ang kontrol ng focus sa pamamagitan ng Siri Remote sa halip na pagpindot. Ayon sa Apple, ang tvOS ay naka-install sa higit sa 100 milyong aktibong device sa buong mundo.
Mga Pangunahing Punto
tvOS — operating system ng Apple para sa mga Apple TV set-top box, batay sa parehong Darwin XNU kernel tulad ng iOS. Unang inilabas noong Oktubre 30, 2015 kasama ang ika-4 na henerasyon ng Apple TV. Pinalitan ng tvOS ang lumang Apple TV Software (batay sa iOS, walang App Store at SDK). Ang sistema ay na-optimize para sa operasyon sa TV na may resolution hanggang 4K HDR (Dolby Vision) at Dolby Atmos na tunog.
Ayon sa Apple (WWDC 2025), ang tvOS ay naka-install sa Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) at naka-embed sa ilang modelo ng Smart TV sa pamamagitan ng AirPlay. Gumagamit ang Apple TV ng A8 (HD), A10X Fusion (1st gen 4K), A12 Bionic (2nd gen 4K) at A15 Bionic (3rd gen 4K) chips. Lahat ng modelo ay sumusuporta sa tvOS 17. Ang tvOS ay walang camera, mikropono (maliban sa remote), touch screen, o GPS.
Ang pangunahing tampok ng tvOS ay ang Focus Engine, na pumapalit sa touch control ng focus navigation. Ang gumagamit ay naglilipat ng pagpili sa pagitan ng mga UI elemento gamit ang Siri Remote. Ang mga developer ay gumagawa ng mga app sa Swift/SwiftUI (native) o JavaScript/TVML (mga media app tulad ng Netflix, Hulu).
tvOS 9 (2015) — unang bersyon na may SDK at App Store. tvOS 10 (2016) — Single Sign-On (SSO) para sa mga subscription sa cable. tvOS 11 (2017) — suporta sa Amazon Prime Video at awtomatikong mode. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — multi-user mode. tvOS 17 (2023) — FaceTime, VPN, mga audio profile sa pamamagitan ng HDMI.
| Bersyon ng tvOS | Taon | Pangunahing Inobasyon |
|---|---|---|
| tvOS 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | Single Sign-On (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, awtomatikong mode |
| tvOS 12 | 2018 | Dolby Atmos, password gamit ang iPhone |
| tvOS 13 | 2019 | Multi-user, Control Center sa TV |
| tvOS 17 | 2023 | FaceTime, VPN, Hanapin ang Siri Remote |
Ang arkitektura ng tvOS ay batay sa parehong stack tulad ng iOS: XNU kernel, Core Services system services, Media layer, at Cocoa Touch user layer. Gayunpaman, may mga makabuluhang pagkakaiba na may kaugnayan sa mga detalye ng TV platform.
Ang ika-3 henerasyon na Apple TV 4K ay gumagamit ng A15 Bionic na may 6 CPU cores (2 performance, 4 efficiency) at 5-core GPU. RAM — 4 GB (internal SSD storage mula 64 GB). Ang sistema ay walang permanenteng lokal na storage sa klasikal na kahulugan: lahat ng data ng app ay maaaring tanggalin ng tvOS kapag kulang ang espasyo (purgeable). Dapat gumamit ang developer ng iCloud Key-Value Storage o CloudKit para sa pagpapanatili ng estado.
TVMLKit — isang natatanging framework para sa tvOS na nagpapahintulot sa paglikha ng mga interface sa JavaScript at TVML (Apple-specific XML-tulad na wika). Naglo-load ang TVMLKit ng JSON/XML mula sa server at nagre-render ng mga native na UI component. Ito ang pangunahing teknolohiya para sa mga streaming service: Netflix, Hulu, Amazon Prime Video ay gumagamit ng TVMLKit. TVJS — isang JavaScript environment na tumatakbo sa nakahiwalay na konteksto.
Awtomatikong pinamamahalaan ng tvOS ang espasyo sa disk: kapag kulang ang espasyo, maaaring tanggalin ng system ang cache, mga na-download na resource, at maging ang app mismo (pinapanatili ang icon). Sa muling pagbukas, dapat ibalik ng app ang estado nito. Ang iCloud NSUbiquitousKeyValueStore ay ang tanging garantisadong permanenteng storage para sa mga setting (hanggang 1 MB bawat app).
import Foundation
// // Pagpapanatili at pagpapanumbalik ng estado sa tvOS
final class StateManager {
private let store = NSUbiquitousKeyValueStore.default
private let coder = JSONEncoder()
private let decoder = JSONDecoder()
// Sine-save ang progreso ng panonood
func saveProgress<T: Codable>(_ value: T, for key: String) {
if let data = try? coder.encode(value) {
store.set(data, for: key)
store.synchronize()
}
}
// Ibinabalik ang estado pagkatapos ng pagtanggal ng cache
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)
}
// Pangangasiwa ng notifikasi ng pagbabago sa ibang device
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(ubiquitousKeyValueStoreDidChange),
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: store
)
}
@objc
private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
print("Binago ang data sa ibang device")
}
}Ang StateManager ay gumagamit ng NSUbiquitousKeyValueStore upang i-save ang estado ng app sa tvOS. Dahil ang lokal na storage ay maaaring linisin ng system, tanging ang iCloud ang ginagarantiya ng pagpapatuloy ng data. Ang store.synchronize() ay agad na nagpapadala ng data sa server, habang ang didChangeExternallyNotification ay nag-aabiso sa app tungkol sa mga pagbabago mula sa iba pang mga device ng user.
Focus Engine — ang pangunahing mekanismo ng tvOS na pumapalit sa mga touch event ng focus navigation. Ang gumagamit ay naglilipat ng pagpili sa pagitan ng mga UI elemento gamit ang Siri Remote (touch surface o mga button). Awtomatikong kinakalkula ng system ang susunod na focus element batay sa distansya at direksyon ng paggalaw.
Bawat UI element na may kakayahang makatanggap ng focus ay nagpapatupad ng UIFocusEnvironment protocol. Awtomatikong tinutukoy ng UIKit ang pagkakasunod-sunod ng nabigasyon batay sa geometry ng mga elemento. Maaaring i-override ng developer ang gustong focus sa pamamagitan ng preferredFocusEnvironments, tukuyin ang array ng child focusEnvironment, at kontrolin ang paggalaw sa pamamagitan ng UIFocusHeading (up, down, left, right). Ang UIFocusGuide ay nagpapahintulot sa pagtatakda ng custom na ruta para sa mga hindi trivial na layout.
Awtomatikong nagdaragdag ang tvOS ng UIFocusEffect sa naka-focus na elemento: anino, highlight, at paralaks effect (paglipat kapag ikiniling ang remote). Maaaring i-disable ng developer ang epekto sa pamamagitan ng focusedValue o i-customize ito sa pamamagitan ng UIFocusEffect.transform. Sa SwiftUI, ang paralaks ay idinaragdag gamit ang modifier na .hoverEffect(.highlight).
import SwiftUI
// // tvOS component na may custom na focus
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 {
// Pangangasiwa ng Play/Pause button sa remote
startPlayback()
}
.focusable()
.focusEffect { phase in
// Custom na focus effect
phase == .active ?
AnyView(self.scaleEffect(1.08)) :
AnyView(self.scaleEffect(1.0))
}
}
private func startPlayback() {
print("Nagpe-play: \(movie.title)")
}
}
// // Pangunahing screen na may grid ng pelikula
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() // Pagpapangkat para sa navigation
}
}Ang MovieCardView ay nagpapakita ng Focus Engine sa SwiftUI: ang modifier na .focusable() ay ginagawang focusable ang elemento, .onHover ay sumusubaybay sa mga pagbabago ng estado, .focusEffect ay nagpapahintulot ng custom na focus animation. Ang .onPlayPauseCommand ay humahawak ng pagpindot sa Play/Pause button sa Siri Remote. Ang focusSection ay nag-grupo ng grid para sa cyclic navigation.
Ang ikalawang henerasyon na Siri Remote (2021) ay may touch surface, 5 button, at mikropono. Sinusuportahan ng tvOS ang mga galaw: swipe (nabigasyon), tap (pumili), double-tap (igitna), pinch-zoom (mga larawan), long press (context menu). UIPress na may mga uri .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — mga paunang natukoy na uri ng pagpindot. Ang mikropono ng remote ay ginagamit para sa Siri at voice search.
Top Shelf ay isang lugar sa home screen ng Apple TV na nagpapakita ng dynamic na nilalaman ng app kapag nasa itaas na hanay. Sa tvOS 17, sumusuporta ang Top Shelf ng hanggang 8 widget na may custom na background at interactive na elemento. Ang developer ay nagpapatupad ng TVTopShelfProvider upang magbigay ng nilalaman.
Tatlong estilo ng Top Shelf ang magagamit: Sectioned — naka-categorize na listahan (serye ayon sa genre), Inset — sentral na elemento na may detalyadong paglalarawan (inirerekomendang pelikula), Photo — grid ng mga larawan (mga album ng larawan). Ina-update ng system ang Top Shelf sa background sa pamamagitan ng BGTaskScheduler, katulad ng watchOS. Dapat mabilis na ibalik ng provider ang nilalaman — nag-cache ang tvOS ng data sa loob ng 24 na oras.
Ang home screen ng tvOS ay binubuo ng isang Top Shelf row at isang app grid. Maaaring muling ayusin ng mga user ang mga icon at lumikha ng mga folder. Awtomatikong inaalis ng tvOS ang mga app mula sa memory kapag mababa ang mga resource, kaya dapat na maayos na pangasiwaan ng developer ang UISceneDidDisconnectNotification at ibalik ang estado sa pag-restart.
| Estilo ng Top Shelf | Format | Kailan Gagamitin |
|---|---|---|
| Sectioned | Mga seksyon na may heading at item | Serye, podcast, playlist |
| Inset | Isang malaking item na may paglalarawan | Pelikula ng araw, eksklusibo |
| Photo | Grid ng larawan na walang caption | Album ng larawan, gallery |
| Tab | Mga tab na may paglipat | Isport ayon sa uri, balita ayon sa paksa |
SwiftUI ay ganap na sinusuportahan sa tvOS simula sa tvOS 13. Inirerekomenda ng Apple ang SwiftUI para sa lahat ng bagong proyekto. Ang parehong SwiftUI code ay gumagana sa iOS, iPadOS, macOS, at tvOS na may kaunting adaptasyon para sa Focus Engine. Ang SwiftUI para sa tvOS ay nagbibigay ng mga modifier na .focusable(), .focusSection(), .onPlayPauseCommand, at .onExitCommand.
Kapag nagpo-port ng iOS app sa tvOS, kailangan mong: palitan ang TabView ng NavigationView na may focus navigation, dagdagan ang laki ng font (minimum 30pt para sa heading, 22pt para sa text), magdagdag ng margin (minimum 40pt mula sa mga gilid — safe area sa mga TV). tvOS ay hindi sumusuporta sa UIAlertController na may text field, UIWebView, at MFMailComposeViewController.
| Component ng iOS | Katumbas sa tvOS | Tandaan |
|---|---|---|
| UISlider | UIProgressView + mga button | Slider hindi suportado |
| UIPickerView | Talahanayan na may focus | Picker pinalitan ng listahan |
| UITextField | UIAlertController (read-only) | Input ng text sa pamamagitan ng Siri |
| UIActionSheet | UIAlertController | Suportado |
| UIWebView | Hindi suportado | Gamitin ang WKWebView |
| MFMailCompose | Hindi suportado | Buksan ang mailto: URL |
Apple HIG para sa tvOS: minimum na laki ng touch area 60×60 puntos, nababasa ang text mula sa 3 metro (laki ng font hindi bababa sa 22pt para sa body), contrast ng text 4.5:1, madilim na background (ang maliwanag na background ay nagdudulot ng glare sa OLED TV), lahat ng elemento ay naa-access nang walang kumplikadong mga galaw. Resolusyon: Ang Apple TV 4K ay naglalabas ng 3840×2160 (4K) o 1920×1080 (HD) sa 60 FPS. Lahat ng larawan ay dapat @2x (para sa 1080p) at @4x (para sa 4K).
TVMLKit — isang framework para sa paglikha ng mga media app sa tvOS gamit ang mga web technology: JavaScript (TVJS) at TVML (Apple-specific XML). Ang mga TVMLKit app ay hindi nangangailangan ng compilation — ang interface ay na-load mula sa server, na nagpapahintulot sa mga update ng nilalaman nang hindi dumadaan sa App Review. Ito ay ginagamit ng mga pangunahing streaming service para sa mga content carousel.
Ang TVML ay nagbibigay ng mga handa nang template: CatalogTemplate (catalog na may mga seksyon), ProductTemplate (pahina ng detalye ng nilalaman), FormTemplate (mga form sa pag-login), LoadingTemplate (indicator ng pag-load). Ang mga template ay inilalarawan sa XML at ini-istilo sa pamamagitan ng mga atributo na tulad ng CSS. Ang TVJS code ay humahawak ng mga pagpindot at tumatawag ng mga native na API.
<!-- CatalogTemplate — katalogo ng mga pelikula sa TVML -->
<document>
<catalogTemplate>
<banner>
<title>Mga bagong pelikula</title>
<description>Mga sariwang premiere at eksklusibo</description>
</banner>
<section>
<header>
<title>Pinakatanyag</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>Ang TVML CatalogTemplate ay naglalaman ng banner na may pamagat at mga seksyon na may mga lockup element. Ang bawat lockup ay isang card ng pelikula na may larawan at pamagat. Awtomatikong pinamamahalaan ng Focus Engine ang nabigasyon sa pagitan ng mga lockup element. Kapag pinindot, ang TVJS handler ay tumatanggap ng select event at maaaring magpakita ng pahina ng detalye sa pamamagitan ng ProductTemplate.
Ang TVJS ay isang JavaScript environment na nakahiwalay sa pangunahing app. Ang TVJS code ay tinatawag kapag naglo-load ng TVML template at humahawak ng mga event. Ang TVJS ay may access sa native na API sa pamamagitan ng Appliance at Player para sa kontrol ng pag-playback ng video. Inirerekomenda ng Apple ang paggamit ng TVMLKit lamang para sa mga media app na may madalas na pag-update ng nilalaman. Para sa mga laro at interactive na app, ang SwiftUI ay mas pinipili.
Pag-publish ng tvOS app ay nangangailangan ng subscription sa Apple Developer Program ($99/taon). Ang app ay na-upload sa pamamagitan ng App Store Connect bilang isang hiwalay na produkto o bahagi ng isang universal binary (iOS + tvOS). Sinusuri ng App Review ang katatagan, pagsunod sa HIG, at ang limitasyon sa laki na 4 GB.
Ang Xcode ay lumikha ng tvOS target na may extension na .app (.ipa package). Arkitektura — arm64 (Ang Apple TV ay gumagamit ng ARM chips ng Apple Silicon). Hindi sinusuportahan ng tvOS ang mga framework na may i386 o x86_64. Ang app ay nilagdaan gamit ang Apple Development certificate (pagsubok) o Apple Distribution certificate (pag-publish). Posible ang pamamahagi sa pamamagitan ng Volume Purchase Program para sa mga business client.
Mga espesyal na kinakailangan ng tvOS: lahat ng elemento ng interface ay dapat naa-access sa pamamagitan ng Focus Engine nang hindi gumagamit ng touch screen o keyboard. Ang mga app na nangangailangan ng awtorisasyon ay dapat sumusuporta sa Single Sign-On (SSO) sa pamamagitan ng iTunes Store. Ang advertising content ay hindi maaaring makagambala sa pag-playback nang walang pahintulot ng user. Ang laki ng na-upload na binary ay hindi dapat lumampas sa 4 GB.
| Kinakailangan | Paglalarawan |
|---|---|
| Laki ng app | Hindi hihigit sa 4 GB, inirerekomenda 500 MB |
| Resolusyon ng graphics | @2x (1920×1080) at @4x (3840×2160) para sa 4K |
| Focus navigation | Lahat ng elemento naa-access sa pamamagitan ng Siri Remote |
| Format ng video | H.264, HEVC, Dolby Vision (Profile 5) |
| Audio | Dolby Atmos (E-AC-3 JOC) at stereo AAC |
Mga Madalas Itanong
Ang pangunahing wika ay Swift na may mga framework na SwiftUI at UIKit. Para sa mga media app, ginagamit ang TVMLKit na may JavaScript at mga TVML template na na-load mula sa server. Ang Objective-C ay sinusuportahan para sa mga legacy project. Inirerekomenda ng Apple ang SwiftUI para sa lahat ng bagong tvOS project.
tvOS ay gumagamit ng Focus Engine sa halip na mga touch event, walang camera o mikropono (maliban sa Siri Remote), nililimitahan ang laki ng app sa 4 GB, hindi sumusuporta sa permanenteng lokal na storage (purgeable), at nangangailangan ng Metal para sa rendering. Lahat ng app ay tumatakbo lamang sa ARM64.
Focus Engine ay namamahala sa paggalaw ng focus sa pagitan ng mga UI elemento gamit ang Siri Remote. Itinatakda ng developer ang gustong focus sa pamamagitan ng preferredFocusEnvironments. Ang UIFocusHeading (up, down, left, right) ay tumutukoy ng direksyon. Ang UIFocusEffect ay awtomatikong nagdaragdag ng paralaks at anino sa aktibong elemento.
Ang pag-publish ay nangangailangan ng subscription sa Apple Developer Program ($99/taon). Ang app ay na-upload sa pamamagitan ng Xcode Organizer o Transporter sa App Store Connect. Ang moderasyon ay nagsusuri: compatibility sa Focus Engine, katatagan, kawalan ng UIWebView, at limitasyon sa laki na 4 GB.
Oo, ang UIKit ay ganap na sinusuportahan sa tvOS: UIView, UIViewController, UICollectionView, UITableView. Gayunpaman, ang UIKit ay inangkop para sa Focus Engine: ang UIButton at UIControl ay tumatanggap ng mga event sa pamamagitan ng pagpindot sa remote, hindi sa touch. Ang SwiftUI ay inirerekomenda para sa mga bagong proyekto dahil sa awtomatikong pag-adapt ng focus.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din