# 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` |