<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -",
    "macOS: 27.0.0 -",
    "tvOS: 27.0.0 -",
    "visionOS: 27.0.0 -",
    "watchOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Matter",
  "identifier" : "/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningComplete:nodeID:metrics:context:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Matter"
    ],
    "preciseIdentifier" : "c:objc(pl)MTRDeviceControllerDelegate(im)controller:commissioningComplete:nodeID:metrics:context:"
  },
  "title" : "controller(_:commissioningComplete:nodeID:metrics:context:)"
}
-->

# controller(_:commissioningComplete:nodeID:metrics:context:)

Notify the delegate when commissioning is completed.

```
optional func controller(_ controller: MTRDeviceController, commissioningComplete error: (any Error)?, nodeID: NSNumber?, metrics: MTRMetrics, context: [String : Any])
```

## Discussion

Exactly one of error and nodeID will be nil.

If nodeID is not nil, then it represents the node id the node was assigned, as encoded in its operational certificate.

The metrics object contains information corresponding to the commissioning session.

The context parameter is a dictionary. See MTRCommissioningDelegate’s commissioning:succeededForNodeID:metrics:context
for the supported keys.

If supported, this selector will be used in preference to controller:commissioningComplete:nodeID: and
controller:commissioningComplete:nodeID:metrics:.

---

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)