HomekitAPP 开发说明文档文档格式.docx
- 文档编号:22349683
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:40
- 大小:1.01MB
HomekitAPP 开发说明文档文档格式.docx
《HomekitAPP 开发说明文档文档格式.docx》由会员分享,可在线阅读,更多相关《HomekitAPP 开发说明文档文档格式.docx(40页珍藏版)》请在冰豆网上搜索。
∙AppStoreReviewGuidelines:
HomeKit
提供了加快app审核的技巧
∙HomeKitFrameworkReference
描述了HomeKit框架中的类和方法
∙ExternalAccessoryFrameworkReference
列出了系统提供的发现和配置无线智能家居产品UI
∙HomeKitCatalog
提供示例演示HomeKit特性
∙WWDC2014:
IntroducingHomeKit
对HomeKit更高层次的分析
∙iOSSecurity
描述HomeKit如何处理iOS上的安全和隐私
HomeKit应用服务只提供给通过AppStore发布的app应用程序。
在你的Xcode工程中,HomeKit应用程序需要额外的配置,你的app必须有开发证书和代码签名才能使用HomeKit。
在Xcode的Capabilities面板使用HomeKit,可避免代码签名的问题。
你无需直接在Xcode或者会员中心编辑授权文件(entitlements)。
设置
为了完成本文档中所有步骤,你需要:
1.一个安装Xcode6或者Xcode6以上版本的Mac电脑。
2.为了获得最佳体验,你的Mac电脑上最好安装最新的OSX系统和最新的Xcode版本。
3.加iOS开发者计划。
4.在Member
Center拥有创建代码签名和资源配置的权限。
在你开始使用HomeKit之前,请确保你已经完成以下任务。
创建你团队的配置文件(ProvisioningProfile),请参阅:
AppDistributionQuickStart
.
当你成功地完成了之前的任务后,General面板中Team弹出菜单中的错误信息和问题修复按钮将会消失。
代码签名配置被成功创建后会展示下方的General面板。
解决代码签名和证书配置问题,请参阅
AppDistributionGuide文档中Troubleshooting这一节。
想要使用HomeKit,首先要启用它。
Xcode将会添加HomeKit权限到你的工程授权文件中和会员中心的AppID授权文件中,也会将HomeKit框架添加到你的工程中。
HomeKit需要一个明确的AppID,这个AppID是为了你完成这些步奏而创建的。
启用HomeKit的步骤如下:
1.在Xcode中,选择View>
Navigators>
ShowProjectNavigator。
2.从Project/Targets弹出菜单中target(或者从Project/Targets的侧边栏)
3.点击Capabilities查看你可以添加的应用服务列表。
4.滑到HomeKit所在的行并打开关。
下载HomeKitAccessorySimulator
无需为了开发Homekit应用程序而购买硬件产品。
你可以使HomeKitAccessorySimulator来测试HomeKitapp和模拟配件设备之间的通信。
HomeKitAccessorySimulator不是和Xcode一起发布的。
下载HomeKitAccessorySimulator步骤如下:
1.在Capabilities面板的HomeKit分区,点击DownloadHomeKitAccessorySimulator按钮。
(或者选择Xcode>
OpenDeveloperTool>
MoreDeveloperTools)
2.在浏览器中搜索并且下载"
HardwareIOToolsforXcode"
.dmg文件。
3.在Finder中双击~/Downloads中的.dmg文件。
4.把HomeKitAccessorySimulator拖拽到/Application文件中。
之后,你将可以使用HomeKitAccessorySimulator测试你的HomeKit应用程序,正如TestingYourHomeKitApp(第30页)中描述的那样。
HomeKit允许用户创建一个或者多个Home布局。
每个Home(HMHome)代表一个有网络设备的住所。
用户拥有Home的数据并可通过自己的任何一台iOS设备进行访问。
用户也可以和客户共享一个Home,但是客户的权限会有更多限制。
被指定为primaryhome的home默认是Siri指令的对象,并且不能指定home。
每个Home一般有多个room,并且每个room一般会有多个智能配件。
在home(HMHome)
中,每个房间是独立的room,并具有一个有意义的名字,例如“卧室”或者“厨房”,这些名字可以在Siri命令中使用。
一个accessory(HMAccessory)代表实际家庭中的自动化设备,例如车库开门器。
一个sevice(HMService)是accessory提供的?
种实际服务,例如打开或者关闭车库,或者车库上的灯。
如果你的app缓存了home布局的信息,那么当其布局发声改变的时候,app就需要更新这些信息。
使用HMHomeManager对象可以从HomeKit数据库获取HMHome和其他相关的对象。
本章描述的API获取对象后,你应该通过代理回调函数保持获取对象和HomeKit数据库同步,具体描述请参看“ObservingHomeKitDatabaseChanges"
创建HomeManager对象
使用HomeManager—一个HMHomeManager对象的访问home、room、配件、服务以及其他HomeKit对象。
在创建家庭对象管理器(homemanager)之后,直接设置它的代理,以便获取到这些对象之后及时的通知到你。
1
2
self.homeManager
=
[[HMHomeManager
alloc]
init];
self.homeManager.delegate
self;
当你创建一个homemanager对象时,HomeKit就开始从HomeKit数据库获取这些homes和相关对象,例如room和accessory对象。
当HomeKit正在获取那些对象时,homemanager的primaryHome属性是nil,并且homes属性是个空数组。
你的app应该处理用户还没有完成创建home的情况,但是app应该等待直到HomeKit完成初始化。
当获取对象完成之后,HomeKit会发送homeManagerDidUpdateHomes:
消息给homemanager的代理。
当app进入前台或者在后台Homemanager属性发生改变时,这个homeManagerDidUpdateHomes:
方法就会被调用,详情请参阅“ObservingChangestotheCollectionofHomes”。
获取PrimaryHome和Homes集合
通过homemanager的primaryHome属性,可以得到primaryhome,代码如下:
HMHome
*home
self.homeManager.primaryHome;
使用homemanager的homes属性可以得到用户的所有home的集合;
例如自家主要居所、度假别墅以及办公室。
每个home都对应一个独立的home对象。
3
*home;
for(home
in
self.homeManager.homes
){
…}
获取Home中的所有room
在一个home中,rooms属性定义accessories的物理位置。
用home的rooms属性可以枚举home中的所room。
4
5
HMRome
*room;
for(room
home.rooms){
…
}
获取Room中的Accessories
Accessories数组属于home,但是被指定给了home中的room。
假如用户没有给一个accessory指定room,那么这个accessories被指定一个默认的room,这个room是roomForEntireHome方法的返回值。
用room的accessories属性可以枚举room中所有的accessory。
代码如下:
HMAccessory
*accessory;
for(accessory
room.accessories){
如果你要展示一个个accessory的相关信息或者允许用户控制它,可设置accessory的代理方法并实现这个代理方法,详情请见“ObservingChangestoAccessories”.
一旦你获取到一个accessory对象,你就可以访问它的服务和对象,详情请参阅“AccessingServicesandCharacteristics”。
获取Home中的Accessories属性
使用HMHome类中的accessories的方法,可以直接从Home对象中获取所有的accessory对象,而不用枚举home中的所有room对象(详情请见“GettingtheAccessoriesinaRoom”。
HomeKit对象被保存在一个可以共享的HomeKit数据库里,它可以通过HomeKit框架被多个应英程序访问。
所有HomeKit调用的方法都是异步写入的,并且这些方法都包含一个完成处理后的参数。
如果这个方法处理成功了,你的应用将会在完成处理函数里更新本地对象。
应用程序启动时,HomeKit对象发生改变的并不能收到代理回调?
法,只能接受处理完成后的回调函数。
想要观察其他应用程序启动时HomeKit对象的变化,请参阅:
ObservingHomeKitDatabaseChanges。
查阅异步消息完成处理后传过来的错误码的信息,请参阅:
HomeKitConstantsReference.
对象命名规则
HomeKit对象的名字,例如home、room和zone对象都可以被Siri识别,这一点已经在文档中指出。
以下几点是HomeKit对象的命名规则:
∙对象名字在其命名空间内必须是唯一的。
∙属于用户所有的home名字都在一个命名空间内。
∙一个home对象及其所包含的对象在另一个命名空间内。
∙名字只能包含数字、字母、空格以及省略号字符。
∙名字必须以数字或者字母字符开始。
∙在名字比较的时候,空格或者省略号是忽略的(例如home1和home1同一个名字)。
∙名字没有大小写之分。
想了用户可以使用哪些语言与Siri进行交互,请参阅HomeKitUserInterfaceGuidelines文档中的"
SiriIntegration"
创建Homes
在HMHomeManager类中使用addHomeWithName:
completionHandler:
异步方法可以添加一个home。
作为参数传到那个方法中的home的名字,必须是唯一独特的,并且是Siri可以识别的home名字。
6
7
[self.homeManager
addHomeWithName:
@"
My
Home"
^(HMHome
*home,
NSError
*error)
{
if
(error
!
nil)
//
Failed
to
add
a
home
}
else
Successfully
added
}];
在else语句中,写入代码以更新你应的程序的视图。
为了获取homemanager对象,请参阅GettingtheHomeManagerObject.
在Home中增加一个Room
使用addRoomWithName:
异步方法可以在一个home中添加一个room对象。
作为参数传到那个方法中的room的名字,必须是唯一独特的,并且是Siri可识别的room名字。
8
NSString
*roomName
Living
Room"
;
[home
addRoomWithName:
roomName
^(HMRoom
*room,
room
在else语句中,写入代码更新应用程序的视图。
发现配件
Accessories封装了物理配件的状态,因此它不能被用户创建。
想要允许用户给家添加新的配件,我们可以使HMAccessoryBrowser对象找到一个与home没有关联的配件。
HMAccessoryBrower对象在后台搜寻配件,当它找到配件的时候,使用委托来通知你的应用程序。
只有在startSearchingForNewAccessories方法调用之后或者stopSearchingForNewAccessories方法调用之前,HMAccessoryBrowserDelegate消息才被发送给代理对象。
发现home中的配件
1.在你的类接口中添加配件浏览器委托协议,并且添加一个配件浏览器属性。
@interface
EditHomeViewController
()
@property
HMAccessoryBrowser
*accessoryBrowser;
@end
用你自己的类名代替EditHomeViewController
2.创建配件浏览器对象,并设置它的代理
self.accessoryBrowser
[[HMAccessoryBrowser
self.accessoryBrowser.delegate
3.开始搜寻配件
[self.accessoryBrowser
startSearchingForNewAccessories];
4.将找到的配件添加到你的收藏里
-
(void)accessoryBrowser:
(HMAccessoryBrowser
*)browser
didFindNewAccessory:
(HMAccessory
*)accessory
Update
the
UI
per
new
accessory;
for
example,
reload
picker
view.
[self.accessoryPicker
reloadAllComponents];
用你自己的代码实现上面的accessoryBrowser:
方法。
当然也可以实现accessoryBrowser:
didRemoveNewAccessory:
这个方法来移除配件,这个配件对你的视图或者收藏来说不再是新的。
5.停止搜寻配件
如果一个视图控制器正在开始搜寻配件,那么可以通过重写viewWillDisappear:
方法来停止搜寻配件。
(void)viewWillDisappear:
(BOOL)animated
stopSearchingForNewAccessories];
在WiFi网络环境下,为了安全地获取新的并且能够被HomeKit发现的无线配件,请参阅ExternalAccessoryFrameworkReference.
为Home和room添加配件(Accessory)
配件归属于home,并且它可以被随意添加到home中的任意一个room中。
使用addAccessory:
这个异步方法可以在home中添加配件。
这个配件的名字作为一个参数传递到上述异步方法中,并且这个名字在配件所属的home中必须是唯一的。
使用assignAccessory:
toRoom:
这个异步方法可以给home中
的room添加配件。
配件默认的room是roomForEntireHome这个方法返回值room。
下面的代码演示了如何给home和room添加配件:
9
10
11
12
13
14
15
16
17
18
19
20
21
Add
an
accesory
home
and
room
1.
Get
objects
completion
handlers.
__block
self.home;
HMRoom
*room
roomInHome;
2.
accessory
addAccessory:
^(NSError
(error)
(accessory.room
room)
3.
If
successfully,
to
assignAccessory:
^(NSError
配件可提供一项或者多项服务,这些服务的特性是由制造商定义。
想了解配件的服务和特性目的,请参阅
AccessingServicesandCharacteristics.
更改配件名称
使用updateName:
异步方法可以改变配件的名称,代码如下:
[accessory
updateName:
Kid'
s
Night
Light"
change
name
changed
为Homes和Room添加Bridge(桥接口)
桥接口是配件中的一个特殊对象,它允许你和其他配件交流,但是不允许你直接和HomeKit交流。
例如一个桥接口可以是控制多个灯的枢纽,它使用的是自己的通信协议,而不是HomeKit配件通信协议。
想要给home添加多个桥接口,你可以按照AddingAccessoriestoHomesandRooms中所描述的步骤,添加任何类型的配件到home中。
当你给home添加一个桥接口时,在桥接口底层的配件也会被添加到home中。
正如ObservingHomeKitDatabaseChanges中所描述的那样,每次更改通知设计模,home的代理不会接收到桥接口的home:
didAddAccessory:
代理消息,而是接收一个有关于配件的home:
代理消息。
在home中,要把桥接口后的配件和任何类型的配件看成一样的--例如,把它们加入配件列表的配置表中。
相反的是,当你给room增添一个桥接口时,这个桥接口底层的配件并不会自动地添加到room中,原因是桥接口和它的的配件可以位于到不同的room中。
创建分区
分区(HMZone)是任意可选的房间(rooms)分组;
例如楼上、楼下或者卧室。
房间可以被添加到一个或者多个区域。
可使用addZoneWithName:
异步方法创建分区。
所创建的作为参数传递到这个方法中分区的名称,在home中必须是唯一的,并且应该能被Siri识别。
*zoneName
Upstairs"
addZoneWithName:
zoneName
^(HMZone
*zone,
*error)
create
zone
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Homekit APP 开发说明文档 开发 说明 文档