前陣子在幫水滴發票加入 Apple Watch 的功能,這篇文章會紀錄下開發的一些想法。
資料傳遞方面
因為 Watch app 本身可以為一個獨立的 app,所以 UserDefaults
的部分則會擁有自己的一份,也就是說兩者之間無法像是 Widget 一般透過同一個 Group 的 UserDefault
來同步資料。
解決方法
利用 WCSession
來做傳遞資料。
實機測試時,WCSession.isReachable 始終為 false
主要就是手機和手錶之間一直無法透過 WCSession
連接上彼此,會造成幾個問題如
- Apple Watch App 一直卡在安裝中,無法順利安裝
- 無法透過 WCSession 從 iOS app 傳遞資料過去給 Watch app
解決方法
我遇到這情況是都選擇重開 iPhone 來處理。
Apple Watch 模擬器和實機上的測試結果不同
在這次的開發之中,我們有使用到比較大的數字在中間傳遞,而原先沒多考慮就以 Int
來存 Timestamp
,並在 Apple Watch 的模擬器上測試過幾輪沒出現問題;直到發佈 TestFlight 後才陸續出現在實體裝置上。
進而才意會到模擬器上的 Int
是 64 bit(Int.max = 9223372036854775807),而實際上以 Apple Watch SE6 來說,是 32 bit(Int.max = 2147483647),所以根本不能這樣存。
解決方法
重新審視一次當初自己疏忽掉的 size 問題,並寫篇筆記提醒自己以後開發 Apple Watch app 的時候要注意 CPU 上的差異。