Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - yonat/ContactsChangeNotifier: Which contacts changed outside your iOS app? Better CNContactStoreDidChange notification: Get real changes, without the noise.
Which contacts changed outside your iOS app? Better CNContactStoreDidChange notification: Get real changes, without the noise. - yonat/ContactsChangeNotifier
Visit SiteGitHub - yonat/ContactsChangeNotifier: Which contacts changed outside your iOS app? Better CNContactStoreDidChange notification: Get real changes, without the noise.
Which contacts changed outside your iOS app? Better CNContactStoreDidChange notification: Get real changes, without the noise. - yonat/ContactsChangeNotifier
Powered by 0x5a.live 💗
ContactsChangeNotifier
Which contacts changed outside your iOS app? Better CNContactStoreDidChange
notification: Get real changes, without the noise.
Why Oh Why
Sadly, the Contacts changes API is a mess:
- The
CNContactStoreDidChange
notification is received for changes your own code did, not just outside your app. 🤷 - It contains undocumented
userInfo
fields. 🙈 - To get the actual changes, you need to use an Objective-C API that is not even callable from Swift. 😱
- That API is easy to get wrong, and requires maintaining opaque state, or receiving the complete changes history. 🧨
It’s the API that time forgot. 🧟♂️
ContactsChangeNotifier Features
- Only get notified for changes outside your app. 🎯
- Get the list of changes included in the notification. 🎁
- Only get changes since last notification, not the full all-time history. ✨
- No Objective-C required. 💥
Usage
- Get the user's Contacts access permission (see docs).
- Keep a
ContactsChangeNotifier
instance - it will observe all Contacts changes but post only those that from outside your app. - Observe
ContactsChangeNotifier.didChangeNotification
notification. - 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")
]
Swift Resources
are all listed below.
GitHub - davdroman/TextBuilder: Like a SwiftUI ViewBuilder, but for Text
resource
~/github.com
resource
GitHub - tadejr/ResizingTokenField: A token field implementation for iOS
resource
~/github.com
resource
GitHub - canalesb93/MantleModal: A draggable modal for iOS Applications.
resource
~/github.com
resource
GitHub - okmr-d/DOFavoriteButton: Cute Animated Button written in Swift.
resource
~/github.com
resource
GitHub - gmertk/GMStepper: A stepper with a sliding label in the middle.
resource
~/github.com
resource
GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.
resource
~/github.com
resource
GitHub - kciter/HorizontalDial: A horizontal scroll dial like Instagram.
resource
~/github.com
resource
GitHub - HeroTransitions/Hero: Elegant transition library for iOS & tvOS
resource
~/github.com
resource
GitHub - Brightify/Cuckoo: Boilerplate-free mocking framework for Swift!
resource
~/github.com
resource
GitHub - maxep/MXParallaxHeader: Simple parallax header for UIScrollView
resource
~/github.com
resource
GitHub - Viktoo/Insert3D: The fastest 🚀 way to embed a 3D model in Swift
resource
~/github.com
resource
GitHub - richardtop/CalendarKit: 📅 Calendar for Apple platforms in Swift
resource
~/github.com
resource
GitHub - exyte/PopupView: Toasts and popups library written with SwiftUI
resource
~/github.com
resource
GitHub - gkaimakas/SwiftValidators: String (and more) validation for iOS
resource
~/github.com
resource
GitHub - alexliubj/EZAnchor: An easier and faster way to code Autolayout
resource
~/github.com
resource
GitHub - Brightify/Reactant: Reactant is a reactive architecture for iOS
resource
~/github.com
resource
GitHub - Nero5023/CSVParser: A swift package for read and write CSV file
resource
~/github.com
resource
GitHub - andybest/linenoise-swift: A pure Swift replacement for readline
resource
~/github.com
resource
GitHub - s2mr/xc: Open your xcode project with Xcode of specific version
resource
~/github.com
resource
GitHub - marmelroy/Zip: Swift framework for zipping and unzipping files.
resource
~/github.com
resource
GitHub - yonaskolb/Beak: A command line interface for your Swift scripts
resource
~/github.com
resource
GitHub - Polidea/RxBluetoothKit: iOS & OSX Bluetooth library for RxSwift
resource
~/github.com
resource
Made with ❤️
to provide different kinds of informations and resources.