ContactsChangeNotifier 1.0.8

ContactsChangeNotifier 1.0.8

Yonat Sharon维护。



  • Yonat Sharon

ContactsChangeNotifier

您的iOS应用之外有哪位联系人的信息发生了变化?更优秀的CNContactStoreDidChange通知:得到真实的变化,而不是噪音。

Swift Version License CocoaPods Compatible Platform PRs Welcome

为什么

遗憾的是,联系人变化的API一团糟

  • 接收到的CNContactStoreDidChange通知是为了自家的代码变更,并不仅限于应用之外。🤷
  • 它包含未记录的userInfo字段。🙈
  • 为了获取实际的变化,您需要使用一个连Swift都无法调用的Objective-C API。😱
  • 该API很容易出错,并且需要维护一个晦涩的状态,或者接收完整的变化历史记录。🧨🧟‍♂️

这是时间遗忘的API。🧟‍♂️🧟‍♂️

ContactsChangeNotifier功能

  • 仅通知您应用之外的变化。🎯
  • 获取通知中包含的变化列表。🎁
  • 仅获取自上次通知以来的变化,而不是完整的历史记录。
  • 无需Objective-C。💥

使用方法

  1. 获取用户联系人访问权限(见 文档)。
  2. 保持一个 ContactsChangeNotifier 实例 - 它将观察所有联系人变化,但仅发布来自您应用程序外部的变化。
  3. 观察 ContactsChangeNotifier.didChangeNotification 通知。
  4. 在通知的 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
        }
    }
}

安装

CocoaPods

pod 'ContactsChangeNotifier'

Swift 包管理器

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