<!--
{
  "availability" : [
    "iOS: 9.0.0 -",
    "iPadOS: 9.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.11.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Contacts",
  "identifier" : "/documentation/Contacts/CNContactStore/unifiedContact(withIdentifier:keysToFetch:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Contacts"
    ],
    "preciseIdentifier" : "c:objc(cs)CNContactStore(im)unifiedContactWithIdentifier:keysToFetch:error:"
  },
  "title" : "unifiedContact(withIdentifier:keysToFetch:)"
}
-->

# unifiedContact(withIdentifier:keysToFetch:)

Fetches a unified contact for the specified contact identifier.

```
func unifiedContact(withIdentifier identifier: String, keysToFetch keys: [any CNKeyDescriptor]) throws -> CNContact
```

## Parameters

`identifier`

The identifier of the contact to fetch.

`keys`

The properties to fetch in the returned [`CNContact`](/documentation/Contacts/CNContact) object.

## Return Value

A unified contact matching or linked to the identifier.

## Discussion

Due to unification, the returned contact may have a different identifier than you specify. To fetch a batch of contacts by identifiers, use [`predicateForContacts(withIdentifiers:)`](/documentation/Contacts/CNContact/predicateForContacts(withIdentifiers:)) with [`unifiedContacts(matching:keysToFetch:)`](/documentation/Contacts/CNContactStore/unifiedContacts(matching:keysToFetch:)). Fetch only the properties that your app uses. You can combine contact keys and contact key descriptors together.

To include [`CNContactNoteKey`](/documentation/Contacts/CNContactNoteKey) in the array of keys in iOS, add the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.contacts.notes> entitlement to your app. The entitlement requires permission from Apple to use, and you can’t publicly distribute your app until you have permission to use it. For more information about adding the entitlement and getting permission, see <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.contacts.notes>.

> Handling Errors in Swift: In Swift, this method returns a nonoptional result and is marked with the `throws` keyword to indicate that it throws an error in cases of failure.
> You call this method in a `try` expression and handle any errors in the `catch` clauses of a `do` statement, as described in [Error Handling](https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html) in [The Swift Programming Language](https://docs.swift.org/swift-book/) and <doc://com.apple.documentation/documentation/Swift/about-imported-cocoa-error-parameters>.

---

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)