Apple Watch開發(fā)中遇到的那些問題(WatchOS 2)

WatchOS 2 開發(fā)全過程

實(shí)現(xiàn)效果@2x.png

磕磕絆絆,終于把Watch更新了,放張最有代表性的界面吧。還是會按照實(shí)際操作的順序來寫這篇文字。

1.創(chuàng)建WatchKit模塊
build.png

試著運(yùn)行一下,在這里程序可能會報(bào)錯(cuò),原因是系統(tǒng)創(chuàng)建Watch Target的時(shí)候,Version版本號默認(rèn)給的都是1.0,所以可能會與原程序發(fā)生一些沖突,改過來就OK了。

2.實(shí)現(xiàn)App端與Watch端的通信

在WatchOS 2中下面這對方法已經(jīng)被干掉了

        BOOL sendSuccess = [WKInterfaceController openParentApplication:[request dictionaryValue] reply:^(NSDictionary *replyInfo, NSError *error) {
            if (!block) {
                return;
            }}
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply
{}

不過不用擔(dān)心,在新版本中蘋果添加了WatchConnectivity.framework,其中主要用到的是WCSession這個(gè)類,這里面細(xì)化了多個(gè)方法,可以根據(jù)實(shí)際需要選擇相對應(yīng)的方法。具體的方法就不列出來了,在實(shí)際編碼中用到了下面這個(gè)兩個(gè)方法,第一個(gè)用來傳簡單的數(shù)據(jù)信息和圖片,第二個(gè)用來傳音頻文件。

[[ConnectManager sharedManager].session sendMessage:[request dictionaryValue]
                                               replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
                                                   
                                               } errorHandler:^(NSError * _Nonnull error) {
                                                   
                                               }];
[[ConnectManager sharedManager].session transferFile:url metadata:dic];
        
    });

相對應(yīng)的代理方法:

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler
- (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file

在使用上面這兩個(gè)方法時(shí),需要注意幾點(diǎn):
1.sendMessage只支持標(biāo)準(zhǔn)數(shù)據(jù)類型
2.一開始我打算將音頻也用sendMessage方法傳輸,然后程序會拋出錯(cuò)誤,意思是傳輸?shù)膬?nèi)容過大,無法傳輸,使用sendMessageData同樣會拋出這個(gè)錯(cuò)誤。
3.當(dāng)我的某個(gè)NSString類型的參數(shù)為空時(shí),傳輸也會失敗,這個(gè)問題坑了我半天
4.使用Watch錄制音頻涉及到App Groups方面的內(nèi)容,考慮到都寫到一篇文章里篇幅較大,所以我會單開一篇,包括音頻格式的轉(zhuǎn)換等。文章鏈接如下:
Watch音頻錄制,.wav轉(zhuǎn)換.mp3,獲取音頻文件時(shí)長

關(guān)于WCSession的使用,可以看看這篇文章
stackoverflow-WCSession

3.Glance頁面實(shí)現(xiàn)與交互

蘋果將整塊Glance頁面分為Upper和Lower兩部分,如下圖所示。最好讓設(shè)計(jì)了解到這一點(diǎn),因?yàn)樵谶@個(gè)界面上的布局不是隨心所欲的,而且蘋果也不建議在這個(gè)頁面放Table之類的控件,另外就是Glance沒有交互響應(yīng),點(diǎn)擊任何位置都會跳轉(zhuǎn)到應(yīng)用內(nèi)部。

Upper.png
Lower.png

如果想通知App是從Glance頁面進(jìn)入,或者想要傳入一些其他信息,可以調(diào)用下面的方法。

[self updateUserActivity:@"com.seven.watch.glance" userInfo:info webpageURL:nil];

然后在相應(yīng)的WKInterfaceController中接收

- (void)handleUserActivity:(NSDictionary *)userInfo
{}

基本的數(shù)據(jù)通信差不多就都實(shí)現(xiàn)了,可能寫的不是很細(xì)致,如果有什么問題可以留言,大家一起探討。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,650評論 4 61
  • 其實(shí), 我覺得我這個(gè)人挺敏感的, 敏感到什么程度呢? 我發(fā)你消息你沒有回我, 我會把對話框刪掉, 假裝我沒找過你。...
    披薩狗閱讀 408評論 0 0
  • 魯迅和他的老鼠和貓咪的故事。 在《阿長與山海經(jīng)》里,迅哥兒這樣交代「阿長」的名稱來由: 我平時(shí)叫她「阿媽」,連「長...
    宴息閱讀 4,109評論 0 2
  • 郭相麟 一個(gè)孩子充滿著對武術(shù)的好奇,在名師的指點(diǎn)下,走上了人生坎坷拼搏之路! 在與對手武術(shù)搏擊的挑戰(zhàn)中, 一次...
    郭相麟閱讀 130評論 0 0
  • 這周確定了我本月的主題——讓時(shí)間看得見,這由早起的“輸出”想到的。早起不單單是打個(gè)卡這樣簡單,有效的輸入輸出才是早...
    將心比心_赫閱讀 287評論 0 0

友情鏈接更多精彩內(nèi)容