我似乎不知道如何从联系人中获取用户的“我的卡”。我正在使用 swift 开发本机 Mac 应用程序。
它不是来自(MacOS 10.11 中的全新)CNContact,但 MacOS 的 ABAddressBook 框架有一个名为
me()
的方法,它将返回登录用户的 ABPerson 记录。
要获得等效的 vCard,请在 ABPerson 对象上调用
vCardRepresentation()
。
上述解决方案的好处是它可以在较旧的 MacOS 版本上运行(例如 MacOS 10.9、10.10)。 Marek 指出 CNContactStore 中的
unifiedMeContactWithKeysToFetch:
API,但在我输入此答案时,它仅记录在 SDK 中的 .h 头文件中,而不记录在CNContactStore 文档中。
(对于 iOS,恢复到 ABAddressBook 并不能解决问题,因为
me()
方法同样仅适用于 MacOS,尽管可以追溯到 macOS 10.2+。)
import Contacts
let nameKeys = [
CNContactNamePrefixKey,
CNContactGivenNameKey,
CNContactMiddleNameKey,
CNContactFamilyNameKey,
CNContactNameSuffixKey,
] as [CNKeyDescriptor]
do {
let contactStore = CNContactStore()
let me = try contactStore.unifiedMeContactWithKeys(toFetch: nameKeys)
} catch let error {
print("Failed to retreive Me contact: \(error)")
}
当然也可以获取额外的密钥:
let allContactKeys = [
CNContactNamePrefixKey,
CNContactGivenNameKey,
CNContactMiddleNameKey,
CNContactFamilyNameKey,
CNContactNameSuffixKey,
CNContactOrganizationNameKey,
CNContactDepartmentNameKey,
CNContactJobTitleKey,
CNContactBirthdayKey,
CNContactNicknameKey,
CNContactNoteKey,
CNContactNonGregorianBirthdayKey,
CNContactPreviousFamilyNameKey,
CNContactPhoneticGivenNameKey,
CNContactPhoneticMiddleNameKey,
CNContactPhoneticFamilyNameKey,
CNContactImageDataKey,
CNContactThumbnailImageDataKey,
CNContactImageDataAvailableKey,
CNContactTypeKey,
CNContactPhoneNumbersKey,
CNContactEmailAddressesKey,
CNContactPostalAddressesKey,
CNContactDatesKey,
CNContactUrlAddressesKey,
CNContactRelationsKey,
CNContactSocialProfilesKey,
CNContactInstantMessageAddressesKey,
] as [CNKeyDescriptor]