Home

Awesome

ContactsChangeNotifier

Which contacts changed outside your iOS app? Better CNContactStoreDidChange notification: Get real changes, without the noise.

Swift Version License CocoaPods Compatible Platform PRs Welcome

Why Oh Why

Sadly, the Contacts changes API is a mess:

It’s the API that time forgot. πŸ§Ÿβ€β™‚οΈ

ContactsChangeNotifier Features

Usage

  1. Get the user's Contacts access permission (see docs).
  2. Keep a ContactsChangeNotifier instance - it will observe all Contacts changes but post only those that from outside your app.
  3. Observe ContactsChangeNotifier.didChangeNotification notification.
  4. See change events in the notification's contactsChangeEvents.
// 2. Keep a ContactsChangeNotifier instance
let contactsChangeNotifier = try! ContactsChangeNotifier(
    store: myCNContactStore,
    fetchRequest: .fetchRequest(additionalContactKeyDescriptors: myCNKeyDescriptors)
)

// 3. Observe ContactsChangeNotifier.didChangeNotification notification
let observation = NotificationCenter.default.addObserver(
    forName: ContactsChangeNotifier.didChangeNotification,
    object: nil,
    queue: nil
) { notification in
    // 4. See change events in the notification's contactsChangeEvents
    for event in notification.contactsChangeEvents ?? [] {
        switch event {
        case let addEvent as CNChangeHistoryAddContactEvent:
            print(addEvent.contact)
        case let updateEvent as CNChangeHistoryUpdateContactEvent:
            print(updateEvent.contact)
        case let deleteEvent as CNChangeHistoryDeleteContactEvent:
            print(deleteEvent.contactIdentifier)
        default:
            // group event
            break
        }
    }
}

Installation

CocoaPods:

pod 'ContactsChangeNotifier'

Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/yonat/ContactsChangeNotifier", from: "1.2.0")
]