 Watch开发学习 (四)

WatchOS App架构与更新 (WatchOS 2)

前言

WatchOS2出现后,改变了很多东西:

  • 其中最大的改变也是最充满想象力的改变是将WatchKit Extension直接从iPhone移植到了AppleWatch上,所以这就给了AppleWatch原生App开发的基础。
  • 同时iOS APP与Watch App沟通也有一个Aplle推出的WatchConnectivityframework,其中提供了一个类WCSession作为两者沟通桥梁,既可以传输String,Dictionary,Array等,还可以共享文件。
  • 而且WatchOS2提供了NSUrlSession拉取网络数据,这表示WatchAPP可以独立访问网络,加之其可以连接WIFI的硬件,其实Watch对iPhone的依赖性减弱了很多
  • WatchOS2中不能使用iCloud,只能发还数据给iPhone,iOS再使用iCloud

WatchOS 2的架构


从上面的图中,可以很明显地看出,苹果把原来运行在 iPhone 手机上的 WatchKit Extension 移到 Apple Watch 中了。这将直接带来如下改变:原来只存放一些资源和 Storyboard 的 Watch App,现在程序的业务逻辑部分(也就是代码执行部分)也被放到 Watch App 中。这样的话,程序给用户的体验会更好,Watch App 的运行可以完全独立于 iPhone 了。值得注意的是,Apple Watch 2 中还支持 WiFi,所以 Apple Watch 可以通过 WiFi,直接获取一些网络数据等。并且 Apple Watch 无法处理的一些业务,可以通过 Connectivity 框架,请求 iPhone 进行处理,并将结果返回给 Apple Watch。

WatchOS 2的生命周期

用户对AppleWatch的操作控制了你的App的启动和生命周期。用户可以通过Home界面,Glance界面和表盘的Complication与通知Notification启动你的APP。每一个这样的操作都会启动你的WatchApp 和WatchAKit Extension。自此开始WatchAPP和WatchKit Extension开始传递信息和工作,直到用户停止与你WatchAPP的交互,这时候iOS会挂起WatchKit Extension。

下图是WatchApp Launching的过程
以及一个InterfaceController的生命周期
在ExtensionDelegate中会有WatchAPP的状态监听
WatchAPP的状态变化如下图

Watch Connectivity

你可以通过WatchConnectivityframework来实现watch与配对iPhone上的文件和数据的来回传输。如果这两个apps是在前台上运行,则通信是实时的,否则通信会被转移到后台,直至接收数据的一方启动进入前台的时候才转移回来。

在这个新框架的主要成员是WCSession,它负责处理了两个设备之间的所有通信。你不需要自己去创建这个类的实例对象,只需要使用defaultSession单例对象就可以了。

要启动和运行WCSession,你需要指定一个对象去遵从WCSessionDelegate,分配给WCSession的委托属性并调用activateSession()。如果你打算频繁的使用WatchConnectivity的话,我强烈建议你尽可能在apps的早期生命周期完成这个设置。

这里贴出WCSession的一些代码和解释:(只支持iOS9及更新版本,在ContainerApp和Extension中使用一致)
@interface WCSession : NSObject

硬件是否支持:+ (BOOL)isSupported;

单例对象:+ (WCSession *)defaultSession;

拥有的Delegate:@property (nonatomic, weak, nullable) id <WCSessionDelegate> delegate;(在这里需要)

delegate中使用较多的有:(接收信息后的一些处理)
- (void)session:(WCSession * ) session didReceiveMessage:(NSDictionary<NSString * , id> *)message;
- (void)session:(WCSession * )session didReceiveMessage:(NSDictionary<NSString * , id> * )message replyHandler:(void(^)(NSDictionary<NSString * , id> *replyMessage))replyHandler;

激活对象:- (void)activateSession;(在APP生命周期中激活越早越好)

发送信息:
- (void)sendMessage:(NSDictionary<NSString *, id> *)message replyHandler:(nullable void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;
- (void)sendMessageData:(NSData *)data replyHandler:(nullable void (^)(NSData *replyMessageData))replyHandler errorHandler:(nullable void (^)(NSError *error))errorHandler;

一般的使用过程:
if ([WCSession isSupported]) { WCSession *session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; } //接下来开始send或者receive

动画(Animation)

WatchKit还可以用之前那样原始方式通过轮询处理好的图片组去运行动画,不过WKInterfaceController现在通过animateWithDuration(_:animations:)提供了更接近于iOS的基础动画。只需要持续时间和block,就可以在设定的持续时间里执行block里面的动画。例如:

animateWithDuration(1){()->Voidin
self.label.setHorizontalAlignment(.Left)
self.label.setAlpha(0)
}

你可以通过更改以下WKInterfaceObject属性来设置动画:

  • 透明度
  • 宽高
  • 垂直和水平位置
  • 背景颜色
  • 布局组中的插入

访问更多硬件(MoreAccessToTheHardWare)

watchOS2提供了很多硬件设备和传感器,包括电子表冠DigitalCrown,振动引擎TapticEngine,心率传感器heartratesensor,加速计accelerometer以及麦克风microphone等。

新接口对象(NewInterfaceObjects)

苹果在这个版本的WatchKit里推出了一个全新的接口对象:WKInterfacePicker,它是个通过电子表冠来进行交互的滚动列表。在WKInterfacePicker中的物品(item)可以是文本、图像、或是图文混合。当用户选择了里面的物品,WatchKit调用WKInterfacePicker中的方法来传递选择了的索引。

WKInterfacePicker可以通过三种不同风格来展示:

  • List:把物品垂直排列显示的列表。
  • Stacked:将要展示的物品转为一叠卡片通过滚动电子表冠来一张张显示。
  • ImageSequence:从图像序列中抽出单个图像展示。

说到接口控制器,WKInterfaceController现在提供了让你直接弹出alerts和actionsheets的方法。

调用presentAlertControllerWithTitle(_:message:preferredStyle:actions:)在当前的接口控制器弹出一个alert或是actionsheet。根据你设定的preferredStyle参数来显示出不同的样式。其中的actions参数是包含WKAlertAction实例的数组,通过用户点击相应的button来执行它自身提供的block。

自定义Widgets

自定义数字附件是围绕家族概念构建的,每个家族提供一个或多个模板,你可以把你的数字附件子类化后,再通过这些模板实现。

有五种直接实现的数字附件:

  • Modular:这家族有small,large两个分类,并且他们都能通过模块watch界面上看到。
  • Circular:只有small分类,在简约watch界面上看到。
  • Utilitarian:和Modular一样有small,large两款在实用watch界面上看到.


如果你没有AppleWatch或是对watch界面类型不熟悉可以看指南了解,里面也提到过怎么实现Custom Complications(自定义数字附件)。也可以从watchOS 2 Transition Guide的Providing Custom Complications部分查看更多关于编译Custom Complications的细节。

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

推荐阅读更多精彩内容

  • Watch应用的数据传输-与iPhone以及网络(WatchOS 1) iPhone App、WatchKit E...
    BBH_Life阅读 772评论 0 1
  • 昨天去学校给儿子开了初中一年级的第一次家长会。期中考试刚过,这个家长会看来是总结会喽! 匆匆在家长会开始前赶到学校...
    云紫烟阅读 174评论 2 1
  • 上班折腾上电,终于到晚上有了进展。回想问题根源,外界条件不够好,没有样片供参考,更无面包板一说。积累第一手经验,不...
    NemoX阅读 143评论 0 0
  • 还给我,上个圣诞我买给你的手表。 还给你,去年暑假你送给我的外套。 烧掉那年你对我表白时送的小城堡。 扔掉去年一起...
    XIZHOU西舟阅读 307评论 20 6
  • Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请...
    ayvytr阅读 1,090评论 0 0