第四部分:创建Homes和添加Accessories
第五部分:观察HomeKit数据库的变化
第六部分:访问服务和特性
第七部分:测试HomeKitApp
第八部分:创建动作集(ActionSets)和触发器(Triggers)
第九部分:用户管理
该文档旨在帮你编写HomeKitapp。HomeKit库是用来沟通和控制家庭自动化配件的,这些家庭自动化配件都支持苹果的HomeKitAccessoryProtocol。HomeKit应用程序可让
用户发现兼容配件并配置它们。用户可以创建一些action来控制智能配件(例如恒温或者光线强弱),对其进行分组,并且可以通过Siri触发。HomeKit对象被存储在用户iOS设备的数据库中,并且通过iCloud还可以同步到其他iOS设备。HomeKit支持远程访问智能配件,并支持多个用户设备和多个用户。HomeKit还对用户的安全和隐私做了处理。
另请参阅
以下资源提供了更多关于创建HomeKit应用程序的信息:
设置
为了完成本文档中所有步骤,你需要:
当你成功地完成了之前的任务后,General面板中Team弹出菜单中的错误信息和问题修复按钮将会消失。代码签名配置被成功创建后会展示下方的General面板。
启用HomeKit
启用HomeKit的步骤如下:
下载HomeKitAccessorySimulator
无需为了开发Homekit应用程序而购买硬件产品。你可以使HomeKitAccessorySimulator来测试HomeKitapp和模拟配件设备之间的通信。HomeKitAccessorySimulator不是和Xcode一起发布的。
下载HomeKitAccessorySimulator步骤如下:
HomeKit对象被保存在一个可以共享的HomeKit数据库里,它可以通过HomeKit框架被多个应英程序访问。所有HomeKit调用的方法都是异步写入的,并且这些方法都包含一个完成处理后的参数。如果这个方法处理成功了,你的应用将会在完成处理函数里更新本地对象。应用程序启动时,HomeKit对象发生改变的并不能收到代理回调法,只能接受处理完成后的回调函数。
对象命名规则
HomeKit对象的名字,例如home、room和zone对象都可以被Siri识别,这一点已经在文档中指出。以下几点是HomeKit对象的命名规则:
创建Homes
在Home中增加一个Room
在else语句中,写入代码更新应用程序的视图。
发现配件
发现home中的配件
1.在你的类接口中添加配件浏览器委托协议,并且添加一个配件浏览器属性。代码如下:
用你自己的类名代替EditHomeViewController
2.创建配件浏览器对象,并设置它的代理
3.开始搜寻配件
4.将找到的配件添加到你的收藏里
5.停止搜寻配件
为Home和room添加配件(Accessory)
更改配件名称
为Homes和Room添加Bridge(桥接口)
创建分区
HomeKit代理方法
观察Homes集合的改变
观察homes的变化
1.在你的类接口中添加HMHomeManagerDelegate代理和homeManager属性。代码如下:
2.创建homemanager对象并设置其代理
视图控制器注册更改通知并且执行适当的操作。
观察个别home的变化
展示home信息的视图控制器应该成为home对象的代理,并且当home发生改变时更新视图控制器的视图。
观察特定home对象的改变
1.在类接口中添加home代理协议。
2.设置配件代理
观察配件的变化
观察个别配件的变化
2.设置配件的代理
如果你展示了配件的服务状态和特性,那么请执行以下代理方法来相应地更新其视图:
获得配件的服务和属性
重要:不要暴露匿名服务-比如固件升级服务-给用户
NSString*serviceType=service.serviceType;
苹果定义了一些服务类型,并能被Siri识别:
改变服务名称
访问特性的值
特性代表了一个服务的一个参数,它要么是只读、可读写或者只写。它提供了这个参数可能的值的信息,比如,一个布尔或者一个范围值。恒温器中的温度就是只读的,而目标温度又是可读写的。一个执行某个任务的命令且不要求任何返回-比如播放一段声音或者闪烁一下灯光来确认某个配件-可能就是只写的。
苹果定义了一些特性的类型,并能被Siri识别:
比如,对于一个车库开门器来说,目标状态就是打开或者关闭。对于一个锁来说,目标状态又是上锁和未上锁。
在if语句块中,加入你的代码以更新app的视图。
不要以为函数调用完成就意味着写入成功,实际上只有在当完成回调执行并没有错误产生时才表示写入成功。比如,直到一个开关的特性改变之前都不要改变这个开关的状态。在if语句块中,加入你的代码,以更新app的视图。
创建服务组
和配件类似,代理方法在别的app改变服务组时也会被调用。如果你的app使用了服务组,请阅读HMHomeDelegateProtocolReference文档,获悉你应该实现哪些方法以观察这些变化。
如果你没有智能电器(智能配件),你可以使用HomeKitAccessroySimulator来模拟home中的智能电器。每个模拟配件都拥有服务和特性,你可以从你的App当中控制它。你的App在HomeKit数据库中创建对象和关系。它可以创建home布局,可以添加新的配件到模拟的home环境当中,最后向home中的每个房间添加智能配件。然后,你的app就能控制这些在HomeKitAccessorySimulator展示的模拟智能配件了。为了使用HomeKitAccessorySimulator,请在iOS模拟器中运行你的应用程序,或者使用Xcode在iOS设备上运行应用程序。
添加智能电器(配件)
使用HomeKitAccessorySimulator来添加智能电器到模拟网络中。
向网络中添加智能电器配件,请按照下面的步骤添加:
4.点击完成
如果想删除一个智能电器,请选择一个智能电器然后点击键盘上的Delete键。
向智能电器(配件)中添加服务
一个智能电器需要一项服务和特性,你可以从app控制它。从预定义了服务列表中选择一项服务,并自定义特性。
按照下面步骤向智能电器中添加服务
该配件的服务信息会展示在一个详情界面中。
注意:所有智能电器都有一个AccessoryInformation,显示在所有其他服务的下方。你可以向这个AccessoryInformation服务添加特性,但你不能删除默认的特性。
2.点击添加服务(AddService),并从弹出视图中选择一个服务类型。
向服务中添加特性
你可以向服务中添加预定义的特性,或者自定义的特性。每种特性你都只能添加一个。
按照下面的步骤向服务中添加特性:
点击特性右边的减号来删除一个特性。如果特性右边并没有减号显示,这说明这个特性对这个服务来说是必须的。比如,你可以删除电灯服务中的色彩(Hue),饱和度(Saturation)和亮度(Brightness),但是你不可以删除开关特性。
通过你的app向家庭中添加智能电器(配件)
在你通过HomeKitAccessorySimulator创建了一个智能电器后,运行你的App然后添加一个新的智能电器到你的家庭。
如何配对家庭中的智能电器:
3.在接下来显示的AddHomeKitAccessory对话框中,输入智能电器的setupcode然后点击Add。
在HomeKitAccessorySimulator,setupcode显示在详情界面智能电器名称下。
控制智能电器(配件)
在HomeKitAccessorySimulator中,你可以获得智能电器的服务,并在其他HomeKitApp中设置服务的特性值来模拟控制这个智能电器,或者手动地模拟控制智能电器。
想要控制一个智能电器你需要:
比如,为了改变一个灯泡的颜色(Hue),饱和度(Saturation)和亮度(Brightness),请滑动这个滑块。为了打开这个灯泡请选择On选项。
如果你的app展示了一个服务的特性,比如灯泡的开关状态,当你在HomeKitAccessorySimulator中改变这些特性的值时,它应当更新视图。
添加桥接口
为了模拟那些不支持HomeKitAccessoryProtocol协议的智能电器,需要添加一个虚拟桥接口,然后将智能电器添加到这个虚拟桥接口。配置虚拟桥接口底层的智能电器和配置其他类型的智能电器差不多。
添加一个虚拟桥接口到网络
添加一个代表这个虚拟桥接口的智能电器。
为了添加一个虚拟桥接口到网络你需要:
1.在HomeKitAccessorySimulator中,点击智能电器列表底部的“+”按钮。
2.在弹出框中选择Add虚拟桥接口。
3.输入一个智能电器的名称和制造商。
向虚拟桥接口添加智能电器配件可向一个虚拟桥接口添加一个或多个智能电器。
为了向一个虚拟桥接口添加一个智能电器,需要:
在你的App中添加虚拟桥接口到home
控制虚拟桥接口底层的智能电器
在多设备和多用户环境中测试
创建写入动作
创建并执行动作集
一个动作集就是一个共同执行的动作的集合。比如一个夜间动作集合可能包含关闭电灯,调低恒温水平和锁上房门。
创建并开启触发器
遵循下面几步来创建并启动一个定时触发器
创建一个定时触发器
1.创建定时触发器。
2.添加一个动作集到触发器。
3.添加一个触发器到家庭。
4.启动触发器。
一个定时触发器被启动后,会周期性的运行它的动作集。
第十部分:用户管理
创建home的用户是该home的管理员,可以执行所有操作,包括添加一个客人用户到home。任何管理员添加到这个home的用户(HMUser)都有一个有限的权限。客人不能更改家庭的布局,但是可以执行下面的动作:
管理员需要遵从以下步骤来添加一个客人到home中:
1.管理员调用一个动作将客人添加到home中。
3.HomeKit展示一个对话框,要求输入客人的AppleID。
4.用户输入客人的AppleID。
5.在完成回调中返回一个新的用户。
6.你的App展示客人的名字。
添加一个客人到home,需要在客人的iOS设备上做以下操作:
1.用户在iCloud偏好设置中输入iCloud凭证(AppleID和密码)。
2.用户启动你的App。
3.你的App通过homemanagerobject获得一个home集合。
4.如果iCloud的凭证和管理员输入的AppleID相同,那么管理员的home将会出现在homes属性中。