<!--
{
  "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/unifiedContacts(matching:keysToFetch:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Contacts"
    ],
    "preciseIdentifier" : "c:objc(cs)CNContactStore(im)unifiedContactsMatchingPredicate:keysToFetch:error:"
  },
  "title" : "unifiedContacts(matching:keysToFetch:)"
}
-->

# unifiedContacts(matching:keysToFetch:)

Fetches all unified contacts matching the specified predicate.

```
func unifiedContacts(matching predicate: NSPredicate, keysToFetch keys: [any CNKeyDescriptor]) throws -> [CNContact]
```

## Parameters

`predicate`

The predicate to match against.

`keys`

The properties to fetch in the returned [`CNContact`](/documentation/Contacts/CNContact) objects. Fetch only the properties that your app uses. You can combine contact keys and contact key descriptors.

## Return Value

An array of [`CNContact`](/documentation/Contacts/CNContact) objects matching the predicate.

## Discussion

If the system doesn’t find any matches, this method returns an empty array (or `nil` in case of error). Use only the predicates from the [`CNContact`](/documentation/Contacts/CNContact) class predicates. This method doesn’t support compound predicates. Due to unification, the returned contacts may have different identifiers than you specify. To fetch all contacts, use [`enumerateContacts(with:usingBlock:)`](/documentation/Contacts/CNContactStore/enumerateContacts(with:usingBlock:)).

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)