TV App — Apple TV (tvOS) və Android TV (Google TV) platformalarında işləyən smart-televizorlar üçün tətbiqdir. Mobil tətbiqlərdən fərqli olaraq, TV App pultla naviqasiya, fokus-idarəetmə (Focus Engine) və böyük ekranda interfeysin spesifik tələbləri nəzərə alınmaqla hazırlanır. İnkişaf Apple TV üçün Swift/SwiftUI və Android TV üçün Kotlin ilə Leanback Library istifadə edilərək aparılır. Statista (2026) məlumatlarına görə, dünyada 250 milyondan çox cihaz bu platformalarda işləyir ki, bu da TV App-i proqramçılar üçün perspektivli bir niş halına gətirir. Platformaların arxitekturasını, fokus-idarəetməni, kod nümunələrini və nəşr prosesini nəzərdən keçirək.
Əsas məqamlar
TV App — ağıllı televizor platformalarında işləmək üçün nəzərdə tutulmuş tətbiqdir: Apple TV (tvOS) və Android TV (Google TV). Mobil tətbiqdən əsas fərq — qarşılıqlı əlaqə üsulu. İstifadəçi ekrana toxunmur, əksinə pult vasitəsilə interfeysi idarə edir. Bütün elementlər istiqamətli naviqasiya (D-pad) vasitəsilə əlçatan olmalıdır: yuxarı, aşağı, sola, sağa və seçim düyməsi.
TV App hazırlanmasının xüsusiyyətləri: ekran təsviri — Full HD (1920x1080) ilə 4K (3840x2160) arasında xhdpi sıxlığı (Android) və ya @3x (Apple) ilə. Over-scan kompensasiyası üçün kənarlardan 5% təhlükəsiz zona məcburidir (şəklin bir hissəsi televizor tərəfindən kəsilə bilər). Sensor ekran yoxdur — bütün qarşılıqlı əlaqələr pult və ya gamepad vasitəsilədir. Fokus həmişə aktiv elementi vurğulayır. Enerji istehlakı batareya ilə məhdudlaşmır, lakin tətbiq yuxu rejiminə keçidi düzgün idarə etməlidir. Statista (2026) məlumatlarına görə, qlobal smart TV bazarı yeni televizorların 80%-ni keçir, Apple TV və Android TV isə 250 milyondan çox cihazı əhatə edir.
TV tətbiqlərinin kateqoriyaları: video xidmətləri (Netflix, YouTube, Apple TV+), musiqi (Spotify, Apple Music), oyunlar (Apple Arcade, Google Play Games), fitness (Apple Fitness+, Peloton), təhsil, xəbərlər, hava, foto. Ən populyar kateqoriya — video axını, smart TV-dən istifadə müddətinin 70%-ni təşkil edir.
tvOS — Apple TV qutusu üçün Apple-ın iOS əsaslı əməliyyat sistemidir. İlk buraxılış — 2015-ci il, Apple TV 4-cü nəsil ilə birlikdə. tvOS iOS ilə XNU nüvəsini, Foundation freymvorklarını, UIKit-i (uyğunlaşdırılmış versiyada) və App Sandbox təhlükəsizlik mexanizmini paylaşır. İnkişaf Swift istifadə edilərək SwiftUI və ya UIKit ilə aparılır.
tvOS-un əsas komponentləri:
tvOS tətbiqinin həyat dövrü iOS ilə analojidir: notRunning, foregroundActive, foregroundInactive, background. Xüsusiyyət: tətbiq zərurət olmadan fon icazələri tələb etməməlidir — sistem fon prosesini məcburi şəkildə sonlandıra bilər. Naviqasiya topologiyası UISplitViewController və UITabBarController ətrafında qurulur „Ana səhifə“, „Axtarış“, „Kitabxana“, „Parametrlər“ nişanları ilə.
Android TV — televizorlar və qutular üçün optimallaşdırılmış Android versiyası, ilk dəfə 2014-cü ildə təqdim edilmişdir. 2020-ci ildən etibarən Google TV mövcuddur — Android TV üzərində yeni interfeysli qat, lakin tətbiq inkişafı Android TV SDK-da aparılır, Google TV ilə uyğunlaşır. Əsas dil — Kotlin, UI freymvorkları — Leanback Library (klassik) və Jetpack Compose for TV (eksperimental).
Android TV-nin əsas komponentləri:
Android TV-nin mobil Android-dən fərqləri: tətbiq manifestdə LEANBACK_LAUNCHER kateqoriyasını məcburi elan edir; minimal layout eni — 1920dp; toxunma qarşılıqlı əlaqəsi D-pad naviqasiyası ilə əvəz olunur; Leanback fraqmentlərindən istifadə tövsiyə olunur; hardware sürətləndirməsi məcburidir. Quraşdırma ARM64 və x86 arxitekturalarını dəstəkləyən APK/AAB daxildir. 2025-ci ildən müasir layihələr üçün TvLazyColumn, TvButton, TvCard komponentləri ilə Jetpack Compose for TV tövsiyə olunur.
Focus Engine — hər bir TV platformasının əsas komponenti, interfeysin hansı elementinin aktiv olduğuna cavabdehdir. tvOS-da Focus Engine UIKit-ə daxildir və avtomatik işləyir. D-pad düyməsi basıldıqda sistem bütün focusable-elementlərin yerləşməsini təhlil edir, basma istiqamətində ən yaxın namizədi hesablayır və animasiya ilə fokusu ona köçürür (UIFocusAnimationCoordinator).
Focus Engine qaydaları: sistem hərəkət oxu boyunca elementlər arasındakı məsafəni, elementlərin proyeksiyalarının kəsişməsini (element namizəd hesab olunur, əgər onun proyeksiyası cari fokusun proyeksiyasını kəsirsə), eyni məsafədə olan elementlərin prioritetini (düz xətt üzrə ən yaxını seçilir) nəzərə alır. Proqramçı UIFocusGuide vasitəsilə fokusa təsir edə bilər — müəyyən istiqamətdə basıldıqda fokusu konkret elementə yönləndirən görünməz istiqamətləndirici düzbucaqlı.
Android TV-də fokus Android-in standart fokus sistemi vasitəsilə həyata keçirilir focusable və nextFocus* atributları ilə (nextFocusDown, nextFocusUp, nextFocusLeft, nextFocusRight). Animasiya StateListAnimator vasitəsilə konfiqurasiya olunur. Google bütün interaktiv elementlərdə focusable təyin etməyi və naviqasiyanın dəqiq idarəsi üçün nextFocus istifadə etməyi tövsiyə edir. Fokus animasiyası UX üçün kritik əhəmiyyət daşıyır — fokus keçidində 150–250 ms müddətində hamar miqyas animasiyası (1.0 → 1.05–1.2) baş verməlidir.
Focus Engine dəstəyi ilə film siyahısını göstərən Apple TV üçün SwiftUI-də sadə TV tətbiq nümunəsi.
import SwiftUI
struct Movie: Identifiable {
let id = UUID()
let title: String
let subtitle: String
}
struct ContentView: View {
@FocusState private var focusedMovie: UUID?
let movies: [Movie] = [
Movie(title: "Inception", subtitle: "2010, Sci-Fi"),
Movie(title: "Interstellar", subtitle: "2014, Sci-Fi"),
Movie(title: "The Matrix", subtitle: "1999, Action"),
Movie(title: "Blade Runner 2049", subtitle: "2017, Sci-Fi"),
]
var body: some View {
VStack(alignment: .leading, spacing: 40) {
Text("Filmlər").font(.title).padding(.leading, 60)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 40) {
ForEach(movies) { movie in
VStack {
Image(systemName: "film.fill")
.resizable()
.frame(width: 200, height: 300)
.cornerRadius(12)
.focusable()
.focused($focusedMovie, equals: movie.id)
Text(movie.title).font(.headline)
Text(movie.subtitle).font(.subheadline).foregroundColor(.secondary)
}
.scaleEffect(focusedMovie == movie.id ? 1.15 : 1.0)
.animation(.easeInOut(duration: 0.2), value: focusedMovie)
}
}
.padding(.horizontal, 60)
}
}
.onAppear { focusedMovie = movies.first?.id }
}
}
Əsas məqamlar: @FocusState — cari fokusun izlənməsi; .focusable() — elementi fokus üçün əlçatan edir; .scaleEffect() — fokusda böyütmə animasiyası, TV-də vizual geribildirim üçün vacibdir.
Kotlin-də Leanback Library ilə Android TV üçün analoji nümunə:
// MainActivity.kt
class MainActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
class MainFragment : BrowseSupportFragment() {
private val moviePresenter = MoviePresenter()
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
title = getString(R.string.app_name)
headersState = HEADERS_ENABLED
setupAdapter()
}
private fun setupAdapter() {
val rowsAdapter = ArrayObjectAdapter(ListRowPresenter())
val listRowAdapter = ArrayObjectAdapter(moviePresenter)
listRowAdapter.add(Movie("Inception", "2010", R.drawable.poster_1))
listRowAdapter.add(Movie("Interstellar", "2014", R.drawable.poster_2))
rowsAdapter.add(ListRow(HeaderItem(0, "Movies"), listRowAdapter))
adapter = rowsAdapter
}
}
data class Movie(val title: String, val subtitle: String, val imageResId: Int)
class MoviePresenter : Presenter() {
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
val cardView = ImageCardView(parent.context).apply {
isFocusable = true
setMainImageDimensions(200, 300)
}
return ViewHolder(cardView)
}
override fun onBindViewHolder(viewHolder: ViewHolder, item: Any) {
val movie = item as Movie
(viewHolder.view as ImageCardView).apply {
titleText = movie.title
contentText = movie.subtitle
}
}
override fun onUnbindViewHolder(viewHolder: ViewHolder) {}
}
Əsas məqamlar: BrowseSupportFragment — başlıqlarla Leanback-in əsas fraqmenti; Presenter — RecyclerView.Adapter-ə bənzər ViewHolder yaratmaq üçün abstraksiya; ImageCardView — şəkil, başlıq və altbaşlıqlı standart kart; isFocusable = true — TV elementləri üçün məcburi atribut.
Tez-tez verilən suallar
TV App toxunma əvəzinə pult (D-pad) ilə idarə olunur, naviqasiya üçün Focus Engine istifadə edir, böyük ekran (Full HD və ya 4K) üçün optimallaşdırılıb və batareya məhdudiyyəti yoxdur. Bütün elementlər fokusun istiqamətli hərəkəti ilə əlçatan olmalıdır.
Focus Engine — tvOS-da interfeysin aktiv elementini avtomatik təyin edən sistemdir. D-pad düyməsi basıldıqda sistem focusable-elementlərin yerləşməsini təhlil edir, ən yaxın namizədi hesablayır və animasiya ilə fokusu ona köçürür.
Əsas freymvork — Leanback Library (BrowseFragment, DetailsFragment, PlaybackOverlayFragment). Müasir layihələr üçün eksperimental dəstəklə Jetpack Compose for TV da mövcuddur.
İlkin inkişaf üçün simulyatorlar kifayətdir: Xcode Siri Remote ilə tvOS Simulator, Android Studio — Android TV Emulator daxildir. Yekun sınaq üçün fiziki cihaz tövsiyə olunur.
Apple TV App App Store Connect vasitəsilə Xcode Organizer ilə nəşr olunur. Android TV App — Google Play Console vasitəsilə manifestdə LEANBACK_LAUNCHER göstərilməklə və 1920x1080 ekran görüntüləri ilə.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun