序言
如果你只是寫一個 Demo,tvOS 看起來其實不難;但只要嘗試做一個需要長期維護、面對真實用戶環境的 App,很快就會發現:tvOS 從來就不是 iPad 的放大版。
它幾乎沒有可靠的本地持久儲存,隨時可能被系統清空資料或殺掉行程;整個交互模型以 Focus 為中心,沒有瀏覽器、沒有 WebView,卻又在播放器層面深度依賴整個 Web 世界。從設計上來看,tvOS 本質上是一個展示終端,而不是工作平台。
Syncnext 正好是一個非典型的例子:它不是服務單一後端的定制播放器,而是在 tvOS 上嘗試面對真實而混亂的網路環境。這篇文章不是教學,而是一次工程實錄,整理那些在這個平台上「活下來」所付出的設計取捨與現實妥協。
如果你正在考慮做一個不只是 Demo 的 tvOS App,這些經驗或許能幫你少走一些彎路。
目錄
- 序言:為什麼是「活下來」
- 一、核心交互哲學:非接觸式操作
- Focus Engine vs. SwiftUI @FocusState
- 深入支持遙控器:從 SwiftUI 到 Game Controller Framework
- 二、系統限制與生存指南
- 嚴苛的存儲環境:沒有持久儲存的現實
- 缺失的 Web 能力:沒有 WebView 的 tvOS
- 網絡與設備差異:IPv6 與性能斷層
- 本地化與故障排除:語言、黑屏與重啟玄學
- 三、SwiftUI 在 tvOS 上的實戰填坑
- 輸入框的「影子戰術」
- 導航與狀態管理的現實
- 為什麼你最終還是需要 TVUIKit
- 焦點系統混用的災難
- 開發者體驗優化(Debug / 可視化)
- 四、播放器核心技術細節
- 絲滑的進度條交互設計
- 雙重 UI 疊加與 Back 鍵狀態機
- AVPlayer 調校策略
- HLS、Local Server 與動態背景
- 自定義 Dismiss 行為
- 五、數據同步策略
- 為什麼應該放棄 CoreData with CloudKit
- 推薦方案:sqlite-data
- 六、後記:關於 eisonAI
一、核心交互哲學:非接觸式操作
tvOS 的 UI/UX 概念,與「觸摸式」系統或「鼠標模式」系統截然不同。你需要使用 Game UX 的概念來思考。在主機平台上,手柄的交互模式才是開發 tvOS App 的首要參考對象。
1. Focus Engine vs. SwiftUI @FocusState
在 tvOS 開發中,你會遇到兩套焦點系統:
- Focus Engine: 以 UIKit 為中心,專為 tvOS 設計的原生方案。