<!--
{
  "availability" : [

  ],
  "documentType" : "symbol",
  "framework" : "HomeExtensions",
  "identifier" : "/documentation/HomeExtensions",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "HomeExtensions"
    ],
    "preciseIdentifier" : "HomeExtensions"
  },
  "title" : "HomeExtensions"
}
-->

# HomeExtensions

Add custom UI to the Home app, to configure and control accessories.

## Overview

Use the Home Extensions framework
to make accessories that you manufacture
available in the Home app for people to set up, control, and configure.
You can provide accessory settings,
create custom SwiftUI views for configuration,
and offer supporting content.

> Important:
> Home Extensions is available at compile time only.
> The framework’s functionality will be available at a later date.

To use this framework,
add a new target in Xcode by selecting File > New > Target,
and then choose Home Extension.
If you’re configuring your project manually, do the following:

- Add the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.home> entitlement to your app extension.
- Add the `EXAppExtensionAttributes` key in the Info pane in Xcode
  for your app extension.
  Its value is a dictionary with `EXExtensionPointIdentifier` as a key
  and `com.apple.Home.HomeExtension` as a value.
- Add the `NSHomeExtensionManufacturer` key in the Info pane in Xcode
  for your app.
  Its value is a string containing the accessory manufacturer’s name.

## Topics

### Essentials

[`protocol HomeExtension`](/documentation/HomeExtensions/HomeExtension)

A type that represents an app extension for the Home app.

[`class HomeContext`](/documentation/HomeExtensions/HomeContext)

The context in which the Home app launches your extension, including the selected home and accessory.

[`class HomeNavigator`](/documentation/HomeExtensions/HomeNavigator)

An object that manages navigation for your extension’s content in the Home app.

### Displaying accessory configuration

[`protocol HomeAccessorySettingsProvider`](/documentation/HomeExtensions/HomeAccessorySettingsProvider)

A type that reads and writes an accessory’s settings.

[`protocol HomeAccessorySettingsContainer`](/documentation/HomeExtensions/HomeAccessorySettingsContainer)

A snapshot of an accessory’s settings and their current values.

[`struct AnyHomeAccessorySettingsContainer`](/documentation/HomeExtensions/AnyHomeAccessorySettingsContainer)

[`protocol HomeAccessorySettingsContext`](/documentation/HomeExtensions/HomeAccessorySettingsContext)

A type that holds the resources that your settings provider needs to communicate with an accessory.

[`struct HomeAccessorySettings`](/documentation/HomeExtensions/HomeAccessorySettings)

Accessory settings that your extension provides to the Home app.

[`struct HomeAccessoryConfiguration`](/documentation/HomeExtensions/HomeAccessoryConfiguration)

Content that people use to configure an accessory.

### Defining accessory settings

[`protocol HomeAccessorySetting`](/documentation/HomeExtensions/HomeAccessorySetting)

A type that represents a single accessory setting.

[`struct HomeAccessorySettingLabel`](/documentation/HomeExtensions/HomeAccessorySettingLabel)

The text that the Home app displays for a setting or an option.

[`class HomeAccessoryEnumSetting`](/documentation/HomeExtensions/HomeAccessoryEnumSetting)

A setting that offers a choice among several options.

[`protocol HomeAccessoryEnumSettingConstant`](/documentation/HomeExtensions/HomeAccessoryEnumSettingConstant)

A type whose cases are the options for an enumeration setting.

[`class HomeAccessoryInformationSetting`](/documentation/HomeExtensions/HomeAccessoryInformationSetting)

A read-only setting that displays a label and a value.

[`class HomeAccessoryRangeSetting`](/documentation/HomeExtensions/HomeAccessoryRangeSetting)

A setting that represents a numeric value within a range.

[`protocol HomeAccessoryRangeSettingDescriptor`](/documentation/HomeExtensions/HomeAccessoryRangeSettingDescriptor)

A type that describes the bounds of a range setting.

[`class HomeAccessoryTextFieldSetting`](/documentation/HomeExtensions/HomeAccessoryTextFieldSetting)

A setting that contains a single line of editable text.

[`class HomeAccessoryToggleSetting`](/documentation/HomeExtensions/HomeAccessoryToggleSetting)

A setting that offers a binary choice, such as on or off.

### Guides and troubleshooting content

[`protocol HomeContent`](/documentation/HomeExtensions/HomeContent)

A type that represents content that your extension provides to the Home app.

[`struct HomeContentID`](/documentation/HomeExtensions/HomeContentID)

An identifier for a piece of content that your extension provides.

[`struct HomeAccessoryHelpGuide`](/documentation/HomeExtensions/HomeAccessoryHelpGuide)

Help content about a specific topic for an accessory.

[`struct HomeAccessoryTroubleshooting`](/documentation/HomeExtensions/HomeAccessoryTroubleshooting)

Content that helps people resolve problems with an accessory.

[`class GuideStepHostViewController`](/documentation/HomeExtensions/GuideStepHostViewController)



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)