设计是一个非常有趣的词,有些人认为设计就是产品的外观。
但是,如果深入挖掘,设计其实关乎产品工作原理。
——乔布斯
AppleWatch 是由苹果公司创造的智能手表,TimCook 于 2014 年 9月9日在苹果公司官方发布会上宣布了这一消息。AppleWatch 是继 iPhone 和 iPad 之后苹果公司的又一力作,苹果公司希望借此改变可穿戴设备的规则(就像 iPhone 改变了智能手机,iPad 改变了平板一样)。
小编今天带大家了解 AppleWatch 程序的架构,以及 AppleWatch 是如何与iOS 程序联系起来的。最重要的是,你将写一个简单的 AppleWatch 程序,并将该程序安装至模拟器中。
Apple Watch 的规格
AppleWatch 使用了苹果公司自家定制的芯片(称为 S1)。AppleWatch 的背面是一个心律传感器,这是安装在陶瓷盖上的一组 LED 和光电二极管。除此之外,还有加速度传感器、WiFi、低功耗蓝牙(BLE)和 GPS。它使用磁力充电器进行无线充电(结合了来自MacBook 和 MacBook Pro 使用的 Magsafe 技术),通过磁力吸附在背面,然后进行感应充电。
目前 AppleWatch 有两种尺寸:
38mm Watch(小):分辨率为 272 像素 ×340 像素
42mm Watch(大):分辨率为 312 像素×390 像素
Apple Watch 的交互方式,有如下几种。
- 数码表冠(Digital Crown):通过对表冠的操作,可以滚动列表中的各项,也可以对图片进行缩放等。数码表冠还可以扮演 Home 按钮——按一下表冠,返回到主屏幕。
- 力感触控(Force Touch):利用一种压力敏感的触摸屏,可以感知点击(tap)和按压(press)的区别。
- 触觉引擎(Taptic Engine):是一个触觉反馈系统,用敲击手腕的方式提醒你相关通知,当旋转数码表冠时会发生震动。
获取开发工具
开发 AppleWatch 应用程序,需要 Xcode 6.3 或者更新的版本,可以从 MacAppStore 中通过下载获取。
Xcode 6.3 本文中的示例代码是用 Xcode 6.3 编写并测试的。
Xcode6.3 包含了WatchKit,该框架用来创建 AppleWatch 程序。另外,Xcode6.3中还有 AppleWatch 模拟器,通过该模拟器,你可以不用真实设备就能测试 AppleWatch 程序。
WatchKit 是什么? WatchKit 是一个框架(类似 iOS 开发中的一些框架,如 CoreLocation 或 MapKit 等),该框架包含了创建 Apple Watch 程序需要用到的所有类。
WatchKit 程序架构
要运行第三方的应用程序,AppleWatch 还需要 iPhone。一个AppleWatch 程序由两部分组成(技术上称为 bundle):
- 一个运行在 AppleWatch上的 WatchKit App
- 一个运行在 iPhone上的 WatchKit Extension
注意 Apple Watch 兼容的设备有:iPhone5、iPhone 5c、iPhone 5s、iPhone 6 和 iPhone 6 Plus,这些设备需要运行 iOS 8.3 或者更新的版本。
上图显示了两个 bundle 之间的关系。这两个 bundle 利用低功耗的蓝牙进行通信。WatchKit 框架封装了所有通信细节,这对于开发者来说是完全透明的。
WatchKitApp 仅包含创建 AppleWatch 程序所需的 storyboard 和相关资源;管理与 AppleWatch 程序交互的代码则位于 WatchKitExtension。
注意 WatchKit App 不包含任何源代码文件。所有代码的执行都由位于 iPhone中的 WatchKit Exten-sion 负责。
Apple Watch 程序的安装
由于 WatchKitApp 和 WatchKitExtension 之间是紧密结合的,所以这两个 bundle被打包在单个 iOS 程序 bundle 中。因此,要开发一个 AppleWatch程序,首先需要开发一个 iPhone 程序。
当用户安装包含有 WatchKit 和 WatchKitExtension 时,如果有成功配对可用的AppleWatch 时,会提示用户安装 WatchKitApp。当 WatchKitApp 成功安装至 AppleWatch 后,就可以直接在 AppleWatch主屏幕上启动它。
Apple Watch 与 iPhone 之间的交互
上图显示了WatchKitApp(运行在 AppleWatch中)是如何与 WatchKitExtension(运行在 iPhone 中)交互的。无论用户什么时候操作 WatchKitApp,所有的交互都是由WatchKitExtension 通过 WatchKit 框架进行处理的。WatchKit 框架使用低功耗蓝牙在 AppleWatch 和 iPhone 之间进行通信。作为 AppleWatch 开发者,不用考虑背后的实际运行原理。
Containing iOS App 通信
只有当 WatchKitApp 运行的时候,WatchKitExtension 才会运行,WatchKitExtension不支持后台运行。因此针对比较耗时的任务(例如获取位置数据或访问 Web 服务),建议向 containing iOS App发送请求,让 containing iOS App 执行相关任务。通过配置containing iOS App,就能在后台执行这些任务。
注意 在第2 章中将介绍如何将执行耗时任务的请求从 WatchKit Extension中发送到 containing iOSApp中。
Apple Watch 程序的类型
此次发布的 WatchKit,可以开发三种类型的 Apple Watch 程序。
- WatchKit App:这种类型的程序虽然运行在 Apple Watch 中,但与之交互的逻辑部分则运行在 iPhone上。
- Glance:在程序中,给用户提供了一种查看重要信息的补充方法。Glance 不支持用户交互——点击 glance 将启动 WatchKit App。
- Notification:显示从 iPhone 接收到的通知(包括本地通知和远程通知);程序可以定制通知的界面。
Hello, World!
现在已经学习了全部的基础知识,接下来是时候动手试一试了!闲话少说,首先确保已经安装了Xcode,然后就开始创建你的第一个Apple Watch 程序吧!
创建一个 iPhone 工程创建 Apple Watch 程序的第一步就是先创建一个 iPhone 程序。为此,按照如下步骤执行。
1 启动 Xcode,并选择 Single View Application 模板。
2 单击 Next。
3 将工程按照如下方法进行命名。
Product Name:HelloAppleWatch。
Organization Name:输入你的姓名或者公司名称。
Organization Identifier:一般来说,这是公司的反转域名(例如 com.example等)。Bundle Identifier 的格式是将组织名称和产品名称连接起来得到的一个字符串。如果要将此程序在 App Store上架,其 Bundle Identifier 必须是唯一的。
Language:Swift
Devices:iPhone
4 单击 Next。
5 选择工程的存放路径,然后单击 Create。
工程创建成功之后,看到的 Xcode 界面如下图。
至此,描述了如何创建一个 iPhone 程序。在接下来的章节中,会学习到如何将WatchKit Extension 和 WatchKit App 添加到工程中。
添加一个 WatchKit App Target
要将 WatchKit Extension 和 WatchKit App 添加到工程中,需要按照下面的步骤添加一个 target。
1.在 Xcode 中,选择 File|New|Target...。
2.在左侧 iOS 中,选择 Apple Watch,然后选择右侧的 WatchKitApp 模板,并单击 Next。
3.会弹出如下图所示的一个对话框,大多数内容无须改动,只需记得不要勾选Include Notification Scene,这样可以让 WatchKit 工程尽可能简单,最后单击Finish。
接下来,将提示你激活一个新的 scheme:刚刚创建的 HelloAppleWatch WatchKitApp。激活该 scheme,有利于后续更加方便地调试 AppleWatch程序。
4.单击 Activate。
至此,Xcode 工程看起来是这样的。
特别留意一下图中被高亮显示的三个组:
- HelloAppleWatch:这个 iOS App 是WatchKit App的容器(container)。
- HelloAppleWatch WatchKit Extension:运行在 iPhone中的 WatchKit Extension。
- HelloAppleWatch WatchKit App:运行在 Apple Watch中的 WatchKit App。
在HelloAppleWatch WatchKit App组中包含了一个Interface.storyboard文件。这是一个 storyboard 文件,其中包含了你的 Apple Watch App 的用户界面。另外,在HelloAppleWatch WatchKit Extension 组中,包含了一个InterfaceController.swift文件,当用户与 Apple Watch 程序交互时,会执行这个文件中的代码。
检查 Storyboard
下 面 我 们 来 看 看 HelloAppleWatch WatchKit App 组中的 Interface.storyboard 文件。选中该文件,会自动使用 Storyboard Editor 打开这个文件。此时,文件中包含了唯一的一个Interface Controller,这类似于iPhone程序中的ViewController。当用户在AppleWatch中启动程序时,main storyboard中的初始化Interface Controller会被加载。
当选中Interface Controller时,可以看到在Identity Inspector窗口中的Class属性字段已经连接到InterfaceController类上。
WatchKit App 的生命周期
InterfaceController类存储在名为InterfaceController.swift的文件中。该文件位于HelloAppleWatch WatchKit Extension组中InterfaceController类的内容如下。
InterfaceController 类继承自WKInterfaceController 类。在继承 WKInterfaceController 类时,可以重写许多处理 Interface Controller 生命周期的方法:
- init:用来初始化 Interface Controller 对象。需要注意的是 Xcode 默认不会创建出这个方法。
- awakeWithContext:当 Interface Controller 首次显示的时候会调用该方法。它主要用于对象的初始化、UI 的更新等。
- willActivate:当用户界面展现给用户时,该方法会被调用。它主要用于用户界面更新、时间配置等。
- didDeactivate:当用户想要退出程序,停止 Apple Watch 的交互时,会调用该方法。它用于资源的清理、数据的保存等。
修改 Interface Controller至此,我们已经讨论了工程中的一些细节,下面我们做一些比较直观的事情!找到Interface.storyboard 文件的 Interface Controller,并添加一个 Label 控件(从 Object Library)进去。
双击 Label 控件,输入 Hello, World!
在模拟器上运行程序
至此,是时候在iPhone模拟器上测试程序了。在 Xcode中,首先需要将scheme设置为HelloAppleWatch WatchKit App。同时,确保选中iPhone6模拟器。完成这些操作之后,按下Command-R 将程序安装到iPhone模拟器中。
当iPhone模拟器启动完成之后,你的iPhone程序将被安装至iPhone6模拟器中,但是还不会启动运行。因为当前选择的是 HelloAppleWatch WatchKit App scheme,所以只有 WatchKit App 运行起来。如果没有看到 Apple Watch 模拟器,可以通过Hardware|External Displays 选一个 watch 尺寸。
现在应该可以看到 Apple Watch 模拟器把程序运行起来了。
小结
本文中,学习了开发AppleWatch的基本知识。首先了解了AppleWatch的规格,然后学习了第三方程序的架构。最重要的是,AppleWatch 程序的大量处理工作都是在iPhone中完成的。之所以这样做,是因为这样可以减少AppleWatch的工作负荷,大幅度提升watch的电池性能,电池的性能是穿戴设备非常致命的一个难题。
还写了你的第一个AppleWatch 程序,并在 AppleWatch 模拟器上进行了测试。
若要学习更多不同的控件视图(这些控件视图可以用来构建 AppleWatch程序的UI,包括containingiOSApp和AppleWatch程序之间如何通信等主题)请见《从iOS到Apple Watch:用WatchKit创建新型可穿戴应用》