WatchKit開發的一些總結

Apple Watch已經上市,接受預定,市場上各種聲音不斷,有說它好的,有說它不好,各有各的理由,爭議不斷。剩下的就交給市場吧,市場會告訴你一個產品到底是好是壞。
前段時間,公司要開發watch版本的應用,本人便開始學習WatchKit。學之前還心想,這東西就這麼大,能玩出什麼花來?後來的經歷證明,我還是天真了,雖然玩不出什麼花,會有很多坑。。。

開發前,總是要看些資料的

手錶是怎麼工作的

前段時間,有幸得到蘋果公司邀請來到蘋果實驗室,得以一窺watch真容,總得感覺不錯,這玩意有玩頭。

  • watch是通過藍牙與手機通訊的,有證據表明,watch配備了wifi模塊,能在離開手機並且處於已知wifi網絡情況下,自行完成一些有限、但是重要的網絡功能,比如向Siri發起詢問、收發信息、向其他Apple Watch用戶收發塗鴉和心跳消息等

  • watch是和手機一一匹配的,解綁和綁定都很慢,大概半個小時到左右。在與iPhone連接的期間,Apple Watch會在前者的本地存儲空間當中建立一個備份,以供日後的數據恢復之用

  • watch版本開發類似App Extension(應用擴展) ,比如Today Extension(今天擴展),僅支持Xcode 6.2以上版本,最好用Xcode 6.3,相比6.2,6.3多了很多規範檢查,比如檢查版本號是否一直,icon是否全等。

watch開發需要注意的點

1、圖片資源與界面佈局

watch的所有界面是放在Interface.storyboard裏面,圖片自願文件主要是放在Images.xcassets,這兩個都是在WatchKit app目錄下,而代碼文件是在WatchKit Extension下面。
界面佈局已經不是傳統的佈局了,沒有明確的frame,無法使用autolayout,複雜的佈局只能通過嵌套多層WKInterfaceGroup實現,爲了調節間距,時常有種要抓狂的感覺。。

2、圖片view上面加上文字label

由於watch上面圖片WKInterfaceImage是不能直接添加文字WKInterfaceLabel的。對於一個WKInterfaceGroup只能是挨着排,不能重疊。當設計師sir提出這個想法的時候,我第一反應是隻能通過在手機端重新繪製圖片(給圖片繪製上文字)來實現,設計師sir安慰到你試試看,換個別的方法。於是乎,亮光一閃找到一個方法,圖片作爲WKInterfaceGroup的背景圖片(在線下載),文字添加在WKInterfaceGroup上!

3、實現左右可以滑動的多頁佈局(底部有類似UIPagecontrol的多個點)

剛開始,翻遍WatchKit也找不到類似UIScrollView的類,近乎絕望的時候,看到Interface.storyboard裏面的next page屬性,具體使用看這裏。通過指定WKInterfaceControllernext page界面(Interface.storyboard裏面)可以創建左右滑動的多頁效果。
代碼裏面實現動態控制有多少頁:


+ (void)reloadRootControllersWithNames:(NSArray )names contexts:(NSArray )contexts;(void)becomeCurrentPage;

4、兩個WKInterfaceController之間傳值

A界面push到B界面:


A : - (void)pushControllerWithName:(NSString *)name context:(id)context; //context爲自定義的屬性值
B : - (void)awakeWithContext:(id)context //context爲上個界面傳入的值

5、應用生命週期與WKInterfaceController生命週期

watch app 在點擊手錶滑輪退出app後,watch app會處於休眠狀態,並沒有完全退出。下次進入watch app還會處於上次打開的界面。
WKInterfaceController的主要回調方法


- (void)awakeWithContext:(id)context //只會調用一次,適合在這裏添加menu菜單(void)willActivate //類似viewWillAppear,可能會多次調用,比如在界面首次加載完成後會調用,在menu菜單消失後就會調用(void)didDeactivate //類似viewWillDisappear,可能會多次調用,比如在用戶按下滑輪退出watch app後,在menu菜單出現前就會調用

5、Glance 界面開發

對於Glance 界面,蘋果有提供多套標準模板,在Interface.storyboard點擊glance界面能看到。這個界面不能添加button控件,下面是自定義點擊事件示例:

GlanceController裏面:

(void)updateUserActivity:(NSString )type userInfo:(NSDictionary )userInfo webpageURL:(NSURL *)webpageURL;//通過此方法提前註冊好點擊事件,建議是放在網絡連接成功後.
在設置爲ls Initial ControllerWKInterfaceController裏面:

(void)handleUserActivity:(NSDictionary *)userInfo //添加此方法,判斷userInfo處理 glance界面 回調

6、Notifications 相關

發到手機上面的通知,會自動在與之配對的手錶上面顯示出來,如果你需要添加Custom Long Look Interface,還有自定義動作按鈕,那需要在原有通知字段基礎上,加上category字段,並且與alert同級,通過不同的category值可以添加不同的自定義事件按鈕。示例如下:

  UIMutableUserNotificationAction *actionOne = [UIMutableUserNotificationAction new];
  actionOne.title = @"查看詳情";
  actionOne.identifier = @"look detail";//用來區別每個action
  actionOne.activationMode = UIUserNotificationActivationModeForeground; //設置爲Foreground才能打開客戶端,不然爲後臺運行
  UIMutableUserNotificationCategory *inviteCategory = [UIMutableUserNotificationCategory new];
  [inviteCategory setActions:@[actionOne] forContext:UIUserNotificationActionContextDefault];
  inviteCategory.identifier = @"demo"; //此處對應於`category`字段
  NSMutableSet *categories = [NSMutableSet new];
  [categories addObject:inviteCategory];
  UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:categories];
  [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

7、Handoff 功能

Handoff功能是iOS8以後才推出的,Handoff是watch和iphone溝通的絕佳方式之一,在實驗室裏,蘋果方面的人也推薦使用Handoff。
具體的使用方法查看這裏demo

8、提交審覈時需要注意的點

  • 確保你的app icon不包含alpha channel,不然將會在審覈期間被拒

  • 確保iPhone app、WatchKit extension以及Watch app有着相同的編譯號和版本號

  • WatchKit extension需要自己的app ID和Provisioning profile

  • 要確保app target和watch app target展示的名稱應該一致,搜索Product Name要和Bundle Display Name一致。

  • 在新版本應用升級提示描述裏面要體現是爲Apple Watch升級的。

  • 更多看這裏

個人體會:watch開發平臺,是一個全新的平臺,不同於iPhone開發,不能用iPhone開發的角度是思考watch怎麼實現某個功能。全新的平臺會有全新的交互方式,多看官方文檔才能更好的瞭解這個平臺。

在本人博客上面的地址:http://www.wyy.so/2015/04/18/WatchKit開發的一些總結/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章