{"id":"b0cfcacb-8153-486f-9070-cf239961fff8","shortId":"eSGzvH","kind":"skill","title":"homekit","tagline":"Control smart-home accessories and commission Matter devices using HomeKit and MatterSupport. Use when managing homes/rooms/accessories, creating action sets or triggers, reading accessory characteristics, onboarding Matter devices, or building a third-party smart-home ecosystem ","description":"# HomeKit\n\nControl home automation accessories and commission Matter devices. HomeKit manages\nthe home/room/accessory model, action sets, and triggers. MatterSupport handles\ndevice commissioning into your ecosystem. Targets Swift 6.3 / iOS 26+.\n\n## Contents\n\n- [Setup](#setup)\n- [HomeKit Data Model](#homekit-data-model)\n- [Managing Accessories](#managing-accessories)\n- [Reading and Writing Characteristics](#reading-and-writing-characteristics)\n- [Action Sets and Triggers](#action-sets-and-triggers)\n- [Matter Commissioning](#matter-commissioning)\n- [MatterAddDeviceExtensionRequestHandler](#matteradddeviceextensionrequesthandler)\n- [Common Mistakes](#common-mistakes)\n- [Review Checklist](#review-checklist)\n- [References](#references)\n\n## Setup\n\n### HomeKit Configuration\n\n1. Enable the **HomeKit** capability in Xcode (Signing & Capabilities)\n2. Add `NSHomeKitUsageDescription` to Info.plist:\n\n```xml\n<key>NSHomeKitUsageDescription</key>\n<string>This app controls your smart home accessories.</string>\n```\n\n### MatterSupport Configuration\n\nFor Matter commissioning into your own ecosystem:\n\n1. Enable the **MatterSupport** capability\n2. Add a **MatterSupport Extension** target to your project\n3. Add the `com.apple.developer.matter.allow-setup-payload` entitlement if\n   your app provides the setup code directly\n\n### Availability Check\n\n```swift\nimport HomeKit\n\nlet homeManager = HMHomeManager()\n\n// HomeKit is available on iPhone, iPad, Apple TV, Apple Watch, Mac, and Vision Pro.\n// Authorization is handled through the delegate:\nhomeManager.delegate = self\n```\n\n## HomeKit Data Model\n\nHomeKit organizes home automation in a hierarchy:\n\n```text\nHMHomeManager\n  -> HMHome (one or more)\n       -> HMRoom (rooms in the home)\n            -> HMAccessory (devices in a room)\n                 -> HMService (functions: light, thermostat, etc.)\n                      -> HMCharacteristic (readable/writable values)\n       -> HMZone (groups of rooms)\n       -> HMActionSet (grouped actions)\n       -> HMTrigger (time or event-based triggers)\n```\n\n### Initializing the Home Manager\n\nCreate a single `HMHomeManager` and implement the delegate to know when\ndata is loaded. HomeKit loads asynchronously -- do not access `homes` until\nthe delegate fires.\n\n```swift\nimport HomeKit\n\nfinal class HomeStore: NSObject, HMHomeManagerDelegate {\n    let homeManager = HMHomeManager()\n\n    override init() {\n        super.init()\n        homeManager.delegate = self\n    }\n\n    func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {\n        // Safe to access manager.homes now\n        let homes = manager.homes\n        let primaryHome = manager.primaryHome\n        print(\"Loaded \\(homes.count) homes\")\n    }\n\n    func homeManager(\n        _ manager: HMHomeManager,\n        didUpdate status: HMHomeManagerAuthorizationStatus\n    ) {\n        if status.contains(.authorized) {\n            print(\"HomeKit access granted\")\n        }\n    }\n}\n```\n\n### Accessing Rooms\n\n```swift\nguard let home = homeManager.primaryHome else { return }\n\nlet rooms = home.rooms\nlet kitchen = rooms.first { $0.name == \"Kitchen\" }\n\n// Room for accessories not assigned to a specific room\nlet defaultRoom = home.roomForEntireHome()\n```\n\n## Managing Accessories\n\n### Discovering and Adding Accessories\n\n```swift\n// System UI for accessory discovery\nhome.addAndSetupAccessories { error in\n    if let error {\n        print(\"Setup failed: \\(error)\")\n    }\n}\n```\n\n### Listing Accessories and Services\n\n```swift\nfor accessory in home.accessories {\n    print(\"\\(accessory.name) in \\(accessory.room?.name ?? \"unassigned\")\")\n\n    for service in accessory.services {\n        print(\"  Service: \\(service.serviceType)\")\n\n        for characteristic in service.characteristics {\n            print(\"    \\(characteristic.characteristicType): \\(characteristic.value ?? \"nil\")\")\n        }\n    }\n}\n```\n\n### Moving an Accessory to a Room\n\n```swift\nguard let accessory = home.accessories.first,\n      let bedroom = home.rooms.first(where: { $0.name == \"Bedroom\" }) else { return }\n\nhome.assignAccessory(accessory, to: bedroom) { error in\n    if let error {\n        print(\"Failed to move accessory: \\(error)\")\n    }\n}\n```\n\n## Reading and Writing Characteristics\n\n### Reading a Value\n\n```swift\nlet characteristic: HMCharacteristic = // obtained from a service\n\ncharacteristic.readValue { error in\n    guard error == nil else { return }\n    if let value = characteristic.value as? Bool {\n        print(\"Power state: \\(value)\")\n    }\n}\n```\n\n### Writing a Value\n\n```swift\n// Turn on a light\ncharacteristic.writeValue(true) { error in\n    if let error {\n        print(\"Write failed: \\(error)\")\n    }\n}\n```\n\n### Observing Changes\n\nEnable notifications for real-time updates:\n\n```swift\ncharacteristic.enableNotification(true) { error in\n    guard error == nil else { return }\n}\n\n// In HMAccessoryDelegate:\nfunc accessory(\n    _ accessory: HMAccessory,\n    service: HMService,\n    didUpdateValueFor characteristic: HMCharacteristic\n) {\n    print(\"Updated: \\(characteristic.value ?? \"nil\")\")\n}\n```\n\n## Action Sets and Triggers\n\n### Creating an Action Set\n\nAn `HMActionSet` groups characteristic writes that execute together:\n\n```swift\nhome.addActionSet(withName: \"Good Night\") { actionSet, error in\n    guard let actionSet, error == nil else { return }\n\n    // Turn off living room light\n    let lightChar = livingRoomLight.powerCharacteristic\n    let action = HMCharacteristicWriteAction(\n        characteristic: lightChar,\n        targetValue: false as NSCopying\n    )\n    actionSet.addAction(action) { error in\n        guard error == nil else { return }\n        print(\"Action added to Good Night scene\")\n    }\n}\n```\n\n### Executing an Action Set\n\n```swift\nhome.executeActionSet(actionSet) { error in\n    if let error {\n        print(\"Execution failed: \\(error)\")\n    }\n}\n```\n\n### Creating a Timer Trigger\n\n```swift\nvar dateComponents = DateComponents()\ndateComponents.hour = 22\ndateComponents.minute = 30\n\nlet trigger = HMTimerTrigger(\n    name: \"Nightly\",\n    fireDate: Calendar.current.nextDate(\n        after: Date(),\n        matching: dateComponents,\n        matchingPolicy: .nextTime\n    )!,\n    timeZone: .current,\n    recurrence: dateComponents,  // Repeats daily at 22:30\n    recurrenceCalendar: .current\n)\n\nhome.addTrigger(trigger) { error in\n    guard error == nil else { return }\n\n    // Attach the action set to the trigger\n    trigger.addActionSet(goodNightActionSet) { error in\n        guard error == nil else { return }\n\n        trigger.enable(true) { error in\n            print(\"Trigger enabled: \\(error == nil)\")\n        }\n    }\n}\n```\n\n### Creating an Event Trigger\n\n```swift\nlet motionDetected = HMCharacteristicEvent(\n    characteristic: motionSensorCharacteristic,\n    triggerValue: true as NSCopying\n)\n\nlet eventTrigger = HMEventTrigger(\n    name: \"Motion Lights\",\n    events: [motionDetected],\n    predicate: nil\n)\n\nhome.addTrigger(eventTrigger) { error in\n    // Add action sets as above\n}\n```\n\n## Matter Commissioning\n\nUse `MatterAddDeviceRequest` to commission a Matter device into your ecosystem.\nThis is separate from HomeKit -- it handles the pairing flow.\n\n### Basic Commissioning\n\n```swift\nimport MatterSupport\n\nfunc addMatterDevice() async throws {\n    guard MatterAddDeviceRequest.isSupported else {\n        print(\"Matter not supported on this device\")\n        return\n    }\n\n    let topology = MatterAddDeviceRequest.Topology(\n        ecosystemName: \"My Smart Home\",\n        homes: [\n            MatterAddDeviceRequest.Home(displayName: \"Main House\")\n        ]\n    )\n\n    let request = MatterAddDeviceRequest(\n        topology: topology,\n        setupPayload: nil,\n        showing: .allDevices\n    )\n\n    // Presents system UI for device pairing\n    try await request.perform()\n}\n```\n\n### Filtering Devices\n\n```swift\n// Only show devices from a specific vendor\nlet criteria = MatterAddDeviceRequest.DeviceCriteria.vendorID(0x1234)\n\nlet request = MatterAddDeviceRequest(\n    topology: topology,\n    setupPayload: nil,\n    showing: criteria\n)\n```\n\n### Combining Device Criteria\n\n```swift\nlet criteria = MatterAddDeviceRequest.DeviceCriteria.all([\n    .vendorID(0x1234),\n    .not(.productID(0x0001))  // Exclude a specific product\n])\n```\n\n## MatterAddDeviceExtensionRequestHandler\n\nFor full ecosystem support, create a MatterSupport Extension. The extension\nhandles commissioning callbacks:\n\n```swift\nimport MatterSupport\n\nfinal class MatterHandler: MatterAddDeviceExtensionRequestHandler {\n\n    override func validateDeviceCredential(\n        _ deviceCredential: DeviceCredential\n    ) async throws {\n        // Validate the device attestation certificate\n        // Throw to reject the device\n    }\n\n    override func rooms(\n        in home: MatterAddDeviceRequest.Home?\n    ) async -> [MatterAddDeviceRequest.Room] {\n        // Return rooms in the selected home\n        return [\n            MatterAddDeviceRequest.Room(displayName: \"Living Room\"),\n            MatterAddDeviceRequest.Room(displayName: \"Kitchen\")\n        ]\n    }\n\n    override func configureDevice(\n        named name: String,\n        in room: MatterAddDeviceRequest.Room?\n    ) async {\n        // Save the device configuration to your backend\n        print(\"Configuring \\(name) in \\(room?.displayName ?? \"no room\")\")\n    }\n\n    override func commissionDevice(\n        in home: MatterAddDeviceRequest.Home?,\n        onboardingPayload: String,\n        commissioningID: UUID\n    ) async throws {\n        // Use the onboarding payload to commission the device\n        // into your fabric using the Matter framework\n    }\n}\n```\n\n## Common Mistakes\n\n### DON'T: Access homes before the delegate fires\n\n```swift\n// WRONG -- homes array is empty until delegate is called\nlet manager = HMHomeManager()\nlet homes = manager.homes  // Always empty here\n\n// CORRECT -- wait for delegate\nfunc homeManagerDidUpdateHomes(_ manager: HMHomeManager) {\n    let homes = manager.homes  // Now populated\n}\n```\n\n### DON'T: Confuse HomeKit setup with Matter commissioning\n\n```swift\n// WRONG -- using HomeKit accessory setup for a Matter ecosystem app\nhome.addAndSetupAccessories { error in }\n\n// CORRECT -- use MatterAddDeviceRequest for Matter ecosystem commissioning\nlet request = MatterAddDeviceRequest(\n    topology: topology,\n    setupPayload: nil,\n    showing: .allDevices\n)\ntry await request.perform()\n```\n\n### DON'T: Forget required entitlements\n\n```swift\n// WRONG -- calling Matter APIs without the MatterSupport entitlement\n// Results in runtime error\n\n// CORRECT -- ensure these are set up:\n// 1. HomeKit capability for HMHomeManager access\n// 2. MatterSupport Extension target for ecosystem commissioning\n// 3. com.apple.developer.matter.allow-setup-payload if providing setup codes\n```\n\n### DON'T: Create multiple HMHomeManager instances\n\n```swift\n// WRONG -- each instance loads the full database independently\nclass ScreenA { let manager = HMHomeManager() }\nclass ScreenB { let manager = HMHomeManager() }\n\n// CORRECT -- single shared instance\n@Observable\nfinal class HomeStore {\n    static let shared = HomeStore()\n    let homeManager = HMHomeManager()\n}\n```\n\n### DON'T: Write characteristics without checking metadata\n\n```swift\n// WRONG -- writing a value outside the valid range\ncharacteristic.writeValue(500) { _ in }\n\n// CORRECT -- check metadata first\nif let metadata = characteristic.metadata,\n   let maxValue = metadata.maximumValue?.intValue {\n    let safeValue = min(brightness, maxValue)\n    characteristic.writeValue(safeValue) { _ in }\n}\n```\n\n## Review Checklist\n\n- [ ] HomeKit capability enabled in Xcode\n- [ ] `NSHomeKitUsageDescription` present in Info.plist\n- [ ] Single `HMHomeManager` instance shared across the app\n- [ ] `HMHomeManagerDelegate` implemented; homes not accessed before `homeManagerDidUpdateHomes`\n- [ ] `HMHomeDelegate` set on homes to receive accessory and room changes\n- [ ] `HMAccessoryDelegate` set on accessories to receive characteristic updates\n- [ ] Characteristic metadata checked before writing values\n- [ ] Error handling in all completion handlers\n- [ ] MatterSupport capability and extension target added for Matter commissioning\n- [ ] `MatterAddDeviceRequest.isSupported` checked before performing requests\n- [ ] Matter extension handler implements `commissionDevice(in:onboardingPayload:commissioningID:)`\n- [ ] Action sets tested with the HomeKit Accessory Simulator before shipping\n- [ ] Triggers enabled after creation (`trigger.enable(true)`)\n\n## References\n\n- Extended patterns (Matter extension, delegate wiring, SwiftUI): [references/matter-commissioning.md](references/matter-commissioning.md)\n- [HomeKit framework](https://sosumi.ai/documentation/homekit)\n- [HMHomeManager](https://sosumi.ai/documentation/homekit/hmhomemanager)\n- [HMHome](https://sosumi.ai/documentation/homekit/hmhome)\n- [HMAccessory](https://sosumi.ai/documentation/homekit/hmaccessory)\n- [HMRoom](https://sosumi.ai/documentation/homekit/hmroom)\n- [HMActionSet](https://sosumi.ai/documentation/homekit/hmactionset)\n- [HMTrigger](https://sosumi.ai/documentation/homekit/hmtrigger)\n- [MatterSupport framework](https://sosumi.ai/documentation/mattersupport)\n- [MatterAddDeviceRequest](https://sosumi.ai/documentation/mattersupport/matteradddevicerequest)\n- [MatterAddDeviceExtensionRequestHandler](https://sosumi.ai/documentation/mattersupport/matteradddeviceextensionrequesthandler)\n- [Enabling HomeKit in your app](https://sosumi.ai/documentation/homekit/enabling-homekit-in-your-app)\n- [Adding Matter support to your ecosystem](https://sosumi.ai/documentation/mattersupport/adding-matter-support-to-your-ecosystem)","tags":["homekit","swift","ios","skills","dpearson2699","accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills"],"capabilities":["skill","source-dpearson2699","skill-homekit","topic-accessibility","topic-agent-skills","topic-ai-coding","topic-apple","topic-claude-code","topic-codex-skills","topic-cursor-skills","topic-ios","topic-ios-development","topic-liquid-glass","topic-localization","topic-mapkit"],"categories":["swift-ios-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/dpearson2699/swift-ios-skills/homekit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add dpearson2699/swift-ios-skills","source_repo":"https://github.com/dpearson2699/swift-ios-skills","install_from":"skills.sh"}},"qualityScore":"0.684","qualityRationale":"deterministic score 0.68 from registry signals: · indexed on github topic:agent-skills · 468 github stars · SKILL.md body (13,560 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:53:43.254Z","embedding":null,"createdAt":"2026-04-18T22:01:01.682Z","updatedAt":"2026-04-22T00:53:43.254Z","lastSeenAt":"2026-04-22T00:53:43.254Z","tsv":"'/documentation/homekit)':1265 '/documentation/homekit/enabling-homekit-in-your-app)':1310 '/documentation/homekit/hmaccessory)':1277 '/documentation/homekit/hmactionset)':1285 '/documentation/homekit/hmhome)':1273 '/documentation/homekit/hmhomemanager)':1269 '/documentation/homekit/hmroom)':1281 '/documentation/homekit/hmtrigger)':1289 '/documentation/mattersupport)':1294 '/documentation/mattersupport/adding-matter-support-to-your-ecosystem)':1319 '/documentation/mattersupport/matteradddeviceextensionrequesthandler)':1302 '/documentation/mattersupport/matteradddevicerequest)':1298 '0.name':358,439 '0x0001':833 '0x1234':812,830 '1':125,157,1057 '2':134,162,1063 '22':633,656 '26':69 '3':171,1070 '30':635,657 '500':1136 '6.3':67 'access':288,316,341,343,954,1062,1180 'accessori':6,25,44,81,84,147,362,373,377,382,395,400,426,433,444,456,532,533,1004,1189,1196,1241 'accessory.name':404 'accessory.room':406 'accessory.services':412 'across':1173 'action':20,54,94,99,257,544,550,584,593,602,610,671,723,1235 'action-sets-and-trigg':98 'actionset':565,570,614 'actionset.addaction':592 'ad':376,603,1218,1311 'add':135,163,172,722 'addmatterdevic':755 'alldevic':789,1029 'alway':976 'api':1042 'app':142,181,1010,1175,1307 'appl':201,203 'array':963 'assign':364 'async':756,864,882,907,933 'asynchron':285 'attach':669 'attest':869 'author':209,338 'autom':43,223 'avail':187,197 'await':797,1031 'backend':914 'base':263 'basic':749 'bedroom':436,440,446 'bool':486 'bright':1153 'build':31 'calendar.current.nextdate':642 'call':969,1040 'callback':851 'capabl':129,133,161,1059,1161,1214 'certif':870 'chang':511,1192 'characterist':26,88,93,417,461,467,538,555,586,702,1122,1199,1201 'characteristic.characteristictype':421 'characteristic.enablenotification':520 'characteristic.metadata':1145 'characteristic.readvalue':473 'characteristic.value':422,484,542 'characteristic.writevalue':499,1135,1155 'check':188,1124,1139,1203,1223 'checklist':116,119,1159 'class':298,856,1094,1099,1110 'code':185,1078 'com.apple.developer.matter.allow':174,1071 'combin':822 'commiss':8,46,61,104,107,152,728,732,750,850,940,999,1020,1069,1221 'commissiondevic':925,1231 'commissioningid':931,1234 'common':110,113,950 'common-mistak':112 'complet':1211 'configur':124,149,911,916 'configuredevic':900 'confus':994 'content':70 'control':2,41,143 'correct':979,1014,1051,1104,1138 'creat':19,269,548,624,694,843,1081 'creation':1248 'criteria':810,821,824,827 'current':650,659 'daili':654 'data':74,78,218,280 'databas':1092 'date':644 'datecompon':630,631,646,652 'datecomponents.hour':632 'datecomponents.minute':634 'defaultroom':370 'deleg':214,276,292,958,967,982,1256 'devic':10,29,48,60,239,735,767,794,800,804,823,868,875,910,942 'devicecredenti':862,863 'didupd':333 'didupdatevaluefor':537 'direct':186 'discov':374 'discoveri':383 'displaynam':778,892,896,920 'ecosystem':39,64,156,738,841,1009,1019,1068,1316 'ecosystemnam':772 'els':350,441,479,527,573,599,667,683,760 'empti':965,977 'enabl':126,158,512,691,1162,1246,1303 'ensur':1052 'entitl':178,1037,1046 'error':385,389,393,447,451,457,474,477,501,505,509,522,525,566,571,594,597,615,619,623,662,665,678,681,687,692,720,1012,1050,1207 'etc':247 'event':262,696,714 'event-bas':261 'eventtrigg':709,719 'exclud':834 'execut':558,608,621 'extend':1252 'extens':166,846,848,1065,1216,1228,1255 'fabric':945 'fail':392,453,508,622 'fals':589 'filter':799 'final':297,855,1109 'fire':293,959 'fired':641 'first':1141 'flow':748 'forget':1035 'framework':949,1262,1291 'full':840,1091 'func':310,329,531,754,860,877,899,924,983 'function':244 'good':563,605 'goodnightactionset':677 'grant':342 'group':252,256,554 'guard':346,431,476,524,568,596,664,680,758 'handl':59,211,745,849,1208 'handler':1212,1229 'hierarchi':226 'hmaccessori':238,534,1274 'hmaccessorydeleg':530,1193 'hmactionset':255,553,1282 'hmcharacterist':248,468,539 'hmcharacteristicev':701 'hmcharacteristicwriteact':585 'hmeventtrigg':710 'hmhome':229,1270 'hmhomedeleg':1183 'hmhomemanag':194,228,272,304,313,332,972,986,1061,1083,1098,1103,1118,1170,1266 'hmhomemanagerauthorizationstatus':335 'hmhomemanagerdeleg':301,1176 'hmroom':233,1278 'hmservic':243,536 'hmtimertrigg':638 'hmtrigger':258,1286 'hmzone':251 'home':5,38,42,146,222,237,267,289,320,328,348,775,776,880,889,927,955,962,974,988,1178,1186 'home.accessories':402 'home.accessories.first':434 'home.addactionset':561 'home.addandsetupaccessories':384,1011 'home.addtrigger':660,718 'home.assignaccessory':443 'home.executeactionset':613 'home.roomforentirehome':371 'home.rooms':354 'home.rooms.first':437 'home/room/accessory':52 'homekit':1,12,40,49,73,77,123,128,191,195,217,220,283,296,340,743,995,1003,1058,1160,1240,1261,1304 'homekit-data-model':76 'homemanag':193,303,330,1117 'homemanager.delegate':215,308 'homemanager.primaryhome':349 'homemanagerdidupdatehom':311,984,1182 'homes.count':327 'homes/rooms/accessories':18 'homestor':299,1111,1115 'hous':780 'implement':274,1177,1230 'import':190,295,752,853 'independ':1093 'info.plist':138,1168 'init':306 'initi':265 'instanc':1084,1088,1107,1171 'intvalu':1149 'io':68 'ipad':200 'iphon':199 'kitchen':356,359,897 'know':278 'let':192,302,319,322,347,352,355,369,388,432,435,450,466,482,504,569,580,583,618,636,699,708,769,781,809,813,826,970,973,987,1021,1096,1101,1113,1116,1143,1146,1150 'light':245,498,579,713 'lightchar':581,587 'list':394 'live':577,893 'livingroomlight.powercharacteristic':582 'load':282,284,326,1089 'mac':205 'main':779 'manag':17,50,80,83,268,312,331,372,971,985,1097,1102 'manager.homes':317,321,975,989 'manager.primaryhome':324 'managing-accessori':82 'match':645 'matchingpolici':647 'matter':9,28,47,103,106,151,727,734,762,948,998,1008,1018,1041,1220,1227,1254,1312 'matter-commiss':105 'matteradddeviceextensionrequesthandl':108,109,838,858,1299 'matteradddevicerequest':730,783,815,1016,1023,1295 'matteradddevicerequest.devicecriteria.all':828 'matteradddevicerequest.devicecriteria.vendorid':811 'matteradddevicerequest.home':777,881,928 'matteradddevicerequest.issupported':759,1222 'matteradddevicerequest.room':883,891,895,906 'matteradddevicerequest.topology':771 'matterhandl':857 'mattersupport':14,58,148,160,165,753,845,854,1045,1064,1213,1290 'maxvalu':1147,1154 'metadata':1125,1140,1144,1202 'metadata.maximumvalue':1148 'min':1152 'mistak':111,114,951 'model':53,75,79,219 'motion':712 'motiondetect':700,715 'motionsensorcharacterist':703 'move':424,455 'multipl':1082 'name':407,639,711,901,902,917 'nexttim':648 'night':564,606,640 'nil':423,478,526,543,572,598,666,682,693,717,787,819,1027 'notif':513 'nscopi':591,707 'nshomekitusagedescript':136,140,1165 'nsobject':300 'observ':510,1108 'obtain':469 'onboard':27,937 'onboardingpayload':929,1233 'one':230 'organ':221 'outsid':1131 'overrid':305,859,876,898,923 'pair':747,795 'parti':35 'pattern':1253 'payload':177,938,1074 'perform':1225 'popul':991 'power':488 'predic':716 'present':790,1166 'primaryhom':323 'print':325,339,390,403,413,420,452,487,506,540,601,620,689,761,915 'pro':208 'product':837 'productid':832 'project':170 'provid':182,1076 'rang':1134 'read':24,85,90,458,462 'readable/writable':249 'reading-and-writing-characterist':89 'real':516 'real-tim':515 'receiv':1188,1198 'recurr':651 'recurrencecalendar':658 'refer':120,121,1251 'references/matter-commissioning.md':1259,1260 'reject':873 'repeat':653 'request':782,814,1022,1226 'request.perform':798,1032 'requir':1036 'result':1047 'return':351,442,480,528,574,600,668,684,768,884,890 'review':115,118,1158 'review-checklist':117 'room':234,242,254,344,353,360,368,429,578,878,885,894,905,919,922,1191 'rooms.first':357 'runtim':1049 'safe':314 'safevalu':1151,1156 'save':908 'scene':607 'screena':1095 'screenb':1100 'select':888 'self':216,309 'separ':741 'servic':397,410,414,472,535 'service.characteristics':419 'service.servicetype':415 'set':21,55,95,100,545,551,611,672,724,1055,1184,1194,1236 'setup':71,72,122,176,184,391,996,1005,1073,1077 'setup-payload':175,1072 'setuppayload':786,818,1026 'share':1106,1114,1172 'ship':1244 'show':788,803,820,1028 'sign':132 'simul':1242 'singl':271,1105,1169 'skill' 'skill-homekit' 'smart':4,37,145,774 'smart-hom':3,36 'sosumi.ai':1264,1268,1272,1276,1280,1284,1288,1293,1297,1301,1309,1318 'sosumi.ai/documentation/homekit)':1263 'sosumi.ai/documentation/homekit/enabling-homekit-in-your-app)':1308 'sosumi.ai/documentation/homekit/hmaccessory)':1275 'sosumi.ai/documentation/homekit/hmactionset)':1283 'sosumi.ai/documentation/homekit/hmhome)':1271 'sosumi.ai/documentation/homekit/hmhomemanager)':1267 'sosumi.ai/documentation/homekit/hmroom)':1279 'sosumi.ai/documentation/homekit/hmtrigger)':1287 'sosumi.ai/documentation/mattersupport)':1292 'sosumi.ai/documentation/mattersupport/adding-matter-support-to-your-ecosystem)':1317 'sosumi.ai/documentation/mattersupport/matteradddeviceextensionrequesthandler)':1300 'sosumi.ai/documentation/mattersupport/matteradddevicerequest)':1296 'source-dpearson2699' 'specif':367,807,836 'state':489 'static':1112 'status':334 'status.contains':337 'string':903,930 'super.init':307 'support':764,842,1313 'swift':66,189,294,345,378,398,430,465,494,519,560,612,628,698,751,801,825,852,960,1000,1038,1085,1126 'swiftui':1258 'system':379,791 'target':65,167,1066,1217 'targetvalu':588 'test':1237 'text':227 'thermostat':246 'third':34 'third-parti':33 'throw':757,865,871,934 'time':259,517 'timer':626 'timezon':649 'togeth':559 'topic-accessibility' 'topic-agent-skills' 'topic-ai-coding' 'topic-apple' 'topic-claude-code' 'topic-codex-skills' 'topic-cursor-skills' 'topic-ios' 'topic-ios-development' 'topic-liquid-glass' 'topic-localization' 'topic-mapkit' 'topolog':770,784,785,816,817,1024,1025 'tri':796,1030 'trigger':23,57,97,102,264,547,627,637,661,675,690,697,1245 'trigger.addactionset':676 'trigger.enable':685,1249 'triggervalu':704 'true':500,521,686,705,1250 'turn':495,575 'tv':202 'ui':380,792 'unassign':408 'updat':518,541,1200 'use':11,15,729,935,946,1002,1015 'uuid':932 'valid':866,1133 'validatedevicecredenti':861 'valu':250,464,483,490,493,1130,1206 'var':629 'vendor':808 'vendorid':829 'vision':207 'wait':980 'watch':204 'wire':1257 'withnam':562 'without':1043,1123 'write':87,92,460,491,507,556,1121,1128,1205 'wrong':961,1001,1039,1086,1127 'xcode':131,1164 'xml':139","prices":[{"id":"f038ea14-27c4-4cd2-a8bf-cd3e2bc897bd","listingId":"b0cfcacb-8153-486f-9070-cf239961fff8","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"dpearson2699","category":"swift-ios-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:01:01.682Z"}],"sources":[{"listingId":"b0cfcacb-8153-486f-9070-cf239961fff8","source":"github","sourceId":"dpearson2699/swift-ios-skills/homekit","sourceUrl":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/homekit","isPrimary":false,"firstSeenAt":"2026-04-18T22:01:01.682Z","lastSeenAt":"2026-04-22T00:53:43.254Z"}],"details":{"listingId":"b0cfcacb-8153-486f-9070-cf239961fff8","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"dpearson2699","slug":"homekit","github":{"repo":"dpearson2699/swift-ios-skills","stars":468,"topics":["accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills","ios","ios-development","liquid-glass","localization","mapkit","networking","storekit","swift","swift-concurrency","swiftdata","swiftui","widgetkit","xcode"],"license":"other","html_url":"https://github.com/dpearson2699/swift-ios-skills","pushed_at":"2026-04-21T19:26:16Z","description":"Agent Skills for iOS 26+, Swift 6.3, SwiftUI, and modern Apple frameworks","skill_md_sha":"dc84548dcc6d922ca8778721cdb56ccc4f3c3ea0","skill_md_path":"skills/homekit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/homekit"},"layout":"multi","source":"github","category":"swift-ios-skills","frontmatter":{"name":"homekit","description":"Control smart-home accessories and commission Matter devices using HomeKit and MatterSupport. Use when managing homes/rooms/accessories, creating action sets or triggers, reading accessory characteristics, onboarding Matter devices, or building a third-party smart-home ecosystem app."},"skills_sh_url":"https://skills.sh/dpearson2699/swift-ios-skills/homekit"},"updatedAt":"2026-04-22T00:53:43.254Z"}}