蘋果手表應用開發
英文原文:Developing an Apple Watch App
在最近的西雅圖 Xcoders 聚會上,Omni Group 的軟件工程師 Curt Clifton 介紹了如何進行蘋果手表應用的開發。在這次介紹中談及了手表應用的概念模型,手機和手表之間的數據通信以及應用開發中會遇到一些的挑戰。
概念模型
Clifton 提到,在開發過程中需要考慮的第一件事就是:在 WatchKit 1.0 中,代碼是運行在一個與 iPhone 手機應用綁定的擴展中的。
手表本身不會運行任何非蘋果開發的代碼,不過它可以保存圖片資源和經過編譯的故事板(Storyboard)。此外,也可以動態地生成圖片并將 其輸送至蘋果手表,在蘋果手表中為這些圖片保留了 20MB 的緩存空間,不過根據 Clifton 的經驗,這種方式速度很慢并且可靠性不高。
WatchKit 框架目前還相當小,主要由手表上的視圖代理類組成。另外,這些類主要提供專用的 setter 方法,沒有 getter 方法。
同步選項
由于 iOS 擴展與其宿主應用運行在不同的進程中,兩者之間的數據同步就非常關鍵。因此,Clifton 回顧了目前可用的幾種不同的同步機制。
- NSFileCoordinator: this has been unfortunately ruled out for app?extension coordination by an Apple technical note
- NSFileCoordinator:很不幸,在一篇蘋果技術說明中,這中方案已經被排除,不再作為應用擴展協作的方式。
- Groups entitlement and user defaults: pretty easy to setup and use, but it will not notify about changes.
- 組權限和用戶默認值:這種方案配置和使用相當容易,不過在發生變化時,不會發送通知。
- 共享的 CoreData/SQLite數據庫:據 Clifton 介紹,是相當不錯的一種機制。
-
種子文件和回調:Clifton 在其示例應用中使用并且更加詳細描述的一種解決方案。
- iPhone 宿主應用向共享應用容器中寫入一個種子文件,其中承載著某種格式的負載,如 JSON 格式。
- 手表擴展讀取數據種子文件,然后在其準備向父應用返回某個用戶操作時,會調用 openParentApplication:reply:方法,將處于后臺的宿主應用喚醒。父應用接收到一個回復塊,在其準備就緒后,將調用這個回復塊。
- 宿主應用可以更新種子文件中的數據然后運行回復塊,將新的數據傳遞給擴展。
- 手表擴展不再需要讀取種子文件,它只需要通過回復塊就可以在內存中更新其接收到的數據。
在演示的下一部分,Clifton 走查了他的示例應用源代碼并向觀眾演示如何在 Xcode 中進行調試,調試過程類似于任何一個 iOS 8 應用擴展的調試過程。
挑戰
這次討論的最后一個部分是關于開發者將會面臨的挑戰。
- 如我們之前提到的,WatchKit 只提供 setter 方法,因此第一個挑戰就是向未處于活動狀態的控制發送命令。這可能會導致數據不一致,可以通過讓每個類跟蹤其控制狀態是活動還是不活動來解決這個問題。在 示例應用中,是通過一系列_updateDisplay*方法實現的。
- 如果在 Xcode 文件拷貝構建步驟能夠拷貝框架,可以在宿主應用和手表擴展之間使用共享的框架。
- 不支持自動布局,可以用從左至右,從上到下填充的組替換;可以用組內加組的方式構建較為復雜的 UI,不過這是一個和自動布局完全不同的模型。
- 最后,現在還不知道手表的通知接口的具體情況,而且如何處理來自于手表的通知也尚不清楚。
可以在 GitHub 上找到 Clifton 的示例應用。
來自: InfoQ
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!