tvOS — نظام تشغيل Apple لأجهزة Apple TV، تم إطلاقه لأول مرة في 2015 مع الجيل الرابع من Apple TV. يتم تطوير التطبيقات لـ tvOS بلغة Swift باستخدام SwiftUI وTVMLKit. الفرق الرئيسي عن iOS هو التحكم في التركيز عبر Siri Remote بدلاً من اللمس. وفقاً لـ Apple، tvOS مثبت على أكثر من 100 مليون جهاز نشط حول العالم.
النقاط الرئيسية
tvOS — نظام تشغيل Apple لأجهزة Apple TV، المبني على نفس نواة Darwin XNU مثل iOS. تم إطلاقه لأول مرة في 30 أكتوبر 2015 مع Apple TV من الجيل الرابع. حل tvOS محل Apple TV Software القديم (القائم على iOS، بدون App Store أو SDK). النظام محسّن للعمل على التلفزيون بدقة تصل إلى 4K HDR (Dolby Vision) وصوت Dolby Atmos.
وفقاً لـ Apple (WWDC 2025)، tvOS مثبت على Apple TV HD (2015)، Apple TV 4K (2017، 2021، 2022) ومدمج في بعض موديلات Smart TV عبر AirPlay. يستخدم Apple TV شرائح A8 (HD)، A10X Fusion (4K الجيل الأول)، A12 Bionic (4K الجيل الثاني) وA15 Bionic (4K الجيل الثالث). جميع الموديلات تدعم tvOS 17. لا يحتوي tvOS على كاميرا، ميكروفون (باستثناء جهاز التحكم)، شاشة لمس أو GPS.
الميزة الرئيسية لـ tvOS هي Focus Engine، الذي يستبدل التحكم باللمس بالتنقل بالتركيز. يقوم المستخدم بتحريك التحديد بين عناصر واجهة المستخدم باستخدام Siri Remote. يقوم المطورون بإنشاء تطبيقات بلغة 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 مع 6 أنوية CPU (2 أداء، 4 كفاءة) وGPU بخمسة أنوية. RAM — 4 جيجابايت (تخزين SSD داخلي من 64 جيجابايت). لا يحتوي النظام على تخزين محلي دائم بالمعنى التقليدي: يمكن لـ tvOS حذف جميع بيانات التطبيقات عند ضيق المساحة (purgeable). يجب على المطور استخدام iCloud Key-Value Storage أو CloudKit للحفاظ على الحالة.
TVMLKit — إطار عمل فريد لـ tvOS يتيح إنشاء واجهات بلغة JavaScript وTVML (لغة شبيهة بـ XML خاصة بـ Apple). يقوم TVMLKit بتحميل JSON/XML من الخادم ويعرض مكونات واجهة أصلية. هذه هي التقنية الرئيسية لخدمات البث: Netflix، Hulu، Amazon Prime Video تستخدم TVMLKit. TVJS — بيئة JavaScript تعمل في سياق معزول.
يدير tvOS مساحة القرص تلقائياً: عند ضيق المساحة، قد يحذف النظام ذاكرة التخزين المؤقت والموارد التي تم تنزيلها وحتى التطبيق نفسه (مع الاحتفاظ بالأيقونة). عند إعادة الفتح، يجب على التطبيق استعادة حالته. iCloud NSUbiquitousKeyValueStore هو التخزين الدائم الوحيد المضمون للإعدادات (حتى 1 ميجابايت لكل تطبيق).
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 (سطح اللمس أو الأزرار). يحسب النظام تلقائياً عنصر التركيز التالي بناءً على المسافة واتجاه الحركة.
كل عنصر واجهة قادر على استقبال التركيز يطبق بروتوكول 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. focusEffect يقوم بتجميع شبكة للتنقل الدائري.
Siri Remote من الجيل الثاني (2021) يحتوي على سطح لمس، 5 أزرار وميكروفون. يدعم tvOS الإيماءات: التمرير (تنقل)، النقر (تحديد)، النقر المزدوج (تمركز)، الضغط للتكبير/التصغير (صور)، الضغط الطويل (قائمة سياقية). UIPress بأنواع .select، .playPause، .menu، .upArrow، .downArrow، .leftArrow، .rightArrow — أنواع ضغط محددة مسبقاً. يستخدم ميكروفون جهاز التحكم لـ Siri والبحث الصوتي.
Top Shelf هي منطقة على الشاشة الرئيسية لـ Apple TV تعرض محتوى ديناميكياً للتطبيق عندما يكون في الصف العلوي. في tvOS 17، يدعم Top Shelf حتى 8 ويدجت بخلفيات مخصصة وعناصر تفاعلية. يقوم المطور بتطبيق TVTopShelfProvider لتوفير المحتوى.
يتوفر ثلاثة أنماط لـ Top Shelf: Sectioned — قائمة مصنفة (مسلسلات حسب النوع)، Inset — عنصر مركزي مع وصف تفصيلي (فيلم موصى به)، Photo — شبكة صور (ألبومات صور). يقوم النظام بتحديث Top Shelf في الخلفية عبر BGTaskScheduler، على غرار watchOS. يجب على المزود إرجاع المحتوى بسرعة — يخزن tvOS البيانات مؤقتاً لمدة 24 ساعة.
تتكون الشاشة الرئيسية لـ tvOS من صف Top Shelf وشبكة تطبيقات. يمكن للمستخدمين إعادة ترتيب الأيقونات وإنشاء مجلدات. يقوم tvOS تلقائياً بتفريغ التطبيقات من الذاكرة عند نقص الموارد، لذلك يجب على المطور معالجة UISceneDidDisconnectNotification بشكل صحيح واستعادة الحالة عند إعادة التشغيل.
| نمط Top Shelf | التنسيق | متى تستخدم |
|---|---|---|
| Sectioned | أقسام بعناوين وعناصر | مسلسلات، بودكاست، قوائم تشغيل |
| Inset | عنصر كبير واحد مع وصف | فيلم اليوم، حصري |
| Photo | شبكة صور بدون تعليقات | ألبومات صور، معارض |
| Tab | علامات تبويب مع تبديل | رياضة حسب النوع، أخبار حسب الموضوع |
SwiftUI مدعوم بالكامل في tvOS بدءاً من tvOS 13. توصي Apple باستخدام SwiftUI لجميع المشاريع الجديدة. يعمل نفس كود SwiftUI على iOS، iPadOS، macOS وtvOS مع تعديلات طفيفة لـ Focus Engine. يوفر SwiftUI لـ tvOS المعدلات .focusable()، .focusSection()، .onPlayPauseCommand و .onExitCommand.
عند نقل تطبيق iOS إلى tvOS، يجب: استبدال TabView بـ NavigationView مع التنقل بالتركيز، زيادة حجم الخطوط (30 نقطة على الأقل للعناوين، 22 نقطة للنص)، إضافة هوامش (40 نقطة على الأقل من الحواف — المنطقة الآمنة على أجهزة التلفزيون). tvOS لا يدعم UIAlertController مع حقل نص، UIWebView أو MFMailComposeViewController.
| مكون iOS | النظير في tvOS | ملاحظة |
|---|---|---|
| UISlider | UIProgressView + أزرار | Slider غير مدعوم |
| UIPickerView | جدول مع تركيز | Picker مستبدل بقائمة |
| UITextField | UIAlertController (للقراءة فقط) | إدخال النص عبر Siri |
| UIActionSheet | UIAlertController | مدعوم |
| UIWebView | غير مدعوم | استخدم WKWebView |
| MFMailCompose | غير مدعوم | افتح رابط mailto: |
HIG من Apple لـ tvOS: الحد الأدنى لحجم منطقة اللمس 60×60 نقطة، النص مقروء من مسافة 3 أمتار (حجم خط لا يقل عن 22pt للنص)، تباين النص 4.5:1، خلفية داكنة (الخلفية الفاتحة تسبب وهجاً على شاشات OLED)، جميع العناصر متاحة بدون إيماءات معقدة. الدقة: Apple TV 4K يخرج 3840×2160 (4K) أو 1920×1080 (HD) بمعدل 60 إطاراً في الثانية. يجب أن تكون جميع الصور بدقة @2x (لـ 1080p) و@4x (لـ 4K).
TVMLKit — إطار عمل لإنشاء تطبيقات الوسائط على tvOS باستخدام تقنيات الويب: JavaScript (TVJS) وTVML (XML خاص بـ Apple). تطبيقات TVMLKit لا تتطلب تجميعاً — الواجهة تُحمّل من الخادم، مما يسمح بتحديث المحتوى دون المرور عبر App Review. تستخدمه خدمات البث الرئيسية لعربات المحتوى.
يوفر TVML قوالب جاهزة: CatalogTemplate (كتالوج بأقسام)، ProductTemplate (صفحة تفاصيل المحتوى)، FormTemplate (نماذج تسجيل الدخول)، LoadingTemplate (مؤشر التحميل). تُوصف القوالب في XML وتُنسق عبر سمات شبيهة بـ CSS. كود TVJS يعالج الضغطات ويستدعي واجهات برمجة التطبيقات الأصلية.
<!-- 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 للتحكم في تشغيل الفيديو. توصي Apple باستخدام TVMLKit فقط لتطبيقات الوسائط ذات التحديثات المتكررة للمحتوى. للألعاب والتطبيقات التفاعلية، يفضل SwiftUI.
نشر تطبيق tvOS يتطلب اشتراكاً في Apple Developer Program (99 دولاراً / سنة). يتم تحميل التطبيق عبر App Store Connect كمنتج منفصل أو كجزء من ثنائي شامل (iOS + tvOS). يتحقق App Review من الاستقرار والامتثال لـ HIG وحد الحجم 4 جيجابايت.
يقوم 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. لا يمكن للمحتوى الإعلاني مقاطعة التشغيل دون موافقة المستخدم. حجم الثنائي الذي تم تحميله يجب ألا يتجاوز 4 جيجابايت.
| المتطلب | الوصف |
|---|---|
| حجم التطبيق | لا يزيد عن 4 جيجابايت، يوصى بـ 500 ميجابايت |
| دقة الرسومات | @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 مدعوم للمشاريع القديمة. توصي Apple باستخدام SwiftUI لجميع مشاريع tvOS الجديدة.
tvOS يستخدم Focus Engine بدلاً من أحداث اللمس، لا يحتوي على كاميرا أو ميكروفون (باستثناء Siri Remote)، يحد حجم التطبيق بـ 4 جيجابايت، لا يدعم التخزين المحلي الدائم (purgeable) ويتطلب استخدام Metal للعرض. جميع التطبيقات تعمل فقط على ARM64.
Focus Engine يدير حركة التركيز بين عناصر واجهة المستخدم باستخدام Siri Remote. يحدد المطور التركيز المفضل عبر preferredFocusEnvironments. UIFocusHeading (up, down, left, right) يحدد الاتجاه. UIFocusEffect يضيف تلقائياً التزيح المنظوري والظل إلى العنصر النشط.
النشر يتطلب اشتراكاً في Apple Developer Program (99 دولاراً / سنة). يتم تحميل التطبيق عبر Xcode Organizer أو Transporter إلى App Store Connect. تتحقق المراجعة من: التوافق مع Focus Engine، الاستقرار، عدم وجود UIWebView وحد الحجم 4 جيجابايت.
نعم، UIKit مدعوم بالكامل في tvOS: UIView، UIViewController، UICollectionView، UITableView. ومع ذلك، تم تكييف UIKit مع Focus Engine: UIButton وUIControl يتلقيان الأحداث عبر ضغط جهاز التحكم، وليس اللمس. يُوصى باستخدام SwiftUI للمشاريع الجديدة بسبب التكيف التلقائي مع التركيز.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.