iOS項(xiàng)目添加WatchKit App模塊實(shí)踐

最近在公司原來(lái)一個(gè)項(xiàng)目里增加了Apple Watch模塊,遇到了很多坑。首先說(shuō)明,本人目前對(duì)Swift還不深入熟悉,所以還是打算在原項(xiàng)目里用OC來(lái)實(shí)現(xiàn)。其次,我用了Apple Watch3個(gè)月了,還是第一次入門(mén),看了喵神的教程,一步步來(lái)的。想想WatchOS 都2了,再不用用都老了。

下面簡(jiǎn)單說(shuō)一下這個(gè)過(guò)程:

0、前言

如果在這之前,你沒(méi)有看過(guò)或了解WatchKit相關(guān)內(nèi)容,那么建議你讀喵神的兩篇文章Apple WatchKit 初探、WWDC15 Session筆記 - 30 分鐘開(kāi)發(fā)一個(gè)簡(jiǎn)單的 watchOS 2 app

一、增加watchOS

這個(gè)步驟就看圖帶過(guò)吧,對(duì)于還不知道的新手來(lái)說(shuō),看圖最直接:

  • 1.新建Target


    New Target
  • 2.選擇 watchOS


    Watchk it App
  • 3.這步驟注意,默認(rèn)勾選了Notification Scene,要解釋一下:

  • <1> Glance Scene :** 如果勾選,就會(huì)在Interface.storyboard里默認(rèn)生成GlanceController的界面,如果原來(lái)選中了,后來(lái)想不要,就直接在Interface.storyboard里把GlanceController界面刪除就可以了。**

  • <2> Complication : 這個(gè)就是在系統(tǒng)表盤(pán)顯示時(shí),滾動(dòng) Digital Crown 時(shí),進(jìn)行一些操作,現(xiàn)在OS2里增加的時(shí)間旅行,就是滾動(dòng) Digital Crown時(shí),天氣和日程表計(jì)劃跟著變動(dòng),這個(gè)功能還是有點(diǎn)用的。

    配置

  • 4.點(diǎn)擊激活吧


    Activate
  • 5.最后在原來(lái)項(xiàng)目里增加了這兩個(gè)目錄App和Extension。


    Watch目錄

二、一些坑要填

1.默認(rèn)新建的Target版本都是1.0,所以你要改成跟你現(xiàn)在項(xiàng)目的版本一樣才行,不然就會(huì)報(bào)錯(cuò)。App和Extension的Target版本都要改。


Info.plist報(bào)錯(cuò)
更改為項(xiàng)目對(duì)應(yīng)的版本號(hào)

2.默認(rèn)App和Extension的Valid Architectures都是“armv7 armv7s i386 arm64”WatchOS運(yùn)行的框架要改為armv7k。如果要在模擬器運(yùn)行,增加i386。

No architectures to compile for armv7k

App和Extension都要改成armv7k

還有一些其實(shí)的小問(wèn)題,不太記得了,相信大家如果遇到自行搜索就能解決。

三、一些代碼

Watch顯示的界面全部由Interface.storyboard里的界面生成,邏輯就是在Extension里寫(xiě),具體也沒(méi)什么好寫(xiě)的,由于我是用OC寫(xiě)的,連圖片緩存的都不會(huì),參考了喵神原OS1文章:

在 Extension 的 target 中獲得圖片 (比如從網(wǎng)絡(luò)下載或者代碼動(dòng)態(tài)生成等),并且需要重復(fù)使用的話,最好用 WKInterfaceDevice 的 -addCachedImage:name: 方法將其緩存到手表中。這樣,當(dāng)我們之后再使用這張圖片的時(shí)候就可以直接通過(guò) -setImageNamed: 來(lái)快速地從手表上生成并使用了。每個(gè) app 的 cache 的尺寸大約是 20M,超過(guò)的話 WatchKit 將會(huì)從最老的數(shù)據(jù)開(kāi)始刪除,以騰出空間存儲(chǔ)新的數(shù)據(jù)。

現(xiàn)在OS2就出現(xiàn)幾個(gè)問(wèn)題:

  • 1.add方法增加的是圖片的名字,如果我是從網(wǎng)絡(luò)下載的,名字怎么?。?/li>
  • 2.如何判斷有沒(méi)有緩存?
  • 3.OS2默認(rèn)已經(jīng)不會(huì)自動(dòng)刪除舊的數(shù)據(jù)了?

WKInterfaceDevice類(lèi)里的*cachedImages這個(gè)屬性O(shè)S2下報(bào)錯(cuò),不知道為什么?有懂的求留言。

@property (nonatomic, readonly, strong) NSDictionary<NSString*, NSNumber*> *cachedImages WK_AVAILABLE_IOS_ONLY(8.2); // name and size of cached images

在這篇文章Apple Watch應(yīng)用優(yōu)化的一些心得技巧總結(jié)找到一些圖片優(yōu)化的方法
WatchKit用的圖片庫(kù):Github上的WKImageCache,或者直接用KFSwiftImageLoader,或者有新的庫(kù),暫時(shí)沒(méi)有去研究,求補(bǔ)充。

  • 最后提供一個(gè)WatchKit下用的NSURLSession方法,網(wǎng)上都是Swift寫(xiě),OC這樣寫(xiě):

    NSString *requestUrl= @"http://www.google.com";
    NSURLSession * session = [NSURLSession sharedSession];
    
    NSURLSessionDataTask * task = [session dataTaskWithURL:[NSURL URLWithString:requestUrl] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if(data!=nil){// 請(qǐng)求成功
            NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
           
            
        }else{//請(qǐng)求失敗

        }  
    }];
    
    [task resume];// 調(diào)用這個(gè)方法才會(huì)去請(qǐng)求網(wǎng)絡(luò)

四、審核的一些坑

前面提到勾選 include Glance Sceneinclude Complication ,結(jié)果在實(shí)現(xiàn)時(shí),沒(méi)有搞好,直接在Glance Scene里顯示一個(gè)下載鏈接的二維碼,蘋(píng)果審核員問(wèn)我二維碼是干什么用的?它會(huì)變嗎?

  • Glance Scene最好要用一些有意義的數(shù)據(jù)顯示


    二維碼被拒絕
  • Complication這個(gè),我是勾選了,第二次又被拒絕,我想說(shuō),蘋(píng)果審核能一次審核全部功能嗎????


    開(kāi)啟了Complication,但沒(méi)有實(shí)現(xiàn)功能被拒絕
  • 取消Complication功能,就是把下圖的Data Source Class刪除,在把五個(gè)勾去掉就可以了:


    Complications Configuration

終于改了,希望審核明天通過(guò)吧!!

五、總結(jié)

關(guān)于Watch App審核,如果你選擇了某個(gè)功能,但沒(méi)有實(shí)現(xiàn),那么一定會(huì)被拒絕的,大家注意一下這點(diǎn),坑就來(lái)那里~

用了一個(gè)星期,了解了WatchKit的基礎(chǔ)功能,實(shí)現(xiàn)了基本的需求。其實(shí)發(fā)現(xiàn),剛開(kāi)始很害怕實(shí)現(xiàn)不了,或者說(shuō),去做時(shí)知道一定會(huì)遇到很多問(wèn)題,所以不敢去碰它。作為工程師,我們需要恒心和勇氣,才能面對(duì)接下來(lái)的大數(shù)據(jù)時(shí)代,我們的知道時(shí)刻要充電,做好準(zhǔn)備吧!

最后想吐槽一下蘋(píng)果Watch,不知道是不是只有我遇到這個(gè)問(wèn)題,表盤(pán)下面掉漆,這是蘋(píng)果的技術(shù)嗎???


蘋(píng)果的logo首先掉色的,心都碎了

參考


注:本文首發(fā)于 iHTCboy's blog,如若轉(zhuǎn)載,請(qǐng)注明來(lái)源。

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

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

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