在 JavaScript 中使用 objC bridge Contacts 框架进行自动化

use objC bridge Contacts framework in JavaScript for Automation

如何使用 JavaScript 中的 ObjC 桥联系人框架进行自动化?我可以使用旧的地址簿框架,但不能使用联系人框架。

假设我有一个 ID:

id = Application("Contacts").myCard().id()

旧的 AddressBook 框架工作正常:

ObjC.import("AddressBook");

book = $.ABAddressBook.addressBook
person = book.recordForUniqueId(id)
console.log(person.valueForProperty($.kABFirstNameProperty).js)

但是联系人框架如何使用呢? 我试过了(基于 unifiedContactWithIdentifier 的文档):

ObjC.import('Contacts')

keysToFetch = [ $.CNContactGivenNameKey, $.CNContactFamilyNameKey ]

store = $.CNContactStore
store.unifiedContactWithIdentifierKeysToFetchError( id, keysToFetch, null )
...

失败并出现错误 -2700:脚本错误。弹出窗口显示 TypeError: store.unifiedContactWithIdentifierKeysToFetchError is not a function

Edit:一个更基本的例子,defaultContainerIdentifier 方法给出了 undefined 输出:

ObjC.import('Contacts')
store = $.CNContactStore
console.log(store)
/* [Class CNContactStore] */
console.log(store.defaultContainerIdentifier)
/* undefined */

在第一种情况下,您使用 class 方法 +addressBook 获得 class 的实例。在第二种情况下,您没有实例,并且您正在尝试调用实例方法。您不能在 class.

上调用实例方法

我想您必须使用以下方法创建一个新实例:

store = $.CNContactStore.alloc.init