用途:在 Swift 6.3 / iOS 26+ 应用中通过 Contacts 与 ContactsUI 框架读取、创建、更新和选择联系人。
主要能力:使用 CNContactStore 请求授权与查询联系人;用 unifiedContacts(matching:keysToFetch:) 按谓词查询,用 enumerateContacts(with:usingBlock:) 批量枚举;用 CNMutableContact 与 CNSaveRequest 创建、更新、删除联系人;用 CNContactPickerViewController 让用户选择联系人而无需完整通讯录权限;通过 CNContactStoreDidChange 监听外部变更并刷新缓存。
必要用法:在 Info.plist 添加 NSContactsUsageDescription,否则使用联系人数据 API 会崩溃;普通访问无需额外能力,仅读写备注需 com.apple.developer.contacts.notes 且需 Apple 审批。导入方式为 @preconcurrency import Contacts 与 import ContactsUI。获取或保存前先调用 store.requestAccess(for: .contacts),并用 CNContactStore.authorizationStatus(for: .contacts) 检查状态;.authorized 与 .limited 均可用,.limited 下操作仅限用户授权或应用创建的联系人。只请求需要的 CNKeyDescriptor,访问未获取属性会抛 CNContactPropertyNotFetchedException。修改前须 mutableCopy() 得到 CNMutableContact,再经 CNSaveRequest 执行。
适用场景:需要读取或写入系统通讯录、提供联系人选择器、缓存并同步联系人数据的 iOS 应用。
限制:CNContact 不可变;枚举等 I/O 操作应放在主线程之外;选择器无需授权但只返回用户所选数据;授权被拒需引导用户前往设置;资料未提供具体价格、平台版本之外的兼容信息。