tvOS — سیستم عامل اپل برای Apple TV، اولین بار در سال ۲۰۱۵ همراه با Apple TV نسل چهارم منتشر شد. توسعه برنامهها برای tvOS با Swift با استفاده از SwiftUI و TVMLKit انجام میشود. تفاوت اصلی با iOS کنترل فوکوس از طریق Siri Remote به جای لمس است. به گفته اپل، tvOS بر روی بیش از ۱۰۰ میلیون دستگاه فعال در سراسر جهان نصب شده است.
نکات کلیدی
tvOS — سیستم عامل اپل برای جعبههای Apple TV، بر اساس همان هسته Darwin XNU مانند iOS. اولین بار در ۳۰ اکتبر ۲۰۱۵ با Apple TV نسل چهارم منتشر شد. tvOS جایگزین Apple TV Software قدیمی (مبتنی بر iOS، بدون App Store و SDK) شد. سیستم برای کار بر روی تلویزیون با وضوح تا 4K HDR (Dolby Vision) و صدای Dolby Atmos بهینه شده است.
به گفته اپل (WWDC 2025)، tvOS بر روی Apple TV HD (2015)، Apple TV 4K (2017, 2021, 2022) نصب شده و از طریق AirPlay در برخی مدلهای Smart TV تعبیه شده است. Apple TV از تراشههای A8 (HD)، A10X Fusion (نسل اول 4K)، A12 Bionic (نسل دوم 4K) و A15 Bionic (نسل سوم 4K) استفاده میکند. همه مدلها از tvOS 17 پشتیبانی میکنند. tvOS دوربین، میکروفون (به جز کنترل از راه دور)، صفحه لمسی یا GPS ندارد.
ویژگی کلیدی tvOS Focus Engine است که کنترل لمسی را با ناوبری فوکوس جایگزین میکند. کاربر با استفاده از Siri Remote انتخاب را بین عناصر UI جابجا میکند. توسعهدهندگان برنامهها را به Swift/SwiftUI (بومی) یا JavaScript/TVML (برنامههای رسانهای مانند Netflix, Hulu) میسازند.
tvOS 9 (2015) — اولین نسخه با SDK و App Store. tvOS 10 (2016) — ورود یکپارچه (SSO) برای اشتراکهای کابلی. tvOS 11 (2017) — پشتیبانی از Amazon Prime Video و حالت خودکار. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — حالت چند کاربره. tvOS 17 (2023) — FaceTime, VPN, پروفایلهای صوتی از طریق HDMI.
| نسخه tvOS | سال | نوآوری کلیدی |
|---|---|---|
| tvOS 9 | 2015 | App Store, SDK, Siri Remote |
| tvOS 10 | 2016 | ورود یکپارچه (SSO), Live Tune-In |
| tvOS 11 | 2017 | Amazon Prime, حالت خودکار |
| tvOS 12 | 2018 | Dolby Atmos, رمز عبور با iPhone |
| tvOS 13 | 2019 | چند کاربره, مرکز کنترل در تلویزیون |
| tvOS 17 | 2023 | FaceTime, VPN, پیدا کردن Siri Remote |
معماری tvOS بر اساس همان پشته iOS است: هسته XNU، خدمات سیستمی Core Services، لایه Media و لایه کاربر Cocoa Touch. با این حال، تفاوتهای قابل توجهی مرتبط با ویژگیهای پلتفرم تلویزیون وجود دارد.
Apple TV 4K نسل سوم از A15 Bionic با ۶ هسته CPU (۲ عملکرد، ۴ کارایی) و GPU 5 هستهای استفاده میکند. RAM — ۴ گیگابایت (حافظه SSD داخلی از ۶۴ گیگابایت). سیستم حافظه محلی دائمی به معنای کلاسیک ندارد: همه دادههای برنامه ممکن است توسط tvOS در هنگام کمبود فضا حذف شوند (purgeable). توسعهدهنده باید از iCloud Key-Value Storage یا CloudKit برای حفظ وضعیت استفاده کند.
TVMLKit — چارچوب منحصر به فرد tvOS که امکان ایجاد رابطها به JavaScript و TVML (زبان شبیه XML خاص اپل) را فراهم میکند. TVMLKit JSON/XML را از سرور بارگیری میکند و اجزای UI بومی را نمایش میدهد. این فناوری اصلی برای سرویسهای پخش جریانی است: Netflix, Hulu, Amazon Prime Video از TVMLKit استفاده میکنند. TVJS — محیط JavaScript که در زمینه ایزوله اجرا میشود.
tvOS به طور خودکار فضای دیسک را مدیریت میکند: هنگام کمبود فضا، سیستم ممکن است حافظه پنهان، منابع دانلود شده و حتی خود برنامه را حذف کند (با حفظ آیکون). هنگام باز شدن مجدد، برنامه باید وضعیت خود را بازیابی کند. iCloud NSUbiquitousKeyValueStore تنها حافظه دائمی تضمین شده برای تنظیمات است (تا ۱ مگابایت در هر برنامه).
import Foundation
// // حفظ و بازیابی وضعیت در tvOS
final class StateManager {
private let store = NSUbiquitousKeyValueStore.default
private let coder = JSONEncoder()
private let decoder = JSONDecoder()
// در حال ذخیره پیشرفت تماشا
func saveProgress<T: Codable>(_ value: T, for key: String) {
if let data = try? coder.encode(value) {
store.set(data, for: key)
store.synchronize()
}
}
// در حال بازیابی وضعیت پس از حذف حافظه پنهان
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)
}
// مدیریت اعلان تغییر در دستگاه دیگر
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(ubiquitousKeyValueStoreDidChange),
name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: store
)
}
@objc
private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
print("دادهها در دستگاه دیگر تغییر کرد")
}
}StateManager از NSUbiquitousKeyValueStore برای ذخیره وضعیت برنامه در tvOS استفاده میکند. از آنجا که حافظه محلی ممکن است توسط سیستم پاک شود، فقط iCloud ماندگاری داده را تضمین میکند. store.synchronize() بلافاصله دادهها را به سرور ارسال میکند، در حالی که didChangeExternallyNotification برنامه را از تغییرات دستگاههای دیگر کاربر مطلع میکند.
Focus Engine — مکانیسم کلیدی tvOS که رویدادهای لمسی را با ناوبری فوکوس جایگزین میکند. کاربر با استفاده از Siri Remote (سطح لمسی یا دکمهها) انتخاب را بین عناصر UI جابجا میکند. سیستم به طور خودکار عنصر فوکوس بعدی را بر اساس فاصله و جهت حرکت محاسبه میکند.
هر عنصر UI که قادر به دریافت فوکوس است، پروتکل UIFocusEnvironment را پیادهسازی میکند. UIKit به طور خودکار ترتیب ناوبری را بر اساس هندسه عناصر تعیین میکند. توسعهدهنده میتواند فوکوس ترجیحی را از طریق preferredFocusEnvironments لغو کند، آرایهای از focusEnvironment فرزند مشخص کند و حرکت را از طریق UIFocusHeading (up, down, left, right) کنترل کند. UIFocusGuide امکان تعیین مسیرهای سفارشی برای چیدمانهای غیرمعمول را فراهم میکند.
tvOS به طور خودکار UIFocusEffect را به عنصر فوکوس شده اضافه میکند: سایه، برجستهسازی و اثر پارالاکس (جابجایی هنگام کج کردن کنترل). توسعهدهنده میتواند اثر را از طریق focusedValue غیرفعال کند یا از طریق UIFocusEffect.transform سفارشی کند. در SwiftUI، پارالاکس با اصلاحکننده .hoverEffect(.highlight) اضافه میشود.
import SwiftUI
// // جزء tvOS با فوکوس سفارشی
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 روی کنترل
startPlayback()
}
.focusable()
.focusEffect { phase in
// اثر فوکوس سفارشی
phase == .active ?
AnyView(self.scaleEffect(1.08)) :
AnyView(self.scaleEffect(1.0))
}
}
private func startPlayback() {
print("در حال پخش: \(movie.title)")
}
}
// // صفحه اصلی با شبکه فیلمها
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() // گروهبندی برای ناوبری
}
}MovieCardView Focus Engine را در SwiftUI نشان میدهد: اصلاحکننده .focusable() عنصر را قابل فوکوس میکند، .onHover تغییرات وضعیت را ردیابی میکند، .focusEffect امکان انیمیشن فوکوس سفارشی را فراهم میکند. .onPlayPauseCommand فشار دکمه Play/Pause را در Siri Remote مدیریت میکند. focusSection یک شبکه را برای ناوبری چرخهای گروهبندی میکند.
Siri Remote نسل دوم (2021) دارای سطح لمسی، ۵ دکمه و میکروفون است. tvOS از حرکات پشتیبانی میکند: کشیدن (ناوبری)، ضربه زدن (انتخاب)، ضربه دوبل (مرکز کردن)، نیشگون-بزرگنمایی (تصاویر)، فشار طولانی (منوی زمینه). UIPress با انواع .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — انواع فشار از پیش تعریف شده. میکروفون کنترل برای Siri و جستجوی صوتی استفاده میشود.
Top Shelf ناحیهای در صفحه اصلی Apple TV است که محتوای پویای برنامه را هنگامی که در ردیف بالایی است نمایش میدهد. در tvOS 17، Top Shelf تا ۸ ویجت با پسزمینههای سفارشی و عناصر تعاملی پشتیبانی میکند. توسعهدهنده TVTopShelfProvider را برای ارائه محتوا پیادهسازی میکند.
سه سبک Top Shelf در دسترس است: Sectioned — فهرست دستهبندی شده (سریالها بر اساس ژانر)، Inset — عنصر مرکزی با توضیحات دقیق (فیلم توصیهشده)، Photo — شبکه تصاویر (آلبومهای عکس). سیستم Top Shelf را در پسزمینه از طریق BGTaskScheduler بهروزرسانی میکند، مشابه watchOS. ارائهدهنده باید به سرعت محتوا را برگرداند — tvOS دادهها را به مدت ۲۴ ساعت ذخیره میکند.
صفحه اصلی tvOS از یک ردیف Top Shelf و یک شبکه برنامه تشکیل شده است. کاربران میتوانند آیکونها را مرتب کنند و پوشه بسازند. tvOS به طور خودکار برنامهها را از حافظه هنگام کمبود منابع تخلیه میکند، بنابراین توسعهدهنده باید UISceneDidDisconnectNotification را به درستی مدیریت کرده و وضعیت را هنگام راهاندازی مجدد بازیابی کند.
| سبک Top Shelf | قالب | چه زمانی استفاده شود |
|---|---|---|
| Sectioned | بخشهایی با عنوان و موارد | سریالها, پادکستها, لیستهای پخش |
| Inset | یک مورد بزرگ با توضیحات | فیلم روز, اختصاصی |
| Photo | شبکه تصاویر بدون عنوان | آلبومهای عکس, گالریها |
| Tab | تبهای قابل تعویض | ورزش بر اساس نوع, اخبار بر اساس موضوع |
SwiftUI از tvOS 13 به طور کامل در tvOS پشتیبانی میشود. اپل SwiftUI را برای همه پروژههای جدید توصیه میکند. همان کد SwiftUI در iOS, iPadOS, macOS و tvOS با حداقل تطبیق برای Focus Engine کار میکند. SwiftUI برای tvOS اصلاحکنندههای .focusable(), .focusSection(), .onPlayPauseCommand و .onExitCommand را فراهم میکند.
هنگام انتقال برنامه iOS به tvOS، باید: TabView را با NavigationView با ناوبری فوکوس جایگزین کنید، اندازه قلمها را افزایش دهید (حداقل ۳۰pt برای عنوانها، ۲۲pt برای متن)، حاشیه اضافه کنید (حداقل ۴۰pt از لبهها — منطقه امن در تلویزیونها). tvOS از UIAlertController با فیلد متنی، UIWebView و MFMailComposeViewController پشتیبانی نمیکند.
| جزء iOS | معادل tvOS | یادداشت |
|---|---|---|
| UISlider | UIProgressView + دکمهها | Slider پشتیبانی نمیشود |
| UIPickerView | جدول با فوکوس | Picker با لیست جایگزین شد |
| UITextField | UIAlertController (فقط خواندنی) | ورود متن از طریق Siri |
| UIActionSheet | UIAlertController | پشتیبانی میشود |
| UIWebView | پشتیبانی نمیشود | از WKWebView استفاده کنید |
| MFMailCompose | پشتیبانی نمیشود | URL mailto: را باز کنید |
HIG اپل برای tvOS: حداقل اندازه ناحیه لمسی ۶۰×۶۰ نقطه، متن قابل خواندن از فاصله ۳ متر (اندازه قلم برای بدنه کمتر از ۲۲pt نباشد)، تضاد متن ۴.۵:۱، پسزمینه تیره (پسزمینه روشن در تلویزیونهای OLED بازتاب ایجاد میکند)، همه عناصر بدون حرکات پیچیده قابل دسترسی هستند. وضوح: Apple TV 4K خروجی ۳۸۴۰×۲۱۶۰ (4K) یا ۱۹۲۰×۱۰۸۰ (HD) در ۶۰ FPS. همه تصاویر باید @2x (برای 1080p) و @4x (برای 4K) باشند.
TVMLKit — چارچوبی برای ایجاد برنامههای رسانهای در tvOS با استفاده از فناوریهای وب: JavaScript (TVJS) و TVML (XML خاص اپل). برنامههای TVMLKit نیاز به کامپایل ندارند — رابط از سرور بارگیری میشود و بهروزرسانی محتوا را بدون عبور از App Review امکانپذیر میکند. سرویسهای پخش جریانی اصلی از آن برای چرخدنده محتوا استفاده میکنند.
TVML قالبهای آماده ارائه میدهد: CatalogTemplate (کاتالوگ با بخشها), ProductTemplate (صفحه جزئیات محتوا), FormTemplate (فرمهای ورود), LoadingTemplate (نشانگر بارگیری). قالبها در XML توصیف و از طریق ویژگیهای شبیه CSS سبکدهی میشوند. کد TVJS فشارها را مدیریت میکند و APIهای بومی را فراخوانی میکند.
<!-- CatalogTemplate — کاتالوگ فیلمها در TVML -->
<document>
<catalogTemplate>
<banner>
<title>جدیدترین فیلمها</title>
<description>جدیدترین اکرانها و محتواهای اختصاصی</description>
</banner>
<section>
<header>
<title>محبوبترینها</title>
</header>
<items>
<lockup>
<img src="https://cdn.example.com/movie1.jpg" width=300 height=450/>
<title>اینترستلار</title>
</lockup>
<lockup>
<img src="https://cdn.example.com/movie2.jpg" width=300 height=450/>
<title>ناچالو</title>
</lockup>
</items>
</section>
</catalogTemplate>
</document>قالب TVML CatalogTemplate شامل بنری با عنوان و بخشهایی با عناصر lockup است. هر lockup یک کارت فیلم با تصویر و عنوان است. Focus Engine به طور خودکار ناوبری بین عناصر lockup را مدیریت میکند. با فشار، مدیریتکننده TVJS رویداد select را دریافت میکند و میتواند صفحه جزئیات را از طریق ProductTemplate نمایش دهد.
TVJS یک محیط JavaScript جدا شده از برنامه اصلی است. کد TVJS هنگام بارگیری قالب TVML و مدیریت رویدادها فراخوانی میشود. TVJS از طریق Appliance و Player به APIهای بومی برای کنترل پخش ویدیو دسترسی دارد. اپل استفاده از TVMLKit را فقط برای برنامههای رسانهای با بهروزرسانی مکرر محتوا توصیه میکند. برای بازیها و برنامههای تعاملی، SwiftUI ترجیح داده میشود.
انتشار برنامه tvOS نیاز به اشتراک Apple Developer Program (۹۹ دلار/سال) دارد. برنامه از طریق App Store Connect به عنوان یک محصول جداگانه یا بخشی از یک باینری جهانی (iOS + tvOS) بارگذاری میشود. App Review پایداری، انطباق با HIG و محدودیت اندازه ۴ گیگابایت را بررسی میکند.
Xcode یک هدف tvOS با پسوند .app (بسته .ipa) ایجاد میکند. معماری — arm64 (Apple TV از تراشههای ARM Apple Silicon استفاده میکند). tvOS از چارچوبهای دارای i386 یا x86_64 پشتیبانی نمیکند. برنامه با گواهی Apple Development (تست) یا Apple Distribution (انتشار) امضا میشود. توزیع از طریق Volume Purchase Program برای مشتریان تجاری امکانپذیر است.
الزامات ویژه tvOS: همه عناصر رابط باید از طریق Focus Engine بدون استفاده از صفحه لمسی یا صفحه کلید قابل دسترسی باشند. برنامههایی که نیاز به مجوز دارند باید از ورود یکپارچه (SSO) از طریق iTunes Store پشتیبانی کنند. محتوای تبلیغاتی نمیتواند بدون رضایت کاربر پخش را قطع کند. اندازه باینری بارگذاری شده نباید از ۴ گیگابایت تجاوز کند.
| الزام | توضیحات |
|---|---|
| اندازه برنامه | بیشتر از ۴ گیگابایت نباشد, ۵۰۰ مگابایت توصیه میشود |
| وضوح گرافیک | @2x (1920×1080) و @4x (3840×2160) برای 4K |
| ناوبری فوکوس | همه عناصر از طریق Siri Remote قابل دسترسی |
| فرمت ویدیو | H.264, HEVC, Dolby Vision (Profile 5) |
| صدا | Dolby Atmos (E-AC-3 JOC) و استریو AAC |
سوالات متداول
زبان اصلی Swift با چارچوبهای SwiftUI و UIKit است. برای برنامههای رسانهای، TVMLKit با JavaScript و قالبهای TVML بارگیری شده از سرور استفاده میشود. Objective-C برای پروژههای قدیمی پشتیبانی میشود. اپل SwiftUI را برای همه پروژههای جدید tvOS توصیه میکند.
tvOS از Focus Engine به جای رویدادهای لمسی استفاده میکند، دوربین و میکروفون ندارد (به جز Siri Remote)، اندازه برنامه را به ۴ گیگابایت محدود میکند، از حافظه محلی دائمی (purgeable) پشتیبانی نمیکند و برای رندر به Metal نیاز دارد. همه برنامهها فقط روی ARM64 کار میکنند.
Focus Engine حرکت فوکوس بین عناصر UI را با استفاده از Siri Remote مدیریت میکند. توسعهدهنده فوکوس ترجیحی را از طریق preferredFocusEnvironments تنظیم میکند. UIFocusHeading (up, down, left, right) جهت را تعیین میکند. UIFocusEffect به طور خودکار پارالاکس و سایه را به عنصر فعال اضافه میکند.
انتشار نیاز به اشتراک Apple Developer Program (۹۹ دلار/سال) دارد. برنامه از طریق Xcode Organizer یا Transporter به App Store Connect بارگذاری میشود. بررسی: سازگاری با Focus Engine، پایداری، عدم وجود UIWebView و محدودیت اندازه ۴ گیگابایت.
بله، UIKit به طور کامل در tvOS پشتیبانی میشود: UIView, UIViewController, UICollectionView, UITableView. با این حال، UIKit برای Focus Engine تطبیق داده شده است: UIButton و UIControl رویدادها را از طریق فشار کنترل دریافت میکنند، نه لمس. SwiftUI به دلیل تطبیق خودکار فوکوس برای پروژههای جدید توصیه میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.