Update To Watch OS 2.0

       苹果已经推出watch OS 2.0有一段时间了,相比watch OS 1.0还是有很大改变的,这版本最大变化就是我们可以在watch 上构建原生APP。而1.0时代只能存放一些资源与界面文件,主要业务逻辑与代码需要在iPhone上执行。在watch os2.0上能够通过apple开放的框架api在watch自身驻留与运行。这样带来的好处就是app能启动的更快,运行的更流畅,而不需要每一次操作都通过watch和iPhone的蓝牙模块往返传递数据(蓝牙的带宽是硬伤)。与watch OS 1.0时一样,watch APP上包含呈现UI相关的StoryBoard和resource文件,没错,2.0仍然要在Storyboard中搭建界面,WatchKit Extension 中存放逻辑代码。

Update To Watch OS 2.0


        如果你的APP之前就支持了 Apple Watch,那么在watch OS 2.0上跑也是没问题的,但watch OS 2.0是一个独立的操作系统,和iPhone没关系,我们毕竟要与时俱进,所以,适配watch OS 2.0 吧。

       如果决定将watch 1.0 app迁移到2.0上,必须得评估这两者完全不同的系统架构对1.0版本app架构设计带来的影响。以下问题需要慎重考虑:

1.app是否严重依赖iCloud?WatchOS2中,WatchKit Extension不再被允许直接访问iCloud。此类功能都必须由配对的iOS应用完成,再传输给手表。

2.watch应用是否依赖配对的iOS应用的数据?手机上创建的数据,必须传输到手表上供手表应用使用;手表应用更改后,必须传回手机,供其备份。纵然AppleWatch有提供传输的帮助,这里也必须更新相关的数据处理代码已支持数据同步。这里,可以考虑异步同步数据,手表和手机都连接到一个共享的服务器,通过服务器来同步数据。

3.是否要支持早期的Apple Watch版本?如果要支持初代WatchKit和WatchOS2,那么我们需要有不同的target并编译产生不同的可执行文件。这是因为watchos1.0与watch os2.0是两个完全不同的系统架构,共享代码远比分开编译target的代价大的多。

如果已经决定将watch 1.0 app迁移到2.0上:

      首先,保存你的所有Watch OS 1.0的文件,作为备份。毕竟大量的业务逻辑代码是可以复用的,目前看来,我们需要修改的只是通信机制与网络部分,以及你想要添加的Watch OS 2.0的一些新功能。

      然后,删除Watch OS 1.0的Target以及所有的文件,创建Watch OS 2.0 Target,记得要选上Notification Scene、Glance Scene、Complication。

       最后,将你之前备份的Watch OS 1.0的文件拷贝到现在的2.0中,当然不要无脑拷贝!!!

与 iOS App 的通信

       在 1.0 时,我们与Host App的通信通常是用App Group,在 2.0,苹果为我们提供了Watch Connectivity Framework来进行经过配对的watch和iPhone的数据交换,该框架可以后台传输和前台传输。watch 已经不再是 Host App的附属,用App Group通信显然已经过时。

       WatchConnectivity Framework提供了一个WCSession对象,我们要通过WCSession可以进行数据传输。

1.建立WCSession

在watch extention端和iphone端都要先建立默认WCSession对象,指定委托,并加以激活。

OBJECTIVE-C

if([WCSessionisSupported]) {

WCSession*session= [WCSessiondefaultSession];

session.delegate=self;

[sessionactivateSession];

}

SWIFT

ifWCSession.isSupported() {

letsession=WCSession.defaultSession()

session.delegate=self

session.activateSession()

}

WCSessionDelegate

管理状态变化

- sessionReachabilityDidChange:

接收上下文数据

- session:didReceiveApplicationContext:

接收即时消息

- session:didReceiveMessage:

- session:didReceiveMessage:replyHandler:

- session:didReceiveMessageData:

- session:didReceiveMessageData:replyHandler:

管理数据字典传输

- session:didReceiveUserInfo:

- session:didFinishUserInfoTransfer:error:

管理文件传输

- session:didReceiveFile:

- session:didFinishFileTransfer:error:

2.连接状态

    2.1判断连接状态

       在传输数据时需要判断watch 和 iPhone的连接状态,WCSession属性里提供了如下状态:已经配对(paired)、watch应用已经安装(watchAppInstalled)、两者连接相通(reachable)。当watch已经配对且watch端应用安装好时,可以进行后台传输数据;当两者连接相通时,可以直接进行前台传输。

    2.2连接状态改变回调

       指定委托后,就可以在连接状态改变时做出相对反应。当配对或应用安装发生变化时 (paired or watchAppInstalled),会调用sessionWatchStateDidChange:method。当即时连接变化时(reachable),会调用sessionReachabilityDidChange:method。我们要根据需要自己在指定的委托中添加上述需要处理的函数。

网络请求

关于watch 上的网络请求,可以分为两种方式:

1.watch 自主发起网络请求

2.watch 向 iOS App 发送请求信号,由 iOS App来请求网络,然后通WCSession将数据传输给watch。

       显然第二种方式不符合苹果在watch OS 2.0上做的改变。

       目前苹果允许我们在watch上使用NSURLSession进行网络请求,我们可以规规矩矩的使用NSURLSession,完全没问题。但是,你一定会想,我们可以在watch 上使用AFNetworking吗?试一下~

       会提示找不到<SystemConfiguration/SystemConfiguration.h>,因为在watch os 2 中,<SystemConfiguration/SystemConfiguration.h>是不可用的 system framework,文档中是这样说明的:

Networking

Support for network-based operations includes the following technologies:

WatchKit extensions can access the network directly using an NSURLSession object. WatchKit extensions have full access to the NSURLSession capabilities, including the ability to download files in the background. For information on how to use this class, see URL Loading System Programming Guide. The Watch Connectivity framework supports bidirectional communication between your Watch app and iOS app. Use this framework to coordinate activities between the two apps. For more information, see Communicating with Your Companion iOS App.

       但是,如果你使用的是最新的AFNetworking的话,也是没问题的,在AFNetworking 2.6 已经做了对apple watch的适配,在3.0已经废弃了基于NSURLConnection的API的内部实现,由NSURLSession代替,所以,在watch上使用AFNetworking也是没问题的.参考链接:

http://www.jianshu.com/p/047463a7ce9b

图片的处理

WatchKit 提供的装载图片的容器叫WKInterfaceGroup ,他有自己的一套设置图片的方法

- (void)setBackgroundColor:(nullableUIColor*)color;

- (void)setBackgroundImage:(nullableUIImage*)image;

- (void)setBackgroundImageData:(nullableNSData*)imageData;

- (void)setBackgroundImageNamed:(nullableNSString*)imageName;

       目前为止,SDWebImage还没有对watch os 适配,不可用。所以我们需要自己下载图片自己渲染自己做缓存。

       关于WKInterfaceDevice中的imageCache在watch OS 2.0 已经不能使用了。

       最后再说下Menu icon 这个坑,watch 的自定义表盘可以让我们的App展示在上面,于是需要我们配一张图在plist里面,这个图的要求:

1. 设置线条粗心至少为4像素来保证他们能够清晰的显示根据不同设备的大小和icon的复杂度使用对应合适的线宽度.

2. 必须使用PNG格式

3. 背景必须透明


欢迎订阅我的个人主页~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容