
第一部分 WatchKit基础知识
第1章 WatchKit简介
WatchKit是苹果公司为开发Apple Watch而发布的新的框架。由于目前WatchKit SDK还是测试版本,苹果公司也正在不断地完善SDK的新特性,相信等到Apple Watch发售时,WatchKit正式版的功能将会更加完整。然而,我们还是要为开发人员制定学习计划的。
学习目标
一、了解WatchKit应用程序架构。
二、了解Watch App用户交互体验的种类。
三、了解开发Apple Watch的装备。
下面,我们先来了解WatchKit相关知识,为Apple Watch开发奠定一定的基础。
1.1 WatchKit应用程序架构
Apple Watch应用是iPhone应用的一部分,它的存在就像iOS应用扩展一样,你可以把它看作单独的Watch应用。但是每一个Apple Watch App和iOS Extension一样仍然需要依赖一个主体App, Apple Watch App的运行是由两部分相互结合进行工作的(Watch App和WatchKit Extension):
*Watch App部分位于用户的Apple Watch上,Apple Watch主要包含用户界面元素文件(Storyboard文件和静态的图片文件)和处理用户的输入行为。并不会真正在Apple Watch中运行代码。换句话说,Apple Watch仅是一个“视图”容器。
*WatchKit Extension部分位于用户的iPhone安装对应的App上,iPhone App包含所有的逻辑代码用于响应用户在Apple Watch上产生的诸如应用启动、点击按钮、滑动滑杆等行为。换言之,iPhone包含了控制器和模型。
这两个部分之间就是通过WatchKit进行连接通讯的。有趣的是,Apple Watch和iPhone的这种交互是在幕后自动完成的。你要做的工作只是在Storyboard中设置好UI的Outlet,其他的事都由WatchKit SDK在幕后通过蓝牙技术自动进行交互。即使iPhone和Apple Watch是两个独立的设备,你也只需要关注你本地的代码以及Outlet的连接情况,这真是一件很酷的事情。也就是说,WatchKit App仅包含Storyboard和用户界面相关资源,而负责应用逻辑、更新界面的代码位于WatchKit extension。
为了程序界面的正常使用,这两部分需要一起运行。用户与应用程序交互的典型步骤如下:
*用户与WatchKit应用程序交互。
*WatchKit应用程序分析交互情况,并选择将被管理的Storyboard。
*WatchKit与iPhone通讯,以运行WatchKit扩展。
*WatchKit Extension初始化并创建需要提供给WatchKit应用程序Storyboard使用的对象。
*Storyboard根据WatchKit Extension创建的对象,生成scene,并将其显示到Apple Watch中。
*WatchKit应用程序和WatchKit将会共享一些信息,直到用户停止使用WatchKit应用程序。此时,iOS将使WatchKit Extension休眠,直到有新的用户交互。
使用我们传统的MVC(Model-View-Controller)模式思想,你可以将Watch App作为View部分,Model和Controller在iPhone部分。接下来,我们来看看在手表上应用与用户交互的方式有哪些。
1.2 用户交互的种类
我们可以构建的三种Watch App,分别是Glance(速览)、Notification(通知)和WatchKit App。Glance和Notification功能还是非常酷的。
1.2.1 Glance
Glance的用途大家应该比较熟悉了,它是专门用来快速浏览信息的视图界面。它能让用户很方便的(比如一抬手)就能看到自己感兴趣的事物的提醒通知,比如有人在Twitter中提及了你或者比特币现在的价位等。所有信息在一屏内显示,Glances页面不可以滑动,它只能用于读取数据,不能用于编辑修改数据,而且界面元素无法交互。用户在Glance唯一能做的交互就是启动主体应用程序,用户点击任意位置都会开启Watch的主应用。如果你对展示的信息感兴趣并想查看更多,你只能打开主体应用查看更多的信息。Glance将一些用户关注度高的重要信息,通过Glance Interface提供的页面展示给用户,这有点像iOS8中的Today Extension。
1.2.2 Notification
顾名思义就是通知,它是在原有iOS项目本地和远程通知的基础上自定义的通知。可以添加图片,添加时间处理。比如一个邀请的通知,可以添加两个按钮——一个接受按钮,一个拒绝按钮,用于处理接受和拒绝操作。Apple Watch SDK已经帮我们实现了这样一个场景。你只需要处理回调就可以了。
它将一些时效性高、对用户重要的信息推送给用户。也可通过推送提供一些简易操作,以方便用户。
Apple Watch应用的通知内容是与iPhone应用同步显示的,但分为ShortLook(短时查看)和LongLook(长时查看)两类进行展现。当某iOS应用的本地或远程通知抵达用户的iPhone后,iOS将会自行判断显示该通知的设备(iPhone或Apple Watch),对于发送到Apple Watch的通知来说,系统首先会通过Taptic Engine触觉反馈提示用户,如果用户抬起手腕选择查看通知,系统将会首先展示该通知的短时概览(ShortLook),如果用户不放下手腕暂停一会后,Apple Watch将切换进入LongLook模式。而我们观察Storyboard可知,通知是分静态和动态两种的,这里特别强调,不要想当然地认为ShortLook就对应的是静态通知,ShortLook的通知目前在模拟器是无法测试的,Storyboard配置的静态与动态通知都针对LongLook通知而定,静态标签内容部分来自Notification payload,动态内容部分则来自于自定义WKUserNotificationInterfaceController类。
iOS系统无法定义一个Apple Watch专用的通知,这意味着通知必然是同时发送到iPhone与Apple Watch的,只不过可以针对Apple Watch开发专属的动态通知功能。它的作用是提供一个的手表端快速使用的简化版本App。
在Glance和Notification这两种情形下,你都可以点击屏幕进入到对应的Watch App中,并且使用Handoff。你甚至可以将特定的View Controller作为Glance或Notification的内容发送给用户。
1.2.3 WatchKit App
Watch App是iOS App的一个子集,依赖于iPhone App提供的数据,可以在手表上展示内容。我们可以做一个当前应用在Apple Watch上的扩展,提供另外一个向用户展示的窗口。
它的界面分为两个部分——标题栏与内容frame。WatchKit App不是独立的应用,也就是说,在用户iPhone上运行的配对App必不可少,我们要构建的WatchKit App只是iPhone App的扩展,WatchKit App的安装和管理由iPhone App负责。WatchKit应用拥有iOS应用的完整用户界面。用户从主界面启动手表应用,来查看或处理数据。
Watch应用需要尽可能实现Apple Watch能够提供的所有交互动作。由于Watch应用的目的在于扩展iOS应用的功能,因此Watch应用和WatchKit应用扩展将被捆绑在一起,并且都会被打包进iOS应用包。如果用户有与iOS设备配对的Apple Watch,那么随着iOS应用的安装,系统将会提示用户安装相应的Watch应用。
虽然开发Apple Watch应用的WatchKit API与开发iOS应用的SDK有很多相似之处,但是仍然有一些性能方面的限制。所以开发者要将WatchKit集成到他们的应用中,需要注意以下几点:
*界面布局:Apple Watch应用的界面不支持AutoLayout,取而代之的是Apple已经介绍过的组(Group)布局方式。类似于Android的LinearLayout布局方式,可以支持控制水平和垂直方向的堆叠。
*自定义手势操作:Apple限制开发者只能使用设备默认提供的手势——滑动、点击和长按屏幕。
*图片限制:Apple Watch的应用中只能存储20MB的资源文件。Apple建议开发者将所有的图片文件都存储在Apple Watch应用程序包中,以减少从设备中获取图片的次数,从而降低性能。
*原生应用支持:开发者必须将他们的Apple Watch应用绑定在已有的iOS应用上。在Apple发布的公告中可得知目前还不支持能够完全独立在Apple Watch中运行的原生应用,但是Apple也在资料中暗示“2015年晚些时候会支持原生应用”。
1.3 开发Apple Watch的装备
*Xcode 6.2 beta:苹果公司首次发布的内置WatchKit SDK的Xcode版本。
*Swift:我们将会使用Swift语言来开发Apple Watch App,因此你需要一些Swift语言的开发经验。
*一些iOS开发经验
1.4 小结
这一章,我们介绍了WatchKit开发相关的一些基础知识,以及开发Apple Watch所需要的装备。接下来,让我们走进Apple Watch开发的大世界吧!