tvOS: Focus Engine ile Apple TV Geliştirme

Yazar: IT Sectr Yayınlanma: 2026-02-07 Okuma süresi: 11 dk

tvOS — Apple TV için Apple'ın işletim sistemi, ilk olarak 2015'te 4. nesil Apple TV ile birlikte yayınlandı. tvOS için uygulama geliştirme, SwiftUI ve TVMLKit kullanılarak Swift dilinde yapılır. iOS'tan temel farkı, dokunma yerine Siri Remote ile odak kontrolüdür. Apple'a göre tvOS, dünya çapında 100 milyondan fazla aktif cihazda kuruludur.

Önemli Noktalar

  • tvOS — XNU çekirdeğinde dokunma yerine Focus Engine ile TV set üstü kutuları için Apple'ın işletim sistemi
  • Focus Engine — Siri Remote ile öğeler arasında odak yönetim sistemi
  • SwiftUI ve TVMLKit — iki geliştirme yaklaşımı: yerel ve JavaScript şablonları
  • Top Shelf — Apple TV ana ekranında dinamik içerik
  • Uygulama boyutu kesinlikle 4 GB ile sınırlı, önerilen 500 MB'ı geçmemesi

tvOS Nedir?

tvOS — Apple TV set üstü kutuları için Apple'ın işletim sistemi, iOS ile aynı Darwin XNU çekirdeği üzerine kuruludur. İlk olarak 30 Ekim 2015'te 4. nesil Apple TV ile yayınlandı. tvOS, eski Apple TV Software'in (iOS tabanlı, App Store ve SDK'sız) yerini aldı. Sistem, 4K HDR (Dolby Vision) ve Dolby Atmos ses desteğine kadar çözünürlükle TV'de çalışmak üzere optimize edilmiştir.

Apple'a (WWDC 2025) göre tvOS, Apple TV HD (2015), Apple TV 4K (2017, 2021, 2022) üzerinde kuruludur ve AirPlay aracılığıyla bazı Smart TV modellerine entegre edilmiştir. Apple TV, A8 (HD), A10X Fusion (1. nesil 4K), A12 Bionic (2. nesil 4K) ve A15 Bionic (3. nesil 4K) yongalarını kullanır. Tüm modeller tvOS 17'yi destekler. tvOS'ta kamera, mikrofon (kumanda hariç), dokunmatik ekran veya GPS yoktur.

tvOS'un temel özelliği, dokunmatik kontrolü odak navigasyonuyla değiştiren Focus Engine'dir. Kullanıcı, Siri Remote'u kullanarak UI öğeleri arasında seçimi hareket ettirir. Geliştiriciler, Swift/SwiftUI (yerel) veya JavaScript/TVML (Netflix, Hulu gibi medya uygulamaları) ile uygulamalar oluşturur.

tvOS Sürüm Geçmişi

tvOS 9 (2015) — SDK ve App Store ile ilk sürüm. tvOS 10 (2016) — kablo abonelikleri için Tek Oturum Açma (SSO). tvOS 11 (2017) — Amazon Prime Video desteği ve otomatik mod. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — çok kullanıcılı mod. tvOS 17 (2023) — FaceTime, VPN, HDMI üzerinden ses profilleri.

tvOS SürümüYılTemel Yenilik
tvOS 92015App Store, SDK, Siri Remote
tvOS 102016Tek Oturum Açma (SSO), Live Tune-In
tvOS 112017Amazon Prime, otomatik mod
tvOS 122018Dolby Atmos, iPhone ile şifre
tvOS 132019Çok kullanıcılı, TV'de Kontrol Merkezi
tvOS 172023FaceTime, VPN, Siri Remote'u Bul

tvOS Mimarisi ve iOS'tan Farkları

tvOS mimarisi iOS ile aynı yığın üzerine kuruludur: XNU çekirdeği, Core Services sistem hizmetleri, Media katmanı ve Cocoa Touch kullanıcı katmanı. Ancak, TV platformunun özellikleriyle ilgili önemli farklılıklar vardır.

Donanım Sınırlamaları

3. nesil Apple TV 4K, 6 CPU çekirdeği (2 performans, 4 verimlilik) ve 5 çekirdekli GPU ile A15 Bionic kullanır. RAM — 4 GB (64 GB'tan itibaren dahili SSD depolama). Sistem, klasik anlamda kalıcı yerel depolamaya sahip değildir: alan azaldığında tvOS tüm uygulama verilerini silebilir (purgeable). Geliştirici, durumu korumak için iCloud Key-Value Storage veya CloudKit kullanmalıdır.

TVMLKit ve TVJS

TVMLKit — tvOS'a özgü, JavaScript ve TVML (Apple'a özgü XML benzeri dil) ile arayüzler oluşturmayı sağlayan bir framework. TVMLKit, sunucudan JSON/XML yükler ve yerel UI bileşenlerini işler. Bu, akış hizmetleri için birincil teknolojidir: Netflix, Hulu, Amazon Prime Video TVMLKit kullanır. TVJS — izole bir bağlamda çalışan JavaScript ortamı.

Kalıcı Depolama Eksikliği

tvOS disk alanını otomatik olarak yönetir: alan azaldığında sistem önbelleği, indirilen kaynakları ve hatta uygulamanın kendisini silebilir (simgeyi koruyarak). Yeniden açıldığında, uygulama durumunu geri yüklemelidir. iCloud NSUbiquitousKeyValueStore, ayarlar için garantili tek kalıcı depolamadır (uygulama başına 1 MB'a kadar).

swift
import Foundation

// // tvOS'ta durum koruma ve geri yükleme
final class StateManager {

    private let store = NSUbiquitousKeyValueStore.default
    private let coder = JSONEncoder()
    private let decoder = JSONDecoder()

    // İzleme ilerlemesi kaydediliyor
    func saveProgress<T: Codable>(_ value: T, for key: String) {
        if let data = try? coder.encode(value) {
            store.set(data, for: key)
            store.synchronize()
        }
    }

    // Önbellek silindikten sonra durum geri yükleniyor
    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şka bir cihazda değişiklik bildirimi işleniyor
    init() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(ubiquitousKeyValueStoreDidChange),
            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
            object: store
        )
    }

    @objc
    private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
        print("Başka bir cihazda veriler değiştirildi")
    }
}

StateManager, tvOS'ta uygulama durumunu kaydetmek için NSUbiquitousKeyValueStore kullanır. Yerel depolama sistem tarafından temizlenebileceğinden, yalnızca iCloud veri kalıcılığını garanti eder. store.synchronize() verileri hemen sunucuya gönderirken, didChangeExternallyNotification kullanıcının diğer cihazlarındaki değişiklikler hakkında uygulamayı bilgilendirir.

Focus Engine: Navigasyon ve Odak

Focus Engine — dokunma olaylarını odak navigasyonuyla değiştiren tvOS'un temel mekanizması. Kullanıcı, Siri Remote'u (dokunmatik yüzey veya düğmeler) kullanarak UI öğeleri arasında seçimi hareket ettirir. Sistem, mesafe ve hareket yönüne göre bir sonraki odak öğesini otomatik olarak hesaplar.

UIFocusEnvironment ve Odak Hiyerarşisi

Odak alabilen her UI öğesi UIFocusEnvironment protokolünü uygular. UIKit, öğe geometrisine göre gezinme sırasını otomatik olarak belirler. Geliştirici, preferredFocusEnvironments aracılığıyla tercih edilen odağı geçersiz kılabilir, alt focusEnvironment dizisi belirleyebilir ve UIFocusHeading (up, down, left, right) aracılığıyla hareketi kontrol edebilir. UIFocusGuide, karmaşık düzenler için özel yollar belirlemeye olanak tanır.

UIFocusEffect ve Paralaks

tvOS, odaklanan öğeye otomatik olarak UIFocusEffect ekler: gölge, vurgulama ve paralaks efekti (kumanda eğildiğinde kayma). Geliştirici, focusedValue ile efekti devre dışı bırakabilir veya UIFocusEffect.transform ile özelleştirebilir. SwiftUI'de paralaks, .hoverEffect(.highlight) değiştiricisi ile eklenir.

swift
import SwiftUI

// // Özel odaklı tvOS bileşeni
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 {
            // Kumandada Play/Pause düğmesi işleniyor
            startPlayback()
        }
        .focusable()
        .focusEffect { phase in
            // Özel odak efekti
            phase == .active ?
                AnyView(self.scaleEffect(1.08)) :
                AnyView(self.scaleEffect(1.0))
        }
    }

    private func startPlayback() {
        print("Oynatılıyor: \(movie.title)")
    }
}

// // Film ızgaralı ana 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() // Gezinme için gruplama
    }
}

MovieCardView, SwiftUI'de Focus Engine'i gösterir: .focusable() değiştiricisi öğeyi odaklanabilir yapar, .onHover durum değişikliklerini izler, .focusEffect özel odak animasyonuna izin verir. .onPlayPauseCommand, Siri Remote üzerindeki Play/Pause düğmesine basılmasını işler. focusSection, döngüsel navigasyon için bir ızgarayı gruplar.

Siri Remote: Jestler ve Düğmeler

İkinci nesil Siri Remote (2021) bir dokunmatik yüzeye, 5 düğmeye ve bir mikrofona sahiptir. tvOS jestleri destekler: kaydırma (navigasyon), dokunma (seçim), çift dokunma (ortala), kıstırma-yakınlaştırma (görüntüler), uzun basma (bağlam menüsü). UIPress tipleri .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — önceden tanımlanmış basma tipleri. Kumandanın mikrofonu Siri ve sesli arama için kullanılır.

Top Shelf ve Uygulama Ekranı

Top Shelf, Apple TV ana ekranında, uygulama üst sıradayken dinamik içeriğini gösteren bir alandır. tvOS 17'de Top Shelf, özel arka planlar ve etkileşimli öğelerle 8 adede kadar widget'ı destekler. Geliştirici, içerik sağlamak için TVTopShelfProvider'ı uygular.

Top Shelf Stilleri

Üç Top Shelf stili mevcuttur: Sectioned — kategorize edilmiş liste (türe göre diziler), Inset — ayrıntılı açıklamalı merkezi öğe (önerilen film), Photo — resim ızgarası (fotoğraf albümleri). Sistem, watchOS'a benzer şekilde BGTaskScheduler aracılığıyla Top Shelf'i arka planda günceller. Sağlayıcı içeriği hızlı bir şekilde döndürmelidir — tvOS verileri 24 saat boyunca önbellekte tutar.

Uygulama Ekranı

tvOS ana ekranı, bir Top Shelf satırı ve bir uygulama ızgarasından oluşur. Kullanıcılar simgeleri yeniden düzenleyebilir ve klasörler oluşturabilir. Kaynaklar azaldığında tvOS, uygulamaları otomatik olarak bellekten boşaltır, bu nedenle geliştiricinin UISceneDidDisconnectNotification'ı doğru şekilde işlemesi ve yeniden başlatmada durumu geri yüklemesi gerekir.

Top Shelf StiliBiçimNe Zaman Kullanılır
SectionedBaşlıklar ve öğeler içeren bölümlerDiziler, podcast'ler, çalma listeleri
InsetAçıklamalı tek büyük öğeGünün filmi, özel
PhotoAltyazısız resim ızgarasıFotoğraf albümleri, galeriler
TabGeçiş yapılabilen sekmelerTüre göre spor, konuya göre haber

Apple TV için SwiftUI

SwiftUI, tvOS 13'ten itibaren tvOS'ta tam olarak desteklenmektedir. Apple, tüm yeni projeler için SwiftUI'yi önermektedir. Aynı SwiftUI kodu, Focus Engine için minimum uyarlamalarla iOS, iPadOS, macOS ve tvOS'ta çalışır. tvOS için SwiftUI, .focusable(), .focusSection(), .onPlayPauseCommand ve .onExitCommand değiştiricilerini sağlar.

tvOS'a Uyarlama

Bir iOS uygulamasını tvOS'a taşırken: TabView'i odak navigasyonlu NavigationView ile değiştirin, yazı tipi boyutlarını artırın (başlıklar için minimum 30pt, gövde metni için 22pt), kenar boşlukları ekleyin (kenarlardan minimum 40pt — TV'lerde güvenli alan). tvOS, metin alanlı UIAlertController, UIWebView ve MFMailComposeViewController'ı desteklemez.

iOS BileşenitvOS KarşılığıNot
UISliderUIProgressView + düğmelerSlider desteklenmiyor
UIPickerViewOdaklı tabloPicker liste ile değiştirildi
UITextFieldUIAlertController (salt okunur)Siri ile metin girişi
UIActionSheetUIAlertControllerDestekleniyor
UIWebViewDesteklenmiyorWKWebView kullanın
MFMailComposeDesteklenmiyormailto: URL açın

Tasarım Önerileri

tvOS için Apple HIG: minimum dokunma alanı boyutu 60×60 punto, metin 3 metreden okunabilir (gövde için yazı tipi boyutu 22pt'den az olmamalı), metin kontrastı 4.5:1, koyu arka plan (açık arka plan OLED TV'lerde parlamaya neden olur), tüm öğeler karmaşık jestler olmadan erişilebilir. Çözünürlük: Apple TV 4K, 60 FPS'de 3840×2160 (4K) veya 1920×1080 (HD) çıktı verir. Tüm görüntüler @2x (1080p için) ve @4x (4K için) olmalıdır.

TVMLKit ve Medya Uygulamaları

TVMLKit — web teknolojilerini kullanarak tvOS'ta medya uygulamaları oluşturmak için bir framework: JavaScript (TVJS) ve TVML (Apple'a özgü XML). TVMLKit uygulamaları derleme gerektirmez — arayüz sunucudan yüklenir ve App Review'dan geçmeden içerik güncellemelerine izin verir. Büyük akış hizmetleri tarafından içerik karuselleri için kullanılır.

TVML: Şablon Yapısı

TVML hazır şablonlar sağlar: CatalogTemplate (bölümlerle katalog), ProductTemplate (içerik detay sayfası), FormTemplate (giriş formları), LoadingTemplate (yükleme göstergesi). Şablonlar XML'de tanımlanır ve CSS benzeri niteliklerle stillendirilir. TVJS kodu, basmaları işler ve yerel API'leri çağırır.

xml
<!-- CatalogTemplate — TVML'de film kataloğu -->
<document>
  <catalogTemplate>
    <banner>
      <title>Yeni filmler</title>
      <description>Yeni prömiyerler ve özel içerikler</description>
    </banner>
    <section>
      <header>
        <title>Popüler</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şlangıç</title>
        </lockup>
      </items>
    </section>
  </catalogTemplate>
</document>

TVML CatalogTemplate, başlıklı bir banner ve lockup öğeleri içeren bölümler içerir. Her lockup, resim ve başlık içeren bir film kartıdır. Focus Engine, lockup öğeleri arasındaki navigasyonu otomatik olarak yönetir. Basıldığında, TVJS işleyicisi select olayını alır ve ProductTemplate aracılığıyla bir detay sayfası görüntüleyebilir.

TVJS: Olay İşleme

TVJS, ana uygulamadan izole edilmiş bir JavaScript ortamıdır. TVJS kodu, bir TVML şablonu yüklenirken ve olaylar işlenirken çağrılır. TVJS, video oynatımını kontrol etmek için Appliance ve Player aracılığıyla yerel API'lere erişebilir. Apple, TVMLKit'in yalnızca sık içerik güncellemeleri olan medya uygulamaları için kullanılmasını önerir. Oyunlar ve etkileşimli uygulamalar için SwiftUI tercih edilir.

tvOS Uygulamaları Yayınlama

tvOS uygulaması yayınlamak için Apple Developer Program aboneliği ($99/yıl) gerekir. Uygulama, App Store Connect'e ayrı bir ürün veya evrensel ikili dosyanın (iOS + tvOS) parçası olarak yüklenir. App Review, kararlılığı, HIG uyumluluğunu ve 4 GB boyut sınırını kontrol eder.

Derleme ve Dağıtım

Xcode, .app uzantılı (.ipa paketi) bir tvOS hedefi oluşturur. Mimari — arm64 (Apple TV, Apple Silicon ARM yongalarını kullanır). tvOS, i386 veya x86_64 içeren framework'leri desteklemez. Uygulama, Apple Development sertifikası (test) veya Apple Distribution sertifikası (yayın) ile imzalanır. Kurumsal müşteriler için Volume Purchase Program aracılığıyla dağıtım mümkündür.

App Review Gereksinimleri

tvOS özel gereksinimleri: tüm arayüz öğelerine dokunmatik ekran veya klavye kullanmadan Focus Engine aracılığıyla erişilebilmelidir. Yetkilendirme gerektiren uygulamalar, iTunes Store üzerinden Tek Oturum Açma'yı (SSO) desteklemelidir. Reklam içeriği, kullanıcının izni olmadan oynatmayı kesemez. Yüklenen ikili dosya boyutu 4 GB'ı geçmemelidir.

GereksinimAçıklama
Uygulama boyutu4 GB'ı geçmemeli, önerilen 500 MB
Grafik çözünürlüğü@2x (1920×1080) ve @4x (3840×2160) 4K için
Odak navigasyonuTüm öğeler Siri Remote ile erişilebilir
Video formatıH.264, HEVC, Dolby Vision (Profile 5)
SesDolby Atmos (E-AC-3 JOC) ve stereo AAC

Sıkça Sorulan Sorular

tvOS geliştirme için hangi diller kullanılır?

Ana dil Swift'tir ve SwiftUI ile UIKit framework'leri kullanılır. Medya uygulamaları için, sunucudan yüklenen JavaScript ve TVML şablonlarıyla TVMLKit kullanılır. Objective-C, eski projeler için desteklenir. Apple, tüm yeni tvOS projeleri için SwiftUI'yi önerir.

tvOS, iOS'tan nasıl farklıdır?

tvOS, dokunma olayları yerine Focus Engine kullanır, kamerası ve mikrofonu yoktur (Siri Remote hariç), uygulama boyutunu 4 GB ile sınırlar, kalıcı yerel depolamayı (purgeable) desteklemez ve işleme için Metal gerektirir. Tüm uygulamalar yalnızca ARM64'te çalışır.

tvOS'ta Focus Engine nasıl çalışır?

Focus Engine, Siri Remote'u kullanarak UI öğeleri arasındaki odak hareketini yönetir. Geliştirici, preferredFocusEnvironments aracılığıyla tercih edilen odağı ayarlar. UIFocusHeading (up, down, left, right) yönü belirler. UIFocusEffect, etkin öğeye otomatik olarak paralaks ve gölge ekler.

Apple TV için uygulamalar nasıl yayınlanır?

Yayınlama için Apple Developer Program aboneliği ($99/yıl) gerekir. Uygulama, Xcode Organizer veya Transporter aracılığıyla App Store Connect'e yüklenir. Denetim şunları kontrol eder: Focus Engine uyumluluğu, kararlılık, UIWebView olmaması ve 4 GB boyut sınırı.

tvOS'ta UIKit kullanılabilir mi?

Evet, UIKit tvOS'ta tamamen desteklenir: UIView, UIViewController, UICollectionView, UITableView. Ancak UIKit, Focus Engine için uyarlanmıştır: UIButton ve UIControl, dokunma yerine kumanda basmasıyla olay alır. Otomatik odak uyarlaması nedeniyle yeni projeler için SwiftUI önerilir.

Özet

  • tvOS — XNU çekirdeğinde Focus Engine kontrollü TV set üstü kutuları için Apple'ın işletim sistemi
  • Focus Engine, paralaks efektleriyle Siri Remote aracılığıyla dokunma kontrolünü odak hareketiyle değiştirir
  • TVMLKit — sunucu tarafı TVML şablonlarıyla JavaScript'te medya uygulamaları için benzersiz bir framework
  • Top Shelf, TVTopShelfProvider aracılığıyla ana ekranda dinamik içerik sağlar
  • SwiftUI, tvOS 13'ten itibaren focusable, focusSection ve onPlayPauseCommand değiştiricileriyle tam desteklenir
  • tvOS Sınırlamaları: 4 GB boyut, purgeable depolama, kamera, UIWebView veya MFMailCompose yok
  • Yayınlama, Apple Developer Program, @2x/@4x grafikler, HEVC formatı ve Dolby Atmos gerektirir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun