Apple TV Application Development (tvOS)
tvOS — iOS with remote control instead of touchscreen. Sounds simple, breaks most mobile patterns: no direct touch, navigation via Siri Remote, screen watched from 3 meters, not 30 cm. App ported from iPhone without adaptation gets App Store review rejection for tvOS HIG or just turns out inconvenient.
Focus Navigation — Main Challenge
On iOS user taps wherever they want. On tvOS — presses swipe on remote, and system moves focus between focusable elements. Focusable — this is UIButton, UITextField, custom UIView with canBecomeFocused = true.
Problems start with custom UI. If building via UIKit with custom Views without implementing UIFocusEnvironment, focus just doesn't reach your elements. SwiftUI on tvOS works better — focusable() modifier and @FocusState out of box manage navigation. But LazyVGrid in tvOS requires explicit focusSection(), else focus on horizontal swipe goes not to neighbor grid element but jumps unpredictably.
Parallax effect. tvOS expects focusable images have parallax effect on focus. Not just beauty — users accustomed to it as visual indicator. Implemented via UIImageView with adjustsImageWhenAncestorFocused = true and layered LSR/LCR image formats (Layered Still/Animated Image). For SwiftUI — via CardButtonStyle.
UIKit vs SwiftUI on tvOS
SwiftUI — preferred way for new apps. Declarative layout fits grid navigation well. But there are constraints:
-
VideoPlayerin SwiftUI doesn't support custom transport control overlays — needAVPlayerViewControllerviaUIViewControllerRepresentable - Custom
AVPlayerViewControllerDelegatefor remote gesture management — UIKit only -
TVTopShelfProviderfor content on Apple TV home screen — UIKit/Info.plist only, no SwiftUI API
Video player — key component of most tvOS apps. AVPlayerViewController gives standard interface with remote support, subtitles (via AVMediaSelectionGroup), chapters (via AVTimedMetadataGroup), and Picture-in-Picture (from tvOS 14). Customization — via contentOverlayView and customInfoViewController.
Top Shelf Extension
If app installed in first row of Apple TV home screen, can show dynamic content in "shelf" above. Implemented via TVTopShelfContentProvider in separate Extension target.
Two formats: TVTopShelfSectionedContent (sections with elements) and TVTopShelfInsetContent (wide banner). Content requested by system periodically — deferredTopShelfContent(completionBlock:). Without Top Shelf implementation app shows static icon.
Development Process
Analyze content model and usage scenarios (VOD, game, utility). Design navigation for remote — mandatory stage, can't just port mobile flow. Development on SwiftUI + UIKit where needed. Top Shelf integration, Siri Remote gestures (UISwipeGestureRecognizer + UITapGestureRecognizer on allowedPressTypes: [.playPause, .menu]). Testing with physical remote and with iPhone as remote via Remote app.
Publication in App Store via separate tvOS bundle target. tvOS app can be part of universal app (iOS + tvOS in one bundle) or separate product.
Timeframes
Simple informational or VOD app: 6–10 weeks. App with Top Shelf, custom player, authorization: 10–16 weeks. Game or interactive experience — individual assessment. Cost calculated after functional requirements analysis.







