| # Matter Development and Testing with/on Apple Devices |
| |
| ### Overview |
| |
| - To develop a Matter Application, learn more about how to develop with Matter |
| on Apple's platforms [here](https://developer.apple.com/apple-home/matter/) |
| |
| - Additional documentation about the Matter Support API is |
| [here](https://developer.apple.com/documentation/mattersupport) |
| |
| ### Filing Issues |
| |
| - An issues related to Apple Home, or Development on Apple's Platforms should |
| be reported using Feedback Assistant as described |
| [below](#providing-feedback-to-apple) |
| |
| - Any issues related to the Matter SDK should be reported to the project |
| [here](https://github.com/project-chip/connectedhomeip/issues) |
| |
| ## Source Compatibility |
| |
| Each release of an Apple operating system, or developer preview release may |
| bring a new SHA from this repository, which can be helpful for determining which |
| changes are present in the release for testing. |
| |
| Listed are the Current SHAs: |
| |
| - Latest macOS/tvOS/iOS/iPadOS: |
| [`2ee90eba27676950fa2f4ef96597d9696f510d5d`](https://github.com/project-chip/connectedhomeip/commits/2ee90eba27676950fa2f4ef96597d9696f510d5d) |
| - Larger list of SHAs are [here](#release-to-sha-mappings) |
| |
| ## Supported Platforms for Matter Device Testing |
| |
| - Matter is supported by iOS/tvOS/iPadOS/watchOS/HomePod/AppleTV starting with |
| 16.1 |
| - To test your Matter device with Apple's platforms, all you need is a device |
| with a supported OS |
| - Pairing via QR Code or Setup Code is supported directly from the Home App, |
| or any third party Application |
| - Please proceed to |
| [this section](#testing-your-matter-device-with-apple-home) if you're |
| developing a new device |
| - If your device has already been certified, or already fully implemented |
| and just awaiting testing, you can just try pairing to Apple Home |
| directly |
| - Please provide [feedback to Apple](#providing-feedback-to-apple) if you |
| encounter any issues |
| |
| ## Supported Platforms for Application Development |
| |
| For Context: This is a mapping of platform to OS |
| |
| - iPhone _(iOS)_ |
| - iPad _(iPadOS)_ |
| - mac _(macOS)_ |
| - AppleTV _(tvOS)_ |
| - HomePod _(tvOS)_ |
| - Apple Watch _(watchOS)_ |
| |
| ### Setup Requirements for Application Development |
| |
| - Devices must support BLE pairing, and have it enabled |
| - An iPhone or iPad running iOS/iPadOS at least 16.1. |
| - An Apple TV or HomePod running at least tvOS 16.1. |
| - The iPhone or iPad with the |
| [Matter Developer Profile](#profile-installation) must belong to the same |
| iCloud account as the Apple TV or HomePod with the Matter |
| [Matter Developer Profile](#profile-installation). |
| - A test iCloud account is highly recommended for Matter development to avoid |
| interference with existing homes. |
| - To pair and control Matter Thread devices, you'll need to have a HomePod |
| Mini, Apple TV 4K, or another device that supports Thread |
| - Enable Developer Mode during the development phase of your app by following |
| the steps at |
| [Enabling Developer Mode](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) |
| on a device. |
| |
| ## Profile Installation |
| |
| #### Reminder: This is only needed for Application Development |
| |
| ### Install the Matter Developer Profile on your iPhone or iPad |
| |
| ##### Note: For more detailed profile installation instructions, refer to [here](https://developer.apple.com/bug-reporting/profiles-and-logs) |
| |
| ##### Note: The profile will expire automatically after some time |
| |
| 1. Download the |
| [Matter Developer Profile](https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig) |
| 2. Email the profile to an account that is configured on your device running |
| iOS/iPadOS 16.1 (or greater) |
| 3. Selecting the profile in Mail on your iOS/iPadOS 16.1 (or greater) device |
| will present an option to install the profile |
| |
| ##### Note: Make sure to head back to system preferences, and you'll see an option to verify and install the profile near the top |
| |
| 4. (Optional) You may be prompted if you want to install it on other devices. |
| Follow the prompts to install on the HomePod, Apple TV, etc., where you have |
| the described issue and reproduce it. |
| |
| 5. Restart the device |
| |
| ### Install the Matter Profile on your HomePod |
| |
| ##### Note: The profile will expire automatically after some time |
| |
| 1. Download the |
| [Matter Developer Profile](https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig) |
| 2. Email the profile to an account that is configured on your device running |
| iOS/iPadOS 16.1 (or greater) |
| 3. Selecting the profile in Mail on your iOS/iPadOS 16.1 (or greater) device |
| will present an option to install the profile on the HomePod |
| 4. Restart the device |
| |
| ### Install the Matter Profile on your Apple TV |
| |
| ##### Note: The profile will expire automatically after some time |
| |
| 1. Download the |
| [profile](https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig) |
| 2. Use |
| [Apple Configurator](https://apps.apple.com/us/app/apple-configurator/id1037126344?mt=12) |
| to transfer the profile to the Apple TV |
| 3. Restart the device |
| |
| ### Enable Developer Mode on your Apple Device |
| |
| ##### Note: Developer mode is a great way to get logs from your device as well as enable other useful developer tools |
| |
| To enable developer mode, please follow the instructions |
| [here](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) |
| |
| ## Using chip-tool on macOS, or CHIP Tool on iOS |
| |
| Pairing Matter Accessory using Open Source Matter Darwin chip-tool and iOS |
| chip-tool will require installing the |
| [Bluetooth Central Matter Client Developer mode profile](https://developer.apple.com/services-account/download?path=/iOS/iOS_Logs/EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig) |
| on MacOS or iOS/iPadOS. |
| |
| - Download the Bluetooth Central Matter Client Developer Mode profile and |
| install it on a supported system. |
| |
| - For _macOS_, Profile can be installed via Settings->Privacy & |
| Security->Profiles |
| - For _iOS/iPadOS_, If necessary, email the profile or use AirDrop to |
| transfer the profile to the _iOS/iPadOS_ device. |
| |
| - Restart your system |
| - For _iOS/iPadOS_, enable Developer Mode. Refer to |
| [this developer page](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) |
| - Compile chip-tool for macOS or CHIP Tool for iOS |
| |
| ## Supported Device Types in Apple Home |
| |
| ##### Note: Not exhaustive, and may be out of date, see [below](#apple-home-development-guide) for more information |
| |
| | Type | Decimal | HEX | Notes | |
| | ----------------------- | ------- | ---- | ------------------------------------------------ | |
| | On/Off Light | 256 | 0100 | | |
| | Dimming Light | 257 | 0101 | | |
| | On/Off Plug-In Unit | 266 | 010A | | |
| | Dimmable Plug-In Unit | 267 | 010B | | |
| | On/Off Light Switch | 259 | 0103 | Requires both On/Off Client and Server | |
| | Dimmer Switch | 260 | 0104 | Requires both On/Off Client and Server | |
| | Generic Switch (button) | 15 | 000F | Supports momentary switch only, and not latching | |
| | Contact Sensor | 21 | 0015 | | |
| | Light Sensor | 262 | 0106 | | |
| | Occupancy Sensor | 263 | 0107 | | |
| | Temperature Sensor | 770 | 0302 | | |
| | Humidity Sensor | 775 | 0307 | | |
| | Air Quality Sensor | 44 | 002C | | |
| | Door Lock | 10 | 000A | | |
| | Window Covering | 514 | 0202 | | |
| | Heating/Cooling Unit | 768 | 0300 | | |
| | Thermostat | 769 | 0301 | | |
| | Fan | 43 | 002B | | |
| | Air Purifier | 45 | 002D | | |
| | Temperature Color Light | 268 | 010C | | |
| | Enhanced Color Light | 269 | 010D | | |
| | Bridges | 14 | 000E | | |
| | Robot Vacuum Cleaner | 116 | 0074 | Announced, not yet supported | |
| |
| ## Additional Device Type Support on Apple's Platforms |
| |
| Apple's platforms support all device types available in the Matter SDK, so |
| developers can use Matter.framework to develop their own applications that can |
| add devices to Apple Home, or create their own Fabric to manage devices as well. |
| |
| Please see documentation about `-[HMAccessory matterNodeID]` |
| [here](https://developer.apple.com/documentation/homekit/hmaccessory/matternodeid-5zfqo) |
| which allows you to use Matter.framework to interact with Matter Devices |
| directly that are paired into Apple Home. |
| |
| ## Apple Home Development Guide |
| |
| Please see [here](https://developer.apple.com/apple-home/) for more general |
| information about developing an Application or a Device for Apple Home. This |
| includes information about |
| [best practices](https://developer.apple.com/apple-home/downloads/Matter-Accessory-Best-Practices-for-Apple-Home.pdf), |
| [platform developer API](https://developer.apple.com/apple-home/matter/), |
| [OTA Updates](https://developer.apple.com/accessories/Apple-Matter-OTA-User-Guide.pdf), |
| general adoption Q&A, and the "Works with Apple Home" badge. |
| |
| ## General Matter Platform Development Guide |
| |
| ##### Getting the SDK Ready |
| |
| ##### Note: Most platforms have very similar, if not the same configuration requirements |
| |
| 1. Checkout and setup |
| [Matter repo](https://github.com/project-chip/connectedhomeip.git) as per the |
| instructions above. |
| 2. Find and edit one of the platform |
| [examples](https://github.com/project-chip/connectedhomeip/tree/master/examples) |
| to support the fixed device types above. |
| 3. Read the [platform guides](README.md) on how set up the hardware |
| - There is a list of more detailed guides [here](#platform-guides) |
| |
| ## Testing your Matter Device with Apple Home |
| |
| 1. Clone the |
| [Matter repository](https://github.com/project-chip/connectedhomeip.git) |
| 2. Checkout the specific commit hash (from [above](#source-compatibility)) for |
| maximum compatibility with your installed release: |
| - Example command for SHA `2ee90eba27676950fa2f4ef96597d9696f510d5d`: |
| `$ git checkout 2ee90eba27676950fa2f4ef96597d9696f510d5d` |
| |
| In order to work with iOS/iPadOS/tvOS, device types as defined in the Matter |
| Device Library spec are used to determine accessory categories. Ensure the right |
| device type is set for each endpoint. |
| |
| - For the `all-clusters-app` as an example, this can be set in |
| `FIXED_DEVICE_TYPES`, `FIXED_DEVICE_TYPE_OFFSETS`, and |
| `FIXED_DEVICE_TYPE_LENGTHS` in `endpoint_config.h` |
| - Here's an example from `all-clusters-app` (feel free to search for more in |
| the tree by looking for the above keys) |
| |
| Example: |
| |
| ``` |
| // Array of device types |
| #define FIXED_DEVICE_TYPES |
| { |
| { 0x0016, 1 }, { 0x0100, 1 }, { 0x0100, 1 }, { 0xF002, 1 } |
| } |
| |
| // Array of device type offsets |
| #define FIXED_DEVICE_TYPE_OFFSETS |
| { |
| 0, 1, 2, 3 |
| } |
| |
| // Array of device type lengths |
| #define FIXED_DEVICE_TYPE_LENGTHS |
| { |
| 1, 1, 1, 1 |
| } |
| ``` |
| |
| ### Examples of how to setup devices |
| |
| ##### Case study 1: Configuring a development M5Stack, as a multi-device to work with iOS/iPadOS/tvOS |
| |
| ##### Note: These instructions are specific to getting started with the (Matter-provided) `all-clusters-app` on an ESP32-based M5Stack, however can be generalised to work on most platforms ([more listed below](#platform-guides)) |
| |
| 1. Checkout and setup |
| [Matter repo](https://github.com/project-chip/connectedhomeip.git) as per the |
| instructions above. |
| 2. Follow |
| [these](https://github.com/project-chip/connectedhomeip/tree/master/examples/all-clusters-app/esp32) |
| instructions to initialize your development environment, compile the firmware |
| and flash your hardware. |
| |
| ##### Case study 2: a development Nordic board (nRF52840), working as a light to work with iOS/iPadOS/tvOS |
| |
| ##### Note: These instructions are specific to getting started with the (Matter-provided) "lighting-app" on an Nordic-based NRF52840, however can be generalised to work on most platforms (more listed below) |
| |
| 1. Checkout and setup |
| [Matter repo](https://github.com/project-chip/connectedhomeip.git) as per the |
| instructions above. |
| |
| 2. Follow |
| [these instructions](https://github.com/project-chip/connectedhomeip/tree/master/examples/lighting-app/nrfconnect#readme) |
| initialize your development environment, compile the firmware and flash your |
| hardware. |
| |
| ### Platform Guides |
| |
| - [Bouffalo Lab](/examples/lighting-app/bouffalolab/README.md) |
| - [EFR32 Window Covering](/examples/window-app/silabs/README.md) |
| - [ESP32 All Clusters](/examples/all-clusters-app/esp32/README.md) |
| - [ESP32 Lighting](/examples/lighting-app/esp32/README.md) |
| - [ESP32 Temperature Sensor](/examples/temperature-measurement-app/esp32/README.md) |
| - [mbedOS](/examples/all-clusters-app/mbed/README.md) |
| - [nRF Connect All Clusters](../platforms/nrf/nrfconnect_examples_configuration.md) |
| - [nRF Connect Pump](/examples/pump-app/nrfconnect/README.md) |
| - [NXP Examples](../platforms/nxp/nxp_imx8m_linux_examples.md) |
| - [NXP](/examples/all-clusters-app/nxp/mw320/README.md) |
| - [Infineon CYW30739 Lighting](/examples/lighting-app/infineon/cyw30739/README.md) |
| - [Infineon PSoC6](/examples/all-clusters-app/infineon/psoc6/README.md) |
| - [Qorvo](/examples/lighting-app/qpg/README.md) |
| - [Silicon Labs](../platforms/silabs/silabs_getting_started.md) |
| - [Simulated Linux](./simulated_device_linux.md) |
| - [Telink](/examples/lighting-app/telink/README.md) |
| - [TI Platform](../platforms/ti/ti_matter_overview.md) |
| - [Tizen](/examples/lighting-app/tizen/README.md) |
| |
| ## Providing Feedback to Apple |
| |
| ##### Note: For profile installation instructions, refer to [here](#profile-installation) |
| |
| - File a feedback assistant ticket. |
| [About Feedback Assistant](https://developer.apple.com/bug-reporting/#feedback-assistant) |
| - Click this link, and log in using your account: |
| [File Feedback](https://feedbackassistant.apple.com/new-form-response) |
| - Choose iOS/iPadOS to file an issue |
| - Choose the area as Home App and fill in the details of the type of issue and |
| the description |
| - Please provide the following technical information: |
| - `sysdiagnose` logs for iPhone / iPad with the timestamp / time frame of |
| the issue |
| - `sysdiagnose` logs for all the Home Hubs (HomePod mini / HomePod / Apple |
| TV) with the timestamp / timeframe of the issue |
| - Accessory logs with the timestamp / timeframe of the issue |
| - mDNS network logs with timestamp / timeframe of the issue |
| - Video or screenshot describing the issue (optional but beneficial) |
| - Please make sure you download and install the profiles for iOS and tvOS as |
| provided here. The instructions are also in these links. |
| - iOS: |
| - [Apple Home Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=ios&name=homekit) |
| - [Network Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=ios&name=network) |
| - [mDNS Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=ios&name=mdns) |
| - tvOS: |
| - [Apple Home Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=tvos&name=homekit) |
| - [Network Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=tvos&name=network) |
| - [mDNS Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?platform=tvos&name=mdns) |
| - Any Thread device: |
| [Thread Profile](https://developer.apple.com/bug-reporting/profiles-and-logs/?name=HomeThread) |
| |
| ### Release to SHA Mappings |
| |
| | Platform | Release Version | SHA | |
| | -------- | --------------- | ------------------------------------------ | |
| | iOS | 17.6.1 | `2ee90eba27676950fa2f4ef96597d9696f510d5d` | |
| | iPadOS | 17.6.1 | `2ee90eba27676950fa2f4ef96597d9696f510d5d` | |
| | tvOS | 17.6 | `2ee90eba27676950fa2f4ef96597d9696f510d5d` | |
| | macOS | 14.6.1 | `2ee90eba27676950fa2f4ef96597d9696f510d5d` | |
| | iOS | 17.5.1 | `d09b5ac98f4d7d8b9f2c307f55ab5462576623a5` | |
| | iPadOS | 17.5.1 | `d09b5ac98f4d7d8b9f2c307f55ab5462576623a5` | |
| | tvOS | 17.5.1 | `d09b5ac98f4d7d8b9f2c307f55ab5462576623a5` | |
| | macOS | 14.5 | `d09b5ac98f4d7d8b9f2c307f55ab5462576623a5` | |
| | iOS | 16.7.8 | `83f7a2fe136e0b746db09f1d19e36c693a634b66` | |
| | iPadOS | 16.7.8 | `83f7a2fe136e0b746db09f1d19e36c693a634b66` | |