WatchOS 2.0分析


    • 前言
    • Watch OS 2的新变化
      • 网络请求的变化
      • SDK的Framework变动
      • Extension Delegate
      • 与IOS App通信
      • 数据管理
    • 新增的特性
      • 视频播放
      • 音频录制
      • 音频播放
      • Complication
      • openSystemURL
      • 使用钥匙链存储安全敏感的信息
      • 其他
    • 总结

前言

在上一期AppleWatch开发初探里,我们知道虽然AppleWatch是一个很优秀的产品,但是它的软件远没有成熟,在AppleWatch刚刚发布的这6个月里,它的表现有点波澜不惊,笔者割肾买的AppleWatch,一度只拿来当闹钟,这让人很心痛。
随着WatchOS 2的正式发布,关注Apple Watch的广大开发者们终于可以松了一口气,WatchOS做出了足够多的调整,让它可以孕育更强大的应用。
下面我将从老架构的新变化和新增的特性两方面介绍WatchOS 2。

Watch OS 2的新变化

WatchOS 2开放了更丰富的功能,在WatchOS 2上,应用架构已经有了极大的不同,App Extension不在运行在iPhone上,而是直接运行在手表里。如图:

(目前实测,AppleWatch并没有直接连接Wifi。)
App Extension迁移到了Apple Watch上,这使应用的开发方式发生了很大改变。

网络请求的变化

WatchOS 2随着iOS 9 一起推出,它使用NSURLSession管理网络请求,跟iOS 9 一样,开发者需要配置App Transport Security(下文简称ATS)。

SDK的Framework变动

以前的App Extension 是运行在iPhone上的,他可以使用所有iOS SDK的Framework,现在需要改用到Watch OS SDK的Framework,大部分的Framwork还可以继续用,但是有少数Framework不能使用了。
如果你的应用用了CloudKit,或者与iOS App共享了数据,那就必须要迁移了。
可用的Framework可查看此文档。

Extension Delegate

在WatchOS 1上,App Extension使用第一个InterfaceController管理应用的生命周期和处理通知task。而在WatchOS 2上,WatchKit引入了WKExtensionDelegate协议来处理这些,它相当于iOS App的AppDelegate。

  • Watch app 的生命周期

如果已有的应用没有在info.plist上指定WKExtensionDelegate,则App Extension依然会运行在iPhone上,不能享受WatchOS 2的种种便利。

与IOS App通信


  1. 资源共享的方式分享数据不再适用。
  2. 通过DarwinNotification实现的跨进程通信不再适用。
  3. 在之前Apple提供了openParentApplication()进行通信,现在使用Watch Connectivity framework进行替代。

( That framework provides bidirectional communications between the two processes and lets you transfer data and files in the foreground or background. )
在IOS和App Extension分别在应用启动时为WCSession设置WCSessionDelegate,可以判断连接状态,进行更灵活的数据传输,传输可以在应用前台或者是在后台进行,传输的数据可以支持String、NSData、File等类型。

数据管理

现在不能在iOS App与 App Extension上共享数据,也不能使用CloudKit来管理了,应用管理数据的方式需要保存在Watch上,如果要用到iCloud管理数据,使用Watch Connectivity与手机进行数据交互,在iOS App上使用CloudKit。另外,在新的Extension里不能使用像GPS定位的API,想要利用它,通过iOS App定位,Watch Connectivity交互的方式变通实现。

新增的特性

WatchOS 2上,WatchKit开放了更多的功能,对音视频媒体的支持,让Watch App的娱乐性能有了极大的提升,能适应更多的应用场景。下面是新增的特性:

视频播放

视频播放通过presentMediaPlayerControllerWithURL()API进行播放,或者通过WKInterfaceMovie控件进行播放,不过它们的播放方式最终都是present一个新的InterfaceController进行的。
值得注意的一点是:传入的URL既可以是本地资源也可以是线上资源,如果是线上资源,那么不管你的App Extension 的info.plist是否关闭了ATS,你的资源都应该使用符合ATS的https协议。笔者猜测可能是因为present了一个系统的WatchApp,不沿用开发者的设置。

Apple并没有格式进行限制,但建议的格式如下:

音频应该以 32 kbps 速率进行编码。
视频码率为 140-160 kbps 的范围。
视频分辨率应该是 272 x 340。
媒体文件应相对较短。例如,避免超过 30 秒。

音频录制

现在新的WatchOS 支持音频录制,通过presentAudioRecorderControllerWithOutputURL()API实现,它只支持.wav, .mp4,.m4a三种格式。

音频播放

借助蓝牙设备,Watch App可以控制播放音乐,这需要为Watch App指定UIBackgroundModes,并且设置shared group container使音乐文件可以同时被Watch App 和 App Extension。
请参考这篇文档的Playing Extended Audio Content 以及Making Media Files Accessible to Your Watch App两章节。

Complication

Complication即表盘小部件,可以显示像电量啦、天气啦等等,以前是不允许定制的,现在可以自定义了。

  • Complication表盘小部件

自定义的数据通过CLKComplicationDataSource协议定义,开发者可以对各式表盘的部件进行适配,为TimeTravel(时间旅行)进行支持。Complication的入口同样要在info.plist指定。
对于Complication的开发,这里有一篇文章可以参考:
WWDC15 Session笔记 - 30 分钟开发一个简单的 watchOS 2 app

openSystemURL

通过WKExtension.openSystemURL()可以实现发短信打电话的功能,也可以用它来打开PassBook的url,它没有iOS里那么灵活,只有有限的功能。

使用钥匙链存储安全敏感的信息

通过kSecAttrAccessibleWhenUnlocked存储进钥匙链的信息,可以保证Apple Watch不戴在用户手上时,应用无法读取数据,这方便了灵活的布置页面。

let secret = "SomeSecretInformation"
if let secretData = secret.dataUsingEncoding(NSUnicodeStringEncoding) {
    let attributes: [NSString: NSObject] = [
        kSecClass: kSecClassGenericPassword,
        kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked,
        kSecAttrService: "myservice",
        kSecAttrAccount: "account name",
        kSecValueData: secretData ]
    SecItemAdd(attributes, nil)
}

其他

增加了picker控件,效果类似于iOS上的PickerView。增加了Alert和ActionSheet的API。

总结

WatchOS 2对于WatchOS 1的改进的两部分:第一部分应用架构的变化——把Watch App Extension挪移到AppleWatch上,这引发了一些数据使用和共享的问题,Watch Connectivity框架被引入解决这个问题;第二部分新特性,WatchOS 1少的可怜的API为人诟病,现在开放了更多的特性,特别是音频视频的支持,使Watch App能做的事更多。可以预见,随着它的发布,AppleWatch上的应用会迎来一波质的飞越。

你可能感兴趣的:(ios)