Xamarin.iOS에서 HomeKitHomeKit in Xamarin.iOS

HomeKit는 홈 자동화 장치를 제어 하는 것에 대 한 Apple 프레임 워크. 이 문서는 HomeKit를 소개 하 고 HomeKit 액세서리 시뮬레이터 및 간단한 Xamarin.iOS 앱을 작성을 이러한 보조 프로그램을 조작할 구성 테스트 accessories를 다룹니다.HomeKit is Apple's framework for controlling home automation devices. This article introduces HomeKit and covers configuring test accessories in the HomeKit Accessory Simulator and writing a simple Xamarin.iOS app to interact with these accessories.

Apple ios 8 하나의 단위로 여러 공급 업체에서 여러 홈 자동화 장치를 원활 하 게 통합 하는 방법으로 HomeKit를 도입 했습니다.Apple introduced HomeKit in iOS 8 as a way to seamlessly integrate multiple home automation devices from a variety vendors into a single, coherent unit. 검색에 대 한 일반적인 프로토콜을 촉진 하 여 구성 및 홈 자동화 장치 제어 HomeKit 장치에서에서 허용 함께 작동 하 여 작업을 조정 하지 않아도 개별 공급 업체 없이 공급 업체와 관련 되지 않은 합니다.By promoting a common protocol for discovering, configuring and controlling home automation devices, HomeKit allows devices from non-related vendors to work together, all without the individual vendors having to coordinate efforts.

HomeKit를 사용 하 여 앱 또는 Api 제공 공급 업체를 사용 하지 않고 모든 HomeKit 사용 장치를 제어 하는 Xamarin.iOS 앱을 만들 수 있습니다.With HomeKit, you can create a Xamarin.iOS app that controls any HomeKit enabled device without using vendor supplied APIs or apps. HomeKit를 사용 하면 다음을 수행할 수 있습니다.:Using HomeKit, you can do the following:

  • 새 HomeKit 사용 홈 자동화 장치를 검색 하 고 모든 사용자의 iOS 장치에서 지속 되는 데이터베이스에 추가 합니다.Discover new HomeKit enabled home automation devices and add them to a database that will persist across all of the user's iOS devices.
  • 설치, 구성, 표시 및 모든 장치는 HomeKit에서 제어 _구성 데이터베이스 홈_합니다.Setup, configure, display and control any device in the HomeKit Home Configuration Database.
  • 미리 구성 된 HomeKit 장치와 통신 하 고 개별 작업을 수행 하거나 모든 주방에서 표시등 켜기 등의 공동에서 작업 하도록 명령 합니다.Communicate with any pre-configured HomeKit device and command them to perform individual actions or work in concert, such as turning on all of the lights in the kitchen.

장치 HomeKit 사용 앱 홈 구성 데이터베이스에서 사용자에 게 제공 하는 것 외에도 HomeKit Siri 음성 명령에 대 한 액세스를 제공 합니다.In addition to serving devices in the Home Configuration Database to HomeKit enabled apps, HomeKit provides access to Siri voice commands. HomeKit 설치를 적절 하 게 구성 된 지정 된, 사용자 명령을 실행할 수 있습니다 음성와 같은 "Siri 거실에 전등 켜기."Given an appropriately configured HomeKit setup, the user can issue voice commands such as "Siri, turn on the lights in the living room."

홈 구성 데이터베이스The Home Configuration Database

HomeKit 홈 컬렉션에 지정된 된 위치에서 모든 automation 장치를 구성합니다.HomeKit organizes all automation devices in a given location into a Home Collection. 이 컬렉션에는 사용자가 홈 자동화 장치 의미를 이해 하기 쉬운 레이블 사용 하 여 논리적으로 정렬 된 단위로 그룹화 하는 방법을 제공 합니다.This collection provides a way for the user to group their home automation devices into logically arranged units with meaningful, human-readable labels.

홈 컬렉션 홈 구성 데이터베이스를 자동으로 되는 백업 및 동기화 된 모든 사용자의 iOS 장치에 저장 됩니다.The Home Collection is stored in a Home Configuration Database that will automatically be backed-up and synced across all of the user's iOS devices. HomeKit 홈 구성 데이터베이스를 사용 하 여 작업에 대 한 다음 클래스를 제공 합니다.HomeKit provides the following classes for working with the Home Configuration Database:

  • HMHome -이 (예: 단일 물리적 위치에서 모든 정보 및 모든 홈 자동화 장치에 대 한 구성을 포함 하는 최상위 컨테이너HMHome - This is the top-level container that holds all information and configurations for all home automation devices in a single physical location (eg. 단일 제품군 거주).a single family residence). 사용자는 자신의 기본 홈 휴가 집 등 둘 이상의 거주가 있을 수 있습니다.The user might have more than one residence, such as their main home and a vacation house. 또는 다른 "보관" 동일한 속성에는 차고 통해 게스트 집 주 집 등을 가질 수 있습니다.Or they might have different "houses" on the same property, such as the main house and a guest house over the garage. 하나 이상의 어느 HMHome 개체 해야 설치 되며 저장 기타 HomeKit 정보를 입력할 수 있습니다.Either way, at least one HMHome object must be setup and stored before any other HomeKit info can be entered.
  • HMRoom -동안 선택적를 HMRoom 홈 내에서 특정 대화방을 정의할 수 있습니다 (HMHome)와 같은: 주방, 욕실, 차고 또는 가정용 합니다.HMRoom - While optional, a HMRoom allows the user to define specific rooms inside of a home (HMHome) such as: Kitchen, Bathroom, Garage or Living Room. 홈 자동화 장치에 자신의 집에서 특정 위치에 모든 사용자 그룹 수를 HMRoom 단위로 따라 작업을 수행 합니다.The user can group all of the home automation devices in a specific location in their house into a HMRoom and act upon them as a unit. 예를 들어, Siri garage 광원 해제를 요청 합니다.For example, asking Siri to turn off the garage lights.
  • HMAccessory -이 나타내는 개인, 실제 HomeKit 사용 자동화 장치 (예: 스마트 자동 온도 조절기) 사용자의 거주지에 설치 된.HMAccessory - This represents an individual, physical HomeKit enabled automation device that has been installed in the user's residence (such as a smart thermostat). HMAccessory 에 할당 되는 HMRoom합니다.Each HMAccessory is assigned to a HMRoom. 사용자 모든 대화방을 구성 하지 않은 경우 HomeKit 액세서리 특별 기본 대화방에 할당 합니다.If the user hasn't configured any rooms, HomeKit assigns accessories to a special default room.
  • HMService -제공 하는 서비스를 나타내는 지정 된 HMAccessory, 광원의 색 (지원 되는 색 변경) 하는 경우 설정/해제 상태와 같은 합니다.HMService - Represents a service provided by a given HMAccessory, such as the on/off state of a light or its color (if color changing is supported). HMAccessory 도 광원을 포함 하는 차고 도어 열기 등의 서비스가 둘 이상 있을 수 있습니다.Each HMAccessory can have more than one service, such as a garage door opener that also includes a light. 또한는 주어진 HMAccessory 서비스 펌웨어 업데이트와 같은 사용자 정의 컨트롤의 외부에 있는 있을 수 있습니다.Additionally, an given HMAccessory might have services, such as firmware update, that are outside of user control.
  • HMZone -컬렉션을 그룹화 할 수 있습니다. HMRoom Upstairs, Downstairs 지하실 등의 논리 영역으로는 개체입니다.HMZone - Allows the user to group a collection of HMRoom objects into logical zones, such as Upstairs, Downstairs or Basement. 선택 사항 이지만, 이렇게 하면 Siri 요청 같은 상호 작용에 대 한 해제 downstairs 광원의 모든 설정.While optional, this allows for interactions like asking Siri to turn all of the light downstairs off.

HomeKit 앱을 프로 비전Provisioning a HomeKit App

HomeKit 따른 보안 요구 사항으로 인해 HomeKit 프레임 워크를 사용 하 여 Xamarin.iOS 앱을 제대로 구성 해야 Xamarin.iOS 프로젝트 파일에서 Apple 개발자 포털에 합니다.Because of the security requirements imposed by HomeKit, a Xamarin.iOS app that uses the HomeKit framework must be properly configured in both the Apple Developer Portal and in the Xamarin.iOS project file.

다음을 수행합니다.Do the following:

  1. 에 로그인 합니다 Apple Developer 포털합니다.Log into the Apple Developer Portal.

  2. 클릭할 인증서, 식별자 및 프로필합니다.Click on Certificates, Identifiers & Profiles.

  3. 이미 않았다면 클릭할 식별자 앱 ID를 만듭니다 (예: com.company.appname), 다른 기존 ID를 편집If you haven't already done so, click on Identifiers and create an ID for your app (e.g. com.company.appname), else edit your existing ID.

  4. 있는지 확인 합니다 HomeKit 서비스에 지정된 된 ID에 대 한 확인:Ensure that the HomeKit service has been checked for the given ID:

  5. 변경 내용을 저장합니다.Save your changes.

  6. 클릭할 프로 비전 프로필 > 개발 새 개발 프로 비전 앱에 대 한 프로필을 만듭니다.Click on Provisioning Profiles > Development and create a new development provisioning profile for your app:

  7. 다운로드 및 새 프로 비전 프로필을 설치 또는 Xcode를 사용 하 여 다운로드 하 고 프로필을 설치 합니다.Either download and install the new provisioning profile or use Xcode to download and install the profile.

  8. Xamarin.iOS 프로젝트 옵션을 편집 하 고 방금 만든 프로 비전 프로필을 사용 하 고 있는지 확인 합니다.Edit your Xamarin.iOS project options and ensure that you are using the provisioning profile that you just created:

  9. 다음으로, 편집 하 Info.plist 파일을 프로 비전 프로필을 만드는 데 사용 된 앱 ID를 사용 하 고 있는지 확인:Next, edit your Info.plist file and ensure that you are using the App ID that was used to create the provisioning profile:

  10. 마지막으로 편집 하 Entitlements.plist 파일을 확인 합니다 HomeKit 자격 선정 된:Finally, edit your Entitlements.plist file and ensure that the HomeKit entitlement has been selected:

  11. 모든 파일에 변경 내용을 저장 합니다.Save the changes to all files.

현재 위치에서 이러한 설정을 사용 하 여 응용 프로그램이 HomeKit 프레임 워크 Api에 액세스할 준비가 되었습니다.With these settings in place, the application is now ready to access the HomeKit Framework APIs. 프로 비전에 대 한 자세한 내용은 참조 하십시오 우리의 Device Provisioning 하 고 앱 프로 비전 가이드입니다.For detailed information on provisioning, please see our Device Provisioning and Provisioning Your App guides.

중요

HomeKit 사용 앱을 테스트 개발에 대 한 제대로 프로 비전 하는 실제 iOS 장치에 필요 합니다.Testing a HomeKit enabled app requires a real iOS device that has been properly provisioned for development. HomeKit는 iOS 시뮬레이터에서에서 테스트할 수 없습니다.HomeKit cannot be tested from the iOS Simulator.

HomeKit 액세서리 시뮬레이터The HomeKit Accessory Simulator

물리적 장치를 설치 하지 않더라도 모든 가능한 홈 자동화 장치 및 서비스를 테스트 하는 방법을 제공 하기 위해 Apple 만듭니다는 _HomeKit 액세서리 시뮬레이터_합니다.To provide a way to test all of the possible home automation devices and services, without having to have a physical device, Apple created the HomeKit Accessory Simulator. 이 시뮬레이터를 사용 하 여, 설치 수 있으며 가상 HomeKit 장치를 구성할 수도 있습니다.Using this simulator, you can setup and configure virtual HomeKit devices.

설치는 시뮬레이터Installing the Simulator

계속 하기 전에 설치 해야 하므로 Apple HomeKit 액세서리 시뮬레이터 별도 다운로드로 Xcode에서 제공 합니다.Apple provides the HomeKit Accessory Simulator as a separate download from Xcode, so you will need to install it before continuing.

다음을 수행합니다.Do the following:

  1. 웹 브라우저에서 방문 Apple 개발자를 위한 다운로드In a web browser, visit Downloads for Apple Developers

  2. 다운로드 합니다 Xcode xxx에 대 한 추가 도구 (여기서 xxx는 설치 된 Xcode의 버전):Download the Additional Tools for Xcode xxx (where xxx is the version of Xcode that you have installed):

  3. 디스크 이미지를 열고 도구를 설치 하 응용 프로그램 디렉터리입니다.Open the disk image and install the tools in your Applications directory.

설치 HomeKit 액세서리 시뮬레이터를 사용 하 여 테스트를 위해 가상 보조 프로그램을 만들 수 있습니다.With the HomeKit Accessory Simulator installed, virtual accessories can be created for testing.

가상 보조 프로그램 만들기Creating Virtual Accessories

HomeKit 액세서리 시뮬레이터를 시작 하 고를 몇 가지 가상 accessories 만들기 하려면 다음을 수행 합니다.To start the HomeKit Accessory Simulator and create a few virtual accessories, do the following:

  1. 응용 프로그램 폴더에서 HomeKit 액세서리 시뮬레이터를 시작 합니다.From the Applications folder, start the HomeKit Accessory Simulator:

  2. 클릭 합니다 + 단추를 선택 새 액세서리 중... :Click the + button and select New Accessory...:

  3. 새 접근자에 대 한 정보를 입력 하 고 클릭 합니다 완료 단추:Fill out the information about the new accessory and click the Finish button:

  4. 클릭 된 서비스 추가...Click the Add Service.. 단추 및 드롭다운 목록에서 서비스 유형 선택:button, and select a service type from the dropdown:

  5. 제공을 이름 서비스를 클릭 합니다 마침 단추:Provide a Name for the service and click the Finish button:

  6. 클릭 하 여 서비스에 대 한 선택적 특성을 제공할 수 있습니다는 특성 추가 단추 및 필요한 설정을 구성 합니다.You can provide optional characteristics for a service by clicking the Add Characteristic button and configuring the required settings:

  7. 각 유형의 HomeKit 지 원하는 가상 홈 자동화 장치 중 하나를 만들려면 위의 단계를 반복 합니다.Repeat the steps above to create one of each type of virtual home automation device that HomeKit supports.

일부 샘플 가상 HomeKit 액세서리 생성 및 구성에 사용 하 여 사용 하 고 Xamarin.iOS 앱에서 이러한 장치를 제어 합니다. 이제 수 있습니다.With some sample virtual HomeKit accessories created and configured, you can now consume and control these devices from your Xamarin.iOS app.

Info.plist 파일 구성Configuring the Info.plist File

IOS 10의 새로운 기능 (이상)에 개발자 추가 해야 합니다 NSHomeKitUsageDescription 앱의 키 Info.plist 파일 및 앱 사용자의 HomeKit 데이터베이스에 액세스 하려고 하는 이유는 무엇을 선언 문자열을 제공 합니다.New for iOS 10 (and greater), the developer will need to add the NSHomeKitUsageDescription key to the app's Info.plist file and provide a string declaring why the app wants to access the user's HomeKit database. 이 문자열은 사용자가 처음에 앱을 실행 하기에 표시 됩니다.This string will be presented to the user the first time they run the app:

이 키를 설정 하려면 다음을 수행 합니다.To set this key, do the following:

  1. 두 번 클릭 합니다 Info.plist 파일을 솔루션 탐색기 을 편집용으로 엽니다.Double-click the Info.plist file in the Solution Explorer to open it for editing.

  2. 화면 아래쪽으로 전환 합니다 원본 보기.At the bottom of the screen, switch to the Source view.

  3. 항목이 목록에 있습니다.Add a new Entry to the list.

  4. 드롭다운 목록에서 선택 개인 정보-HomeKit 사용 설명:From the dropdown list, select Privacy - HomeKit Usage Description:

  5. 앱 사용자의 HomeKit 데이터베이스에 액세스 하려고 하는 이유는 무엇에 대 한 설명을 입력 합니다.Enter a description for why the app wants to access the user's HomeKit database:

  6. 파일의 변경 내용을 저장합니다.Save the changes to the file.

중요

설정 하지 못했습니다 합니다 NSHomeKitUsageDescription 키를 Info.plist 파일은 앱에서 발생 합니다 자동으로 실패 (되 런타임 시 시스템에 의해 닫힘) iOS 10 이상에서 실행 하는 경우 오류 없이 합니다.Failure to set the NSHomeKitUsageDescription key in the Info.plist file will result in the app silently failing (being closed by the system at runtime) without error when run in iOS 10 (or greater).

HomeKit에 연결Connecting to HomeKit

HomeKit와 통신 하려면 Xamarin.iOS 앱의 인스턴스를 인스턴스화하고 먼저 해야는 HMHomeManager 클래스입니다.To communicate with HomeKit, your Xamarin.iOS app needs to first instantiate an instance of the HMHomeManager class. 홈 Manager HomeKit 중앙 진입점 이며 사용 가능한 집의 목록을 제공 하는 업데이트 및 해당 목록을 유지 관리 하 고 사용자의 반환 _기본 홈_합니다.The Home Manager is the central entry point into HomeKit and is responsible for providing a list of available homes, updating and maintaining that list and returning the user’s Primary Home.

HMHome 방, 그룹 또는 설치 된 모든 가정 자동화 액세서리와 함께 해당가 포함할 수 있는 영역 등 제공 홈에 대 한 모든 정보를 포함 하는 개체입니다.The HMHome object contains all information about a give home including any rooms, groups or zones that it may contain, along with any home automation accessories that have been installed. HomeKit 하나 이상에서 모든 작업을 수행 하려면 HMHome 만들어지고 기본 홈으로 지정 해야 합니다.Before any operations can be performed in HomeKit, at least one HMHome must be created and assigned as the Primary Home.

앱이 기본 홈 있는지 확인 하 고 만들고 없으면 하나를 할당 하는 일을 담당 합니다.Your app is responsible for checking if a Primary Home exists and creating and assigning one if it does not.

홈 관리자 추가Adding a Home Manager

HomeKit 인식 Xamarin.iOS 앱에 추가 하려면 편집 합니다 AppDelegate.cs 파일을 편집 하 고 다음과 같이 표시 되도록 합니다.To add HomeKit awareness to a Xamarin.iOS app, edit the AppDelegate.cs file to edit it and make it look like the following:

using HomeKit;
...

public HMHomeManager HomeManager { get; set; }
...

public override void FinishedLaunching (UIApplication application)
{
    // Attach to the Home Manager
    HomeManager = new HMHomeManager ();
    Console.WriteLine ("{0} Home(s) defined in the Home Manager", HomeManager.Homes.Count());

    // Wire-up Home Manager Events
    HomeManager.DidAddHome += (sender, e) => {
        Console.WriteLine("Manager Added Home: {0}",e.Home);
    };

    HomeManager.DidRemoveHome += (sender, e) => {
        Console.WriteLine("Manager Removed Home: {0}",e.Home);
    };
    HomeManager.DidUpdateHomes += (sender, e) => {
        Console.WriteLine("Manager Updated Homes");
    };
    HomeManager.DidUpdatePrimaryHome += (sender, e) => {
        Console.WriteLine("Manager Updated Primary Home");
    };
}

응용 프로그램을 처음 실행할 때 사용자가 묻습니다 HomeKit 정보에 액세스할 수 있도록 하려는 경우:When the application is first run, the user will be asked if they want to allow it to access their HomeKit information:

사용자가 대답 확인, 응용 프로그램은 해당 HomeKit 액세서리와 함께 사용할 수 됩니다 하지는 그렇지 않은 경우 및 HomeKit 호출 오류와 함께 실패 합니다.If the user answers OK, then the application will be able to work with their HomeKit Accessories otherwise it will not and any calls to HomeKit will fail with an error.

다음 위치에서 홈 관리자와이 응용 프로그램 기본 홈을 구성한 경우 보고 그렇지 않은 경우 하나를 만들고 사용자에 대 한 방법을 제공 해야 합니다.With the Home Manager in place, next the application will need to see if a Primary Home has been configured, and if not, provide a way for the user to create and assign one.

기본 홈에 액세스Accessing the Primary Home

위에서 설명한 대로 기본 홈을 생성 하 고 HomeKit를 사용할 수 없으면 기본 홈을 만들고 사용자에 대 한 방법을 제공 해야 하는 앱의 존재 하지 않는 것이 먼저 구성 해야 합니다.As stated above, a Primary Home must be created and configured before HomeKit is available and it is the app's responsibility to provide a way for the user to create and assign a Primary Home if one does not already exist.

모니터링 해야 앱 먼저 시작, 백그라운드에서 반환 하는 경우는 DidUpdateHomes 의 이벤트는 HMHomeManager 주 집의 존재 여부를 확인 하는 클래스입니다.When your app first starts or returns from the background, it needs to monitor the DidUpdateHomes event of the HMHomeManager class to check for the existence of a Primary Home. 존재 하지 않는 경우 만드는 사용자에 대 한 인터페이스를 제공 해야 합니다.If one does not exist, it should provide an interface for the user to create one.

다음 코드는 기본 홈에 대 한 확인 하는 뷰 컨트롤러를 추가할 수 있습니다.The following code can be added to a view controller to check for the Primary Home:

using HomeKit;
...

public AppDelegate ThisApp {
    get { return (AppDelegate)UIApplication.SharedApplication.Delegate; }
}
...

// Wireup events
ThisApp.HomeManager.DidUpdateHomes += (sender, e) => {

    // Was a primary home found?
    if (ThisApp.HomeManager.PrimaryHome == null) {
        // Ask user to add a home
        PerformSegue("AddHomeSegue",this);
    }
};

홈 Manager HomeKit를를 연결할 때는 DidUpdateHomes 이벤트가 발생 하 고 모든 기존 집 집의 관리자의 컬렉션에 로드할 기본 홈이 사용 가능한 경우 로드할 수 있습니다.When the Home Manager makes a connection to HomeKit, the DidUpdateHomes event will be fired, any existing homes will be loaded to the manager’s collection of homes and the Primary Home will be loaded, if available.

기본 홈 추가Adding a Primary Home

경우는 PrimaryHome 의 속성 합니다 HMHomeManagernull 후를 DidUpdateHomes 계속 하기 전에 기본 홈을 만들고 사용자에 대 한 방법을 제공 해야 하는 경우.If the PrimaryHome property of the HMHomeManager is null after a DidUpdateHomes event, you need to provide a way for the user to create and assign a Primary Home before continuing.

일반적으로 앱 사용자가 다음 기본 홈으로 설정 하는 홈 관리자에 전달 되는 새 홈에 대 한 양식을 제공 합니다.Typically the app will present a form for the user to name a new home which then gets passed to the Home Manager to setup as the Primary Home. 에 대 한 합니다 HomeKitIntro 모달 뷰 샘플 앱 IOS 디자이너에서 생성 되어 호출한는 AddHomeSegue 앱의 기본 인터페이스에서 segue 합니다.For the HomeKitIntro sample app, a modal view was created in the IOS Designer and called by the AddHomeSegue segue from the main interface of the app.

새 홈 및 홈을 추가 하는 단추에 대 한 이름을 입력 하 여 사용자에 대 한 텍스트 필드를 제공 합니다.It provides a text field for the user to enter a name for the new home and a button to add the home. 사용자가 누를 때 합니다 추가 홈 단추, 다음 코드를 홈 추가할 홈 관리자를 호출 합니다.When the user taps the Add Home button, the following code calls the Home Manager to add the home:

// Add new home to HomeKit
ThisApp.HomeManager.AddHome(HomeName.Text,(home,error) =>{
    // Did an error occur
    if (error!=null) {
        // Yes, inform user
        AlertView.PresentOKAlert("Add Home Error",string.Format("Error adding {0}: {1}",HomeName.Text,error.LocalizedDescription),this);
        return;
    }

    // Make the primary house
    ThisApp.HomeManager.UpdatePrimaryHome(home,(err) => {
        // Error?
        if (err!=null) {
            // Inform user of error
            AlertView.PresentOKAlert("Add Home Error",string.Format("Unable to make this the primary home: {0}",err.LocalizedDescription),this);
            return ;
        }
    });

    // Close the window when the home is created
    DismissViewController(true,null);
});

AddHome 메서드는 새 홈을 만들고 지정 된 콜백 루틴을 반환 하려고 합니다.The AddHome method will attempt to create new home and return it to the given callback routine. 경우는 error 속성은 null사용자에 게 표시 되 고 오류가 발생 했습니다.If the error property is not null, an error has occurred and it should be presented to the user. 가장 일반적인 오류는는 고유 하지 않은 홈 이름 또는 HomeKit 통신할 수 없는 홈 관리자를 기준으로 발생 합니다.The most common errors are caused by either a non-unique home name or the Home Manager not being able to communicate with HomeKit.

호출 해야 하는 홈 성공적으로 만들어졌으면는 UpdatePrimaryHome 새 홈 기본 홈으로 설정 하는 방법입니다.If the home was created successfully, you need to call the UpdatePrimaryHome method to set the new home as the Primary Home. 마찬가지로 경우 합니다 error 속성은 null사용자에 게 표시 되 고 오류가 발생 했습니다.Again, if the error property is not null, an error has occurred and it should be presented to the user.

홈 관리자의 모니터링 해야 DidAddHomeDidRemoveHome 필요에 따라 앱의 사용자 인터페이스 이벤트 및 업데이트 합니다.You should also monitor the Home Manager’s DidAddHome and DidRemoveHome events and update the app's user interface as required.

중요

AlertView.PresentOKAlert 위의 샘플 코드에 사용 되는 메서드는 작업할 수 있게 iOS를 사용 하 여 경고 쉽게 HomeKitIntro 응용 프로그램에는 도우미 클래스입니다.The AlertView.PresentOKAlert method used in the sample code above is a helper class in the HomeKitIntro application that makes working with the iOS Alerts easier.

새 보조 프로그램 찾기Finding New Accessories

Xamarin.iOS 앱을 호출할 수 있습니다 기본 홈 정의 되었거나 홈 관리자에서 로드 되 면는 HMAccessoryBrowser 모든 새 홈 자동화 accessories 찾아 집에 추가 합니다.Once a Primary Home has been defined or loaded from the Home Manager, your Xamarin.iOS app can call the HMAccessoryBrowser to find any new home automation accessories and add them to a home.

호출 된 StartSearchingForNewAccessories 새 accessories에 대 한 확인을 시작 하는 방법 및 StopSearchingForNewAccessories 완료 되 면 메서드.Call the StartSearchingForNewAccessories method to start looking for new accessories and the StopSearchingForNewAccessories method when finished.

중요

StartSearchingForNewAccessories 하지 두어야 배터리와 iOS 장치의 성능에 부정적인 영향이 있으므로 오랜 시간 동안 실행 합니다.StartSearchingForNewAccessories should not be left running for long periods of time because it will negatively affect both battery life and performance of the iOS device. Apple에서 제안 하 호출 StopSearchingForNewAccessories 후 1 분 또는 찾을 액세서리 UI를 사용자에 게 표시 되 면만 검색 합니다.Apple suggests calling StopSearchingForNewAccessories after a minute or only searching when the Find Accessory UI is presented to the user.

DidFindNewAccessory 새 보조 프로그램은 검색 되며를 추가할 때 호출 될 이벤트는 DiscoveredAccessories 액세서리 브라우저에서 목록입니다.The DidFindNewAccessory event will be called when new accessories are discovered and they will be added to the DiscoveredAccessories list in the Accessory Browser.

DiscoveredAccessories 의 컬렉션이 포함 된 경우 목록 HMAccessory 홈 자동화 장치 및 표시등 또는 garage 도어 컨트롤 같은 해당 제공 서비스 주어진 HomeKit를 정의 하는 개체에 사용 하도록 설정 합니다.The DiscoveredAccessories list will contain a collection of HMAccessory objects that define a give HomeKit enabled home automation device and its available services, such as lights or garage door control.

새 액세서리를 찾으면 사용자에 게 표시 되 고 선택 하 고 홈에 추가할 수 있으므로 합니다.Once the new accessory has been found, it should be presented to the user and so they can select it and add it to a home. 예제:Example:

호출 된 AddAccessory 선택한 액세서리 홈의 컬렉션에 추가 하는 방법입니다.Call the AddAccessory method to add the selected accessory to the home's collection. 예:For example:

// Add the requested accessory to the home
ThisApp.HomeManager.PrimaryHome.AddAccessory (_controller.AccessoryBrowser.DiscoveredAccessories [indexPath.Row], (err) => {
    // Did an error occur
    if (err !=null) {
        // Inform user of error
        AlertView.PresentOKAlert("Add Accessory Error",err.LocalizedDescription,_controller);
    }
});

경우는 err 속성은 null사용자에 게 표시 되 고 오류가 발생 했습니다.If the err property is not null, an error has occurred and it should be presented to the user. 이 고, 그렇지 사용자는 추가 장치에 대 한 설치 코드를 입력 하 라는 메시지가 표시 수 있습니다:Otherwise, the user will be asked to enter the setup code for the device to add:

HomeKit 액세서리 시뮬레이터가이 숫자에서 찾을 수 있습니다 합니다 설치 코드 필드:In the HomeKit Accessory Simulator this number can be found under the Setup Code field:

실제 HomeKit accessories에 대해 설정 된 코드는 장치 자체에 접근자의 설명서 또는 제품 상자에에서 레이블을 인쇄 하거나 됩니다.For real HomeKit accessories, the setup code will either be printed on a label on the device itself, on the product box or in the accessory’s user manual.

액세서리 브라우저의 모니터링 DidRemoveNewAccessory 이벤트 및 업데이트 사용자 인터페이스 사용자가 해당 홈 해당 컬렉션에 추가 되 면 사용 가능한 목록의 보조 프로그램을 제거 합니다.You should monitor the Accessory Browser’s DidRemoveNewAccessory event and update the user interface to remove an accessory from the available list once the user has added it to their Home Collection.

보조 사용Working with Accessories

기본 홈 한 번 설정 하 고 보조 프로그램을 추가한를 사용 하려면 사용자에 대 한 accessories (및 필요에 따라 실)의 목록을 제공할 수 있습니다.Once a Primary Home and been established and accessories have been added to it, you can present a list of accessories (and optionally rooms) for the user to work with.

HMRoom 여기에 속한 모든 accessories 및 지정된 된 대화방에 대 한 모든 정보를 포함 하는 개체입니다.The HMRoom object contains all information about a given room and any accessories that belong to it. 필요에 따라 하나 이상의 영역으로 대화방을 구성할 수 있습니다.Rooms can optionally be organized into one or more zones. HMZone 지정 된 영역에 대 한 모든 정보 및 여기에 속한 대화방의 모든 포함 되어 있습니다.A HMZone contains all information about a given zone and all of the rooms that belong to it.

이 예제의 경우에서는 됩니다 수 유지 작업 간단 하 고 방 또는 영역 구조로 구성 하는 대신 집의 보조 프로그램을 직접 작동 합니다.For the sake of this example, we'll be keeping things simple and work with a home's accessories directly, instead of organizing them into rooms or zones.

합니다 HMHome 개체에 할당 된 액세서리 사용자에 게 표시할 수 있는 목록이 해당 Accessories 속성입니다.The HMHome object contains a list of assigned accessory that can be presented to the user in its Accessories property. 예를 들어:For example:

다음 양식에서 사용자 수는 지정 된 보조를 선택 하 고 제공 하는 서비스를 사용 하 여 작동 합니다.Form here, the user can select a given accessory and work with the services that it provides.

서비스 작업Working with Services

지정된 된 HomeKit 사용된 홈 자동화 장치를 사용 하 여 사용자 상호 작용을 때 일반적으로 제공 하는 서비스를 통해.When the user interacts with a given HomeKit enabled home automation device, it's usually through the services that it provides. Services 의 속성을 HMAccessory 클래스의 컬렉션을 포함 HMService 개체 서비스를 정의 하는 장치를 제공 합니다.The Services property of the HMAccessory class contains a collection of HMService objects that define the services a device offers.

서비스는 조명, 온도, 차고문 개폐, 스위치 또는 잠금 등입니다.Services are things like lights, thermostats, garage door openers, switches, or locks. (예: garage 도어 열기) 일부 장치는 광원 및 열기 또는 닫기는 도어 수와 같은 하나 이상의 서비스를 제공 합니다.Some devices (like a garage door opener) will provide more than one service, such as a light and the ability to open or close a door.

특정 서비스는 지정 된 보조 제공 하는 것 외에도 각 액세서리 포함는 Information Service 이름, 제조업체, 모델 및 일련 번호와 같은 속성을 정의 하는 합니다.In addition to the specific services that a given accessory provides, each accessory contains an Information Service that defines properties such as its Name, Manufacturer, Model and Serial Number.

보조 서비스 유형Accessory Service Types

다음 서비스 형식을 통해 사용할 수는 HMServiceType 열거형:The following Service Types are available via the HMServiceType enum:

  • AccessoryInformation -지정 된 홈 자동화 장치 (보조)에 대 한 정보를 제공 합니다.AccessoryInformation - Provides information about the given home automation device (accessory).
  • AirQualitySensor -는 공기 품질 센서를 정의 합니다.AirQualitySensor - Defines an air quality sensor.
  • 배터리 -액세서리의 배터리 상태를 정의 합니다.Battery - Defines the state of an accessory's battery.
  • CarbonDioxideSensor -탄소 이산화 센서를 정의 합니다.CarbonDioxideSensor - Defines a carbon Dioxide Sensor.
  • CarbonMonoxideSensor -일산화 센서를 정의 합니다.CarbonMonoxideSensor - Defines a Carbon Monoxide Sensor.
  • ContactSensor -연락처 센서 (예: 열거나 닫을 창)을 정의 합니다.ContactSensor - Defines a contact sensor (such as a window being opened or closed).
  • 도어 -도어 상태 센서 (예: 열기 또는 닫기)를 정의 합니다.Door - Defines a door state sensor (such as opened or closed).
  • -원격 제어 팬을 정의 합니다.Fan - Defines a remote controlled fan.
  • GarageDoorOpener -garage 도어 열기를 정의 합니다.GarageDoorOpener - Defines a garage door opener.
  • HumiditySensor -습도 센서를 정의 합니다.HumiditySensor - Defines a humidity sensor.
  • LeakSensor -누수 센서 (온수 기 또는 세척기와 같이)를 정의 합니다.LeakSensor - Defines a leak sensor (like for a hot water heater or washing machine).
  • 전구 -는 독립 실행형 또는 다른 액세서리 (예: garage 도어 열기)의 일부인 표시등이 정의 합니다.LightBulb - Defines a stand alone light or a light that is part of another accessory (like a garage door opener).
  • LightSensor -광원 센서를 정의 합니다.LightSensor - Defines a light sensor.
  • LockManagement -한 자동화 된 도어 잠금을 관리 하는 서비스를 정의 합니다.LockManagement - Defines a service that manages an automated door lock.
  • LockMechanism -(예: 도어 잠금) 원격 제어 잠금을 정의 합니다.LockMechanism - Defines a remote controlled lock (like a door lock).
  • MotionSensor -동작 센서를 정의 합니다.MotionSensor - Defines a motion sensor.
  • OccupancySensor -점유율 센서를 정의 합니다.OccupancySensor - Defines an occupancy sensor.
  • 출 선 -원격 제어 콘센트를 정의 합니다.Outlet - Defines a remote controlled wall outlet.
  • SecuritySystem -홈 보안 시스템을 정의 합니다.SecuritySystem - Defines a home security system.
  • StatefulProgrammableSwitch -(예: 플립 스위치)를 한 번 트리거 제공 상태를 유지 하는 프로그래밍 가능 스위치를 정의 합니다.StatefulProgrammableSwitch - Defines a programmable switch that remains in a give state once triggered (like a flip switch).
  • StatelessProgrammableSwitch -(예: 누름 단추) 트리거된 후 초기 상태를 반환 하는 프로그래밍 가능 스위치를 정의 합니다.StatelessProgrammableSwitch - Defines a programmable switch that returns to its initial state after being triggered (like a push button).
  • SmokeSensor -스모크 센서를 정의 합니다.SmokeSensor - Defines a smoke sensor.
  • 전환 -표준 벽 스위치 처럼 켜기/끄기 스위치를 정의 합니다.Switch - Defines an on/off switch like a standard wall switch.
  • TemperatureSensor -온도 센서를 정의 합니다.TemperatureSensor - Defines a temperature sensor.
  • 자동 온도 조절기 -HVAC 시스템을 제어 하는 데는 스마트 자동 온도 조절기를 정의 합니다.Thermostat - Defines a smart thermostat used to control an HVAC system.
  • -는 케 인 원격으로 열거나 닫지 않아야 하는 자동화 된 창을 정의 합니다.Window - Defines an automated window that cane be remotely opened or closed.
  • WindowCovering -원격 제어 창을 열거나 닫을 수 있는 블라인드 등을 다루는 정의 합니다.WindowCovering - Defines a remotely controlled window covering, like blinds that can be opened or closed.

서비스 정보를 표시합니다.Displaying Service Information

로드 한 후는 HMAccessory 개별을 쿼리할 수 있습니다 HNService 개체를 제공 하 고 사용자에 게 해당 정보를 표시 합니다.After you load a HMAccessory you can query the individual HNService objects it provides and display that information to the user:

해야 항상 확인 해야 합니다 Reachable 의 속성을 HMAccessory 에 다시 시도 하기 전에 합니다.You should always should check the Reachable property of a HMAccessory before attempting to work with it. 보조 프로그램에 연결할 수 없는 사용자가 장치의 범위 내에서 또는 경우 중단 된 연결 수 있습니다.An accessory can be unreachable the user is not within range of the device or if it has been unplugged.

서비스를 선택한 후 사용자 보거나 해당 서비스를 모니터링 하거나 특정된 홈 자동화 장치 제어의 하나 이상의 특성을 수정할 수 있습니다.Once a service has been selected, the user can view or modify one or more characteristics of that service to monitor or control a given home automation device.

특성 사용Working with Characteristics

HMService 개체의 컬렉션을 포함할 수 있습니다 HMCharacteristic (예: 도어를 열거나 닫을) 서비스의 상태에 대 한 정보를 제공 하거나 (예: 광원의 색을 설정) 된 상태를 조정 하는 데 사용할 수 있는 개체입니다.Each HMService object can contain a collection of HMCharacteristic objects that can either provide information about the state of the service (like a door being opened or closed) or allow the user to adjust a state (like setting the color of a light).

HMCharacteristic 또한를 통해 상태를 사용 하 여 작업 하기 위한 메서드를 제공 하지만 특성 및 해당 상태에 대 한 정보를 제공할 뿐 아니라 특성은 메타 데이터 (HMCharacteristisMetadata).HMCharacteristic not only provides information about a characteristic and its state, but also provides methods for working with the state via Characteristic Metadata (HMCharacteristisMetadata). 이 메타 데이터는 사용자 또는 있도록 상태를 수정 하 게 정보를 표시 하는 경우에 유용 하는 속성 (예: 최소 및 최대 값 범위)를 제공할 수 있습니다.This metadata can provide properties (such as minimal and maximal value ranges) that are useful when displaying information to the user or allowing them to modify states.

HMCharacteristicType 열거형 정의 하거나 다음과 같이 수정할 수 있는 특성 메타 데이터 값의 집합을 제공 합니다.The HMCharacteristicType enum provides a set of Characteristic Metadata values that can be defined or modified as follows:

  • AdminOnlyAccessAdminOnlyAccess
  • AirParticulateDensityAirParticulateDensity
  • AirParticulateSizeAirParticulateSize
  • AirQualityAirQuality
  • AudioFeedbackAudioFeedback
  • BatteryLevelBatteryLevel
  • 밝기Brightness
  • CarbonDioxideDetectedCarbonDioxideDetected
  • CarbonDioxideLevelCarbonDioxideLevel
  • CarbonDioxidePeakLevelCarbonDioxidePeakLevel
  • CarbonMonoxideDetectedCarbonMonoxideDetected
  • CarbonMonoxideLevelCarbonMonoxideLevel
  • CarbonMonoxidePeakLevelCarbonMonoxidePeakLevel
  • ChargingStateChargingState
  • ContactStateContactState
  • CoolingThresholdCoolingThreshold
  • CurrentDoorStateCurrentDoorState
  • CurrentHeatingCoolingCurrentHeatingCooling
  • CurrentHorizontalTiltCurrentHorizontalTilt
  • CurrentLightLevelCurrentLightLevel
  • CurrentLockMechanismStateCurrentLockMechanismState
  • CurrentPositionCurrentPosition
  • CurrentRelativeHumidityCurrentRelativeHumidity
  • CurrentSecuritySystemStateCurrentSecuritySystemState
  • CurrentTemperatureCurrentTemperature
  • CurrentVerticalTiltCurrentVerticalTilt
  • FirmwareVersionFirmwareVersion
  • HardwareVersionHardwareVersion
  • HeatingCoolingStatusHeatingCoolingStatus
  • HeatingThresholdHeatingThreshold
  • HoldPositionHoldPosition
  • 색상Hue
  • IdentifyIdentify
  • InputEventInputEvent
  • LeakDetectedLeakDetected
  • LockManagementAutoSecureTimeoutLockManagementAutoSecureTimeout
  • LockManagementControlPointLockManagementControlPoint
  • LockMechanismLastKnownActionLockMechanismLastKnownAction
  • 로그Logs
  • 제조업체Manufacturer
  • ModelModel
  • MotionDetectedMotionDetected
  • 이름Name
  • ObstructionDetectedObstructionDetected
  • OccupancyDetectedOccupancyDetected
  • OutletInUseOutletInUse
  • OutputStateOutputState
  • PositionStatePositionState
  • PowerStatePowerState
  • RotationDirectionRotationDirection
  • RotationSpeedRotationSpeed
  • 채도Saturation
  • SerialNumberSerialNumber
  • SmokeDetectedSmokeDetected
  • SoftwareVersionSoftwareVersion
  • StatusActiveStatusActive
  • StatusFaultStatusFault
  • StatusJammedStatusJammed
  • StatusLowBatteryStatusLowBattery
  • StatusTamperedStatusTampered
  • TargetDoorStateTargetDoorState
  • TargetHeatingCoolingTargetHeatingCooling
  • TargetHorizontalTiltTargetHorizontalTilt
  • TargetLockMechanismStateTargetLockMechanismState
  • TargetPositionTargetPosition
  • TargetRelativeHumidityTargetRelativeHumidity
  • TargetSecuritySystemStateTargetSecuritySystemState
  • TargetTemperatureTargetTemperature
  • TargetVerticalTiltTargetVerticalTilt
  • TemperatureUnitsTemperatureUnits
  • 버전Version

특성의 값을 사용 하 여 작업Working with a Characteristic’s Value

호출 앱이 지정 된 특성의 최신 상태가 되도록 합니다 ReadValue 메서드는 HMCharacteristic 클래스입니다.To ensure that you app has the latest state of a given characteristic, call the ReadValue method of the HMCharacteristic class. 경우는 err 속성은 null, 오류가 발생 했습니다 수도 있고 그렇지 사용자에 게 표시 되지 않을 수 있습니다.If the err property is not null, an error has occurred and it may or may not be presented to the user.

특성의 Value 속성으로 지정 된 특성의 현재 상태를 포함 합니다.는 NSObject, 하 고 따라서 없습니다 수에서 직접 C#합니다.The Characteristic’s Value property contains the current state of the given characteristic as an NSObject, and as such cannot be worked with directly in C#.

다음 도우미 클래스에 추가 된 값을 읽으려면 합니다 HomeKitIntro 샘플 응용 프로그램:To read the value, the following helper class was added to the HomeKitIntro sample application:

using System;
using Foundation;
using System.Globalization;
using CoreGraphics;

namespace HomeKitIntro
{
    /// <summary>
    /// NS object converter is a helper class that helps to convert NSObjects into
    /// C# objects
    /// </summary>
    public static class NSObjectConverter
    {
        #region Static Methods
        /// <summary>
        /// Converts to an object.
        /// </summary>
        /// <returns>The object.</returns>
        /// <param name="nsO">Ns o.</param>
        /// <param name="targetType">Target type.</param>
        public static Object ToObject (NSObject nsO, Type targetType)
        {
            if (nsO is NSString) {
                return nsO.ToString ();
            }

            if (nsO is NSDate) {
                var nsDate = (NSDate)nsO;
                return DateTime.SpecifyKind ((DateTime)nsDate, DateTimeKind.Unspecified);
            }

            if (nsO is NSDecimalNumber) {
                return decimal.Parse (nsO.ToString (), CultureInfo.InvariantCulture);
            }

            if (nsO is NSNumber) {
                var x = (NSNumber)nsO;

                switch (Type.GetTypeCode (targetType)) {
                case TypeCode.Boolean:
                    return x.BoolValue;
                case TypeCode.Char:
                    return Convert.ToChar (x.ByteValue);
                case TypeCode.SByte:
                    return x.SByteValue;
                case TypeCode.Byte:
                    return x.ByteValue;
                case TypeCode.Int16:
                    return x.Int16Value;
                case TypeCode.UInt16:
                    return x.UInt16Value;
                case TypeCode.Int32:
                    return x.Int32Value;
                case TypeCode.UInt32:
                    return x.UInt32Value;
                case TypeCode.Int64:
                    return x.Int64Value;
                case TypeCode.UInt64:
                    return x.UInt64Value;
                case TypeCode.Single:
                    return x.FloatValue;
                case TypeCode.Double:
                    return x.DoubleValue;
                }
            }

            if (nsO is NSValue) {
                var v = (NSValue)nsO;

                if (targetType == typeof(IntPtr)) {
                    return v.PointerValue;
                }

                if (targetType == typeof(CGSize)) {
                    return v.SizeFValue;
                }

                if (targetType == typeof(CGRect)) {
                    return v.RectangleFValue;
                }

                if (targetType == typeof(CGPoint)) {
                    return v.PointFValue;
                }
            }

            return nsO;
        }

        /// <summary>
        /// Convert to string
        /// </summary>
        /// <returns>The string.</returns>
        /// <param name="nsO">Ns o.</param>
        public static string ToString(NSObject nsO) {
            return (string)ToObject (nsO, typeof(string));
        }

        /// <summary>
        /// Convert to date time
        /// </summary>
        /// <returns>The date time.</returns>
        /// <param name="nsO">Ns o.</param>
        public static DateTime ToDateTime(NSObject nsO){
            return (DateTime)ToObject (nsO, typeof(DateTime));
        }

        /// <summary>
        /// Convert to decimal number
        /// </summary>
        /// <returns>The decimal.</returns>
        /// <param name="nsO">Ns o.</param>
        public static decimal ToDecimal(NSObject nsO){
            return (decimal)ToObject (nsO, typeof(decimal));
        }

        /// <summary>
        /// Convert to boolean
        /// </summary>
        /// <returns><c>true</c>, if bool was toed, <c>false</c> otherwise.</returns>
        /// <param name="nsO">Ns o.</param>
        public static bool ToBool(NSObject nsO){
            return (bool)ToObject (nsO, typeof(bool));
        }

        /// <summary>
        /// Convert to character
        /// </summary>
        /// <returns>The char.</returns>
        /// <param name="nsO">Ns o.</param>
        public static char ToChar(NSObject nsO){
            return (char)ToObject (nsO, typeof(char));
        }

        /// <summary>
        /// Convert to integer
        /// </summary>
        /// <returns>The int.</returns>
        /// <param name="nsO">Ns o.</param>
        public static int ToInt(NSObject nsO){
            return (int)ToObject (nsO, typeof(int));
        }

        /// <summary>
        /// Convert to float
        /// </summary>
        /// <returns>The float.</returns>
        /// <param name="nsO">Ns o.</param>
        public static float ToFloat(NSObject nsO){
            return (float)ToObject (nsO, typeof(float));
        }

        /// <summary>
        /// Converts to double
        /// </summary>
        /// <returns>The double.</returns>
        /// <param name="nsO">Ns o.</param>
        public static double ToDouble(NSObject nsO){
            return (double)ToObject (nsO, typeof(double));
        }
        #endregion
    }
}

NSObjectConverter 응용 프로그램의 현재 상태를 파악 해야 할 때마다 사용 됩니다.The NSObjectConverter is used whenever the application needs to read the current state of a characteristic. 예를 들면 다음과 같습니다.For Example:

var value = NSObjectConverter.ToFloat (characteristic.Value);

위의 줄에 값을 변환 된 float 사용할 수 있는 다음 Xamarin에서 C# 코드.The above line converts the value into a float that can then be used in the Xamarin C# code.

수정 하는 HMCharacteristic, 호출 해당 WriteValue 메서드의 새 값을 래핑합니다를 NSObject.FromObject 호출 합니다.To modify a HMCharacteristic, call its WriteValue method and wrap the new value in a NSObject.FromObject call. 예를 들면 다음과 같습니다.For Example:

Characteristic.WriteValue(NSObject.FromObject(value),(err) =>{
    // Was there an error?
    if (err!=null) {
        // Yes, inform user
        AlertView.PresentOKAlert("Update Error",err.LocalizedDescription,Controller);
    }
});

경우는 err 속성은 null, 오류가 발생 했으며 사용자에 게 표시 합니다.If the err property is not null, an error has occurred and should be presented to the user.

테스트 특성 값 변경Testing Characteristic Value Changes

작업할 때 HMCharacteristics 시뮬레이션 된 보조 프로그램을 수정 합니다 Value HomeKit 액세서리 시뮬레이터 내에서 속성을 모니터링할 수 있습니다.When working with HMCharacteristics and simulated accessories, modifications to the Value property can be monitored inside the HomeKit Accessory Simulator.

사용 하 여 합니다 HomeKitIntro HomeKit 액세서리 시뮬레이터에서 앱 실제 iOS 장치 하드웨어를 특성의 값으로 변경 될 때까지 실행 거의 즉시 이해 되어야 합니다.With the HomeKitIntro app running on real iOS Device Hardware, changes to a characteristic’s value should be seen nearly instantly in the HomeKit Accessory Simulator. 예를 들어 iOS 앱에서 광원의 상태를 변경 합니다.For example, changing the state of a light in the iOS app:

HomeKit 액세서리 시뮬레이터에서 광원의 상태를 변경 해야 합니다.Should change the state of the light in the HomeKit Accessory Simulator. 값 변경 되지 않는 경우 새 특성 값을 작성 하는 경우 오류 메시지의 상태를 확인 하 고 접근자에 계속 연결할 수 있는지 확인 합니다.If the value does not change, check the state of the error message when writing new characteristic values and ensure that the accessory is still reachable.

고급 HomeKit 기능Advanced HomeKit Features

이 문서에서는 Xamarin.iOS 앱에 HomeKit 액세서리를 사용 하는 데 필요한 기본 기능 설명 했습니다.This article has covered the basic features required for working with HomeKit accessories in a Xamarin.iOS app. 그러나이 소개에서 다루지 않는 HomeKit의 몇 가지 고급 기능이 있습니다.However, there are several advanced features of HomeKit that are not covered in this introduction:

  • 대화방 -최종 사용자가 회의실에 사용 하도록 설정 하는 HomeKit 액세서리 구성 필요에 따라 수 있습니다.Rooms - HomeKit enabled accessories can optionally organized into rooms by the end user. 이렇게 하면 쉽게 이해 하 고 사용 하 여 작업 사용자는 있는 accessories HomeKit.This allows HomeKit to present accessories in a way that's easy for the user to understand and work with. 만들고 방 유지 관리에 대 한 자세한 내용은 Apple의을 참조 하세요 HMRoom 설명서.For more information on creating and maintaining rooms, see Apple’s HMRoom documentation.
  • 영역 -방 수 최종 사용자가 필요에 따라 영역으로 구성 하는 수입니다.Zones - Rooms can optionally be organized into zones by the end user. 영역은 사용자는 하나의 단위로 처리할 수 있습니다 하는 대화방의 컬렉션을 가리킵니다.A zone refers to a collection of rooms that the user might treat as a single unit. 예: Upstairs Downstairs 또는 지하실 합니다.For example: Upstairs, Downstairs or Basement. 마찬가지로 HomeKit을 제공 하 여 최종 사용자에 게 가장 적합 한 방식으로 보조 프로그램을 사용 하 여 작업할 수 있습니다.Again, this allows HomeKit to present and work with accessories in a way that makes sense to the end user. 만들고 영역을 유지 관리에 대 한 자세한 내용은 Apple의을 참조 하세요 HMZone 설명서.For more information on creating and maintaining zones, see Apple’s HMZone documentation.
  • 작업 및 작업 설정 -작업 액세서리 서비스 특성을 수정 하 고 집합으로 그룹화 할 수 있습니다.Actions and Action Sets - Actions modify accessory service characteristics and can be grouped into sets. 작업 집합 보조 프로그램 그룹을 제어 하 고 해당 작업을 조정 하는 스크립트와 작동 합니다.Action Sets act as scripts to control a group of accessories and coordinate their actions. 예를 들어, "조사식 TV" 스크립트를 수 있습니다는 블라인드, 조명 dim 닫고는 텔레비전과 해당 사운드 시스템을 켭니다.For example, a "Watch TV" script might close the blinds, dim the lights, and turn on the television and its sound system. 만들기 및 작업 및 작업 집합을 유지 관리 하는 방법에 대 한 자세한 내용은 Apple의을 참조 하세요 HMAction 하 고 HMActionSet 설명서.For more information about creating and maintaining Actions and Action Sets, see Apple’s HMAction and HMActionSet documentation.
  • 트리거 -하나 트리거를 활성화할 수 있습니다 또는 자세한 동작 설정할 때 지정된 된 조건 집합이 충족 합니다.Triggers - A trigger can activate one or more Action Set when a given set of conditions have been met. 예를 들어 portch light 설정 하 고 외부 어두운 가져오면 모든 외부 도어가 잠금.For example, turn on the portch light and lock all external doors when it gets dark outside. 만들기 및 트리거를 유지 관리 하는 방법에 대 한 자세한 내용은 Apple의을 참조 하세요 HMTrigger 설명서.For more information about creating and maintaining Triggers, see Apple’s HMTrigger documentation.

다음 Apple로 쉽게 구현할 수 해야 하므로 위에서 설명한 동일한 기술을 사용 하는 이러한 기능을 HomeKitDeveloper 가이드하십시오 HomeKit 사용자 인터페이스 지침 HomeKit 프레임 워크 참조합니다.Since these features use the same techniques presented above, they should be easy to implement by following Apple's HomeKitDeveloper Guide, HomeKit User Interface Guidelines and HomeKit Framework Reference.

HomeKit 앱 검토 지침HomeKit App Review Guidelines

ITunes 앱 스토어에에서 릴리스할 iTunes Connect에 설정 된 Xamarin.iOS 앱을 HomeKit를 제출 하기 전에 HomeKit 사용 앱에 대 한 Apple의 지침을 따르는 확인 합니다.Before submitting a HomeKit enabled Xamarin.iOS app to iTunes Connect for release in the iTunes App Store, ensure that you follow Apple's guidelines for HomeKit enabled apps:

  • 앱의 주 목적은 해야 HomeKit 프레임 워크를 사용 하는 경우 홈 자동화 되어야 합니다.The app's primary purpose must be home automation if using the HomeKit framework.
  • 앱 마케팅 텍스트 HomeKit 사용 되 고 개인 정보 취급 방침을 제공 해야 합니다는 사용자에 알려야 합니다.The app's marketing text must notify users that HomeKit is being used and they must provide a privacy policy.
  • 사용자 정보를 수집 하거나 HomeKit를 사용 하 여 광고를 위해 엄격 하 게 사용할 수 없습니다.Gathering user information or using HomeKit for advertising is strictly prohibited.

전체에 대 한 지침을 검토, Apple의를 참조 하세요 앱 스토어 검토 지침합니다.For the full review guidelines, please see Apple's App Store Review Guidelines.

새로운 iOS 9의 기능What's New in iOS 9

Apple에에 대 한 변경 및 추가 HomeKit ios 9:Apple has made the following changes and additions to HomeKit for iOS 9:

  • 기존 개체를 유지 관리할 -홈 관리자는 기존 액세서리 수정 하는 경우 (HMHomeManager) 수정 된 특정 항목의 알려줍니다.Maintaining Existing Objects - If an existing accessory is modified, the Home Manager (HMHomeManager) will inform you of the specific item that was modified.
  • 영구 식별자 -이제 모든 관련 HomeKit 클래스를 포함 한 UniqueIdentifier HomeKit에서 지정된 된 항목을 고유 하 게 식별 하는 속성이 앱 (또는 동일한 앱의 인스턴스)를 사용 합니다.Persistent Identifiers - All relevant HomeKit classes now include a UniqueIdentifier property to uniquely identify a given item across HomeKit enabled apps (or instances of the same app).
  • 사용자 관리 -주 사용자의 홈 HomeKit 장치에 액세스할 수 있는 사용자를 통해 사용자 관리를 제공 하는 기본 제공 뷰 컨트롤러를 추가 합니다.User Management - Added a built-in view controller to provide user management over users that have access to the HomeKit devices in the primary user's home.
  • 사용자 기능 -HomeKit 사용자에 게 이제 HomeKit를 사용 하는 기능을 제어 하는 권한 집합이 고 HomeKit 액세서리를 사용 하도록 설정 합니다.User Capabilities - HomeKit users now have a set of privileges that control what functions they are able to use in HomeKit and HomeKit enabled accessories. 앱만 현재 사용자에 게 관련 기능을 표시 됩니다.Your app should only display relevant capabilities to the current user. 예를 들어 한 관리자만 다른 사용자를 유지 하기 위해 수 있어야 합니다.For example, only an admins should be able to maintain other users.
  • 백그라운드에서 미리 정의 된 -평균 HomeKit 사용자에 대해 발생 하는 4 개의 일반적인 이벤트에 대 한 미리 정의 된 자동으로 만들었습니다. 시작, 유지, 반환, 침대 가십시오.Predefined Scenes - Predefined scenes have been created for four common events that occur for the average HomeKit user: Get Up, Leave, Return, Go to Bed. 이러한 미리 정의 된 장면 집에서 삭제할 수 없습니다.These predefined scenes cannot be deleted from a home.
  • 장면 및 Siri -Siri iOS 9 및 수의 백그라운드에서 HomeKit에 정의 된 모든 장면 이름을 알 지원이 향상 되었습니다.Scenes and Siri - Siri has deeper support for Scenes in iOS 9 and can recognize the name of any Scene defined in HomeKit. 사용자는 해당 이름을 Siri 말하기 하면 장면을 실행할 수 있습니다.A user can execute a scene simply by speaking its name to Siri.
  • 보조 범주 -미리 정의 된 범주 집합을 모든 Accessories 및 홈에 추가 되 고 액세서리의 형식을 식별 하는 데 도움이 됩니다에 추가 되었거나 앱 내에서 작업 합니다.Accessory Categories - A set of predefined categories has been added to all Accessories and helps to identify the type of Accessory being added to a Home or worked on from within your app. 이러한 새 범주는 액세서리 설치 하는 동안 사용할 수 있습니다.These new categories are available during Accessory setup.
  • Apple Watch 지원 -HomeKit watchOS에 대 한 출시 되었습니다. 및 Apple Watch 시계 근처 중인 iPhone 없이 HomeKit 사용 장치 컨트롤 수 있게 됩니다.Apple Watch Support - HomeKit is now available for watchOS and the Apple Watch will be able to control HomeKit enabled devices without an iPhone being near the watch. WatchOS 용 HomeKit는 다음과 같은 기능을 지원합니다. 보기 집, 보조 프로그램을 제어 하 고 백그라운드에서 실행 합니다.HomeKit for watchOS supports the following capabilities: Viewing Homes, Controlling Accessories and Executing Scenes.
  • 새 이벤트 트리거 유형은 -8, iOS 9 지원 이벤트 트리거 액세서리 상태 (예: 센서 데이터) 또는 지리적 위치에 따라 이제 iOS에서 지원 되는 타이머 형식 트리거 외에도 합니다.New Event Trigger Type - In addition to the timer type triggers supported in iOS 8, iOS 9 now supports Event Triggers based on Accessory State (such as sensor data) or geolocation. 이벤트 트리거를 사용 하 여 NSPredicates 실행을 위한 조건을 설정 합니다.Event Triggers use NSPredicates to set conditions for their execution.
  • 원격 액세스 -사용 하 여 원격 액세스, 사용자가 제어할 수 이제 해당 HomeKit 원격 위치에 있는 집와 멀리 떨어져 있을 때 Automation Accessories 홈 사용 하도록 설정 합니다.Remote Access - With Remote Access, the user is now able to control their HomeKit enabled Home Automation Accessories when they are away from the house at a remote location. IOS 8에서에서 3 세대 집에서 Apple TV를 사용자가 경우에 지원 되었습니다이 합니다.In iOS 8 this was only supported if the user had a 3rd generation Apple TV in the home. Ios 9에서이 제한을 리프트 및 원격 액세스 iCloud 및 HomeKit 액세서리 프로토콜 (HAP)을 통해 지원 됩니다.In iOS 9, this limitation is lifted and remote access is supported via iCloud and the HomeKit Accessory Protocol (HAP).
  • 새 에너지 BLE (Bluetooth Low) 기능 -HomeKit는 이제 에너지 BLE (Bluetooth Low) 프로토콜을 통해 통신할 수 있는 더 많은 액세서리 형식을 지원 합니다.New Bluetooth Low Energy (BLE) Abilities - HomeKit now supports more accessory types that can communicate via the Bluetooth Low Energy (BLE) protocol. HAP Secure Tunneling 사용 HomeKit 액세서리 노출할 수 있습니다 다른 Bluetooth 액세서리 Wi-fi 상에 서 (범위를 벗어나므로 Bluetooth) 하는 경우.Using HAP Secure Tunneling, a HomeKit Accessory can expose another Bluetooth Accessory over Wi-Fi (if it is out of Bluetooth range). IOS 9, BLE Accessories에는 알림 및 메타 데이터에 대 한 완벽 하 게 지원 합니다.In iOS 9, BLE Accessories have full support for notifications and metadata.
  • 새 액세서리 범주 -Apple iOS 9에서에서 다음 새 보조 범주를 추가 합니다. 창 Coverings, 고 문 및 Windows, 경보 시스템, 센서 및 프로그래밍 가능 스위치입니다.New Accessory Categories - Apple added the following new Accessory Categories in iOS 9: Window Coverings, Motorized Doors and Windows, Alarm Systems, Sensors and Programmable Switches.

HomeKit ios 9의 새로운 기능에 대 한 자세한 내용은 Apple의를 참조 하세요 HomeKit 인덱스 하 고 What's New in HomeKit 비디오.For more information about the new features of HomeKit in iOS 9, please see Apple's HomeKit Index and What's New in HomeKit video.

요약Summary

이 문서는 Apple HomeKit 가정 자동화 프레임 워크를 도입 했습니다.This article has introduced Apple's HomeKit home automation framework. 설정 하 고 HomeKit 액세서리 시뮬레이터를 사용 하 여 테스트 장치를 구성 하는 방법 및 검색, 통신 및 HomeKit를 사용 하 여 홈 자동화 장치를 제어 하기 위한 간단한 Xamarin.iOS 앱을 만드는 방법에 알아보았습니다.It showed how to setup and configure test devices using the HomeKit Accessory Simulator and how to create a simple Xamarin.iOS app to discover, communicate with and control home automation devices using HomeKit.