不请求从用户地址簿中获取联系人的权限

Not asking permission for fetching contacts from user's address book

我必须从他的 phone 书中访问用户联系人并将其显示在 skstableview 中。 为了获取联系人并将其显示在 tableview 上,我使用以下代码,但它既不要求访问联系人权限也不获取联系人并在控制台上打印此语句:

"Access Denied" UserInfo={NSLocalizedDescription=Access Denied, NSLocalizedFailureReason=This application has not been granted permission to access Contacts.}

我已经在 plist 文件中完成了用于访问联系人的条目,但对我来说没有任何效果。

这是我在 swift 的 Xcode 8.3.3 中使用的代码片段。

 func getContacts() {
    let store = CNContactStore()

    if CNContactStore.authorizationStatus(for: .contacts) == .notDetermined {

        store.requestAccess(for: .contacts){succeeded, err in
            guard err == nil && succeeded else{
                return
            }
            self.contactList()
        }
    } else if CNContactStore.authorizationStatus(for: .contacts) == .authorized {
        self.contactList()
        NSLog(" move to contact list ")

    }
}

func contactList() {
    let req = CNContactFetchRequest(keysToFetch: [
        CNContactFamilyNameKey as CNKeyDescriptor,
        CNContactGivenNameKey as CNKeyDescriptor,
        CNContactPhoneNumbersKey as CNKeyDescriptor
        ])

    arr_contacts.removeAllObjects()

    try! CNContactStore().enumerateContacts(with: req) {
        contact, stop in
        print("contacts \(contact)") // in real life, probably populate an array
        self.arr_contacts.add(contact)
    }

    tbl_List.reloadData()
    print("added all contacts")

}

任何人都可以指出我做错了什么。

谢谢

请将此添加到 info.plist

<key>NSContactsUsageDescription</key>
<string>App users your contacts</string>

此问题出现在模拟器上,它在设备中运行良好,并且也向我显示了访问权限弹出窗口。

感谢大家的大力帮助。

Please Add this permission in your info.plist file.

<key>NSContactsUsageDescription</key>
 <string>App users your contacts</string>

万一有人到达这里时出现以下错误(就像我一样):This application has not been granted permission to access some of the requested keys.

这可能是因为您在获取联系人时请求 CNContactNoteKey。如果是这种情况,那么您需要特殊权限才能访问联系人备注:https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_contacts_notes?language=objc

目前 iOS15 测试版中存在一个错误,除非您在获取联系人时请求 Notes,否则会引发异常,但如果您请求 Notes,则获取将失败。因此,除非您拥有特殊许可,否则实际上不可能在 iOS15 测试版中获取联系人。我已将此报告给 Apple (FB9263783)。