在 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
如何使用 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