Contacts (ContactsKit) Integration into iOS App

TRUETECH is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Contacts (ContactsKit) Integration into iOS App
Simple
from 1 business day to 3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Contacts Framework Integration in iOS App

Apple renamed and rewrote the contacts API starting with iOS 9 — the old AddressBook framework is long deprecated, the current one is Contacts.framework. Despite this, projects still use ABAddressBook, which in iOS 18 no longer compiles without warnings and will disappear completely.

Permissions: what changed in iOS 18

iOS 18 introduced a new access type — Limited Access. Users can now choose specific contacts the app can read rather than granting access to the entire address book. CNAuthorizationStatus gained a new case: .limited.

If the app doesn't handle .limited — it silently gets an empty contact list for some iOS 18 users and developers don't understand why. Need to add NSContactsLimitedUsageDescription to Info.plist and explicitly handle this case: show UI with explanation, offer to expand access via CNContactStore.requestAccess.

Typical tasks and implementation

Fetching contacts with needed fields via CNContactFetchRequest:

let store = CNContactStore()
let keysToFetch: [CNKeyDescriptor] = [
  CNContactGivenNameKey as CNKeyDescriptor,
  CNContactFamilyNameKey as CNKeyDescriptor,
  CNContactPhoneNumbersKey as CNKeyDescriptor,
  CNContactEmailAddressesKey as CNKeyDescriptor,
  CNContactThumbnailImageDataKey as CNKeyDescriptor
]
let request = CNContactFetchRequest(keysToFetch: keysToFetch)
request.sortOrder = .familyName

try store.enumerateContacts(with: request) { contact, stop in
  // process per-contact, don't load all into memory at once
}

enumerateContacts is preferable to unifiedContacts(matching:keysToFetch:) with large address books: it doesn't load all contacts into memory simultaneously. On iPhone with 3000+ contacts, the second approach creates noticeable memory spike.

Adding a new contact with CNMutableContact and saving via CNSaveRequest — standard approach. When updating an existing contact, get its mutableCopy() — modifying original CNContact throws exception because it's immutable.

What's included in the work

  • Setting up permissions for iOS 17 and iOS 18 (Limited Access)
  • Fetching contacts with needed fields, sorting
  • Searching by name, phone, email via CNContactVCardSerialization or predicates
  • Creating and updating contacts
  • Displaying system CNContactPickerViewController
  • Handling duplicates through unification (unifiedContact)

Timeline

1–3 days depending on operation scope. Basic read-only access with search — 1 day. Full CRUD with Limited Access handling and testing — up to 3 days. Cost calculated individually.