以编程方式启动OS X的联系人应用程序显示联系人?

问题描述 投票:2回答:2

假设我刚刚创建了一个ABPerson记录,并设法将其保存在用户的地址簿中。如何以编程方式打开处理通讯簿的默认应用程序(最有可能是联系人但在某些情况下可能是Outlook或其他应用程序)并显示我刚刚添加的新通讯簿记录?

提前致谢。

macos cocoa contacts abaddressbook appkit
2个回答
0
投票

addressbook URL方案能够显示人员记录或编辑它:

ABPerson * aPerson = <#assume this exists#>;

// Open the Contacts app, showing the person record.
NSString * urlString = [NSString stringWithFormat:@"addressbook://%@", [aPerson uniqueId]];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];

更多信息请访问Address Book Programming Guide


0
投票

这是我使用Contacts应用程序,以及在Swift中,作为CNContact的扩展。我希望现在大多数人都使用联系人而不是AddressBook。

(CNContact的identifier与ABPerson的uniqueId相同。)

func showInContacts() {
  let path = 
    "/Users/someusername/Library/Application Support/AddressBook/Sources/05A62A31-9C1F-423F-A9F4-011E56EAAF29/Metadata/0A1F4FC2-7E01-4A40-92DE-840F8C84DE58:ABPerson.abcdp
  var url = URL(fileURLWithPath: path)
  url.deleteLastPathComponent()
  url.appendPathComponent(self.identifier)// self is a CNContact
  url.appendPathExtension("abcdp")
  NSWorkspace.shared.open(url)
}

联系人位于用户库/应用程序支持中的长链子文件夹末尾的单独文件中。文件名只是联系人的标识符加上扩展名。您可以通过将其中一个拖动到Xcode编辑器,用引号括起来,并可能删除最后一个路径组件来保存一些输入。因为我的应用程序不适合我的分发;否则你将不得不做一些篡改:用户的名字将在第二个路径组件中。我不知道'Sources'之后的长ID号的重要性,无论是用户还是系统特定的,但它是该子文件夹中唯一的项目,因此您应该能够以编程方式构建可行的路径。

© www.soinside.com 2019 - 2024. All rights reserved.