В своем приложении я создаю CNContact и сохраняю в хранилище контактов, а также сохраняю контактный идентификатор . В другом разделе приложения я использую идентификатор для извлечения этого контакта, но не работает в iOS 13. ( Это работает на iOS 12 )
Примечание: Мне известно о разрешении ключа заметки контакта на iOS 13, но я не получаю это поле.
Вот как я могу создать контакт:
func createPlaceholderContactFor(telephoneNumber: String) {
guard
placeholderContactIdentifier == nil,
CNContactStore.authorizationStatus(for: .contacts) == .authorized
else {
return
}
// Creating a mutable object to add to the contact
let contact = CNMutableContact()
contact.imageData = UIImage(named: "MainIcon")?.jpegData(compressionQuality: 1.0)
contact.givenName = placeholderDefaultName
contact.familyName = ""
contact.phoneNumbers = [CNLabeledValue(
label:CNLabelPhoneNumberiPhone,
value:CNPhoneNumber(stringValue:telephoneNumber))]
// Saving the newly created contact
let saveRequest = CNSaveRequest()
saveRequest.add(contact, toContainerWithIdentifier:nil)
do {
let store = CNContactStore()
try store.execute(saveRequest)
if contact.isKeyAvailable(CNContactIdentifierKey) {
print(contact.identifier) //this is printed on console and contact appears on phone app.
placeholderContactIdentifier = contact.identifier
}
} catch {
print(error.localizedDescription)
}
}
Вот как я получаю контакт:
private func placeholderContact() -> CNContact? {
guard
let identifier = placeholderContactIdentifier,
CNContactStore.authorizationStatus(for: .contacts) == .authorized
else { return nil }
let predicate: NSPredicate = CNContact.predicateForContacts(withIdentifiers: [identifier])
let keysToFetch = [
CNContactIdentifierKey as CNKeyDescriptor,
CNContactGivenNameKey as CNKeyDescriptor,
CNContactFamilyNameKey as CNKeyDescriptor,
CNContactPhoneNumbersKey as CNKeyDescriptor
]
do {
let store = CNContactStore()
let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
return contacts.first
}
catch {
print(error.localizedDescription)
return nil
}
}
Я также пытался использовать let contact = try store.unifiedContact(withIdentifier: identifier, keysToFetch: keysToFetch)
вместо let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
, но это выдает ошибку.