通过info.plist中的CFBundleDocumentTypes覆盖Mac应用程序文件关联

时间:2014-10-30 01:48:29

标签: macos info.plist cfbundledocumenttypes

我开发了一个Mac应用程序,用于保存和加载唯一类型的文件。该类型在CFBundleDocumentTypes下的info.plist中正确声明,列为LSHandlerRank:Owner和CFBundleTypeRole:Editor。我正在发布我的应用程序的新版本,我希望如果用户已经在他们的计算机上安装了我的应用程序的先前版本的用户安装新版本但保持旧版本也安装,则新版本会自动接管文件关联这个类型来自旧版本的应用程序。但默认的操作系统行为似乎是将与文件类型关联的最早安装的应用程序授予其永久所有者,除非用户手动更改它。我知道命令行工具duti可以进行关联更改,并且系统文件com.apple.LaunchServices.plist也可以编辑,但这些似乎不是最佳或最可靠的方法以编程方式从应用程序。是否有任何“正确的”/ Apple认可的方式来做我想要的事情?

1 个答案:

答案 0 :(得分:3)

应用程序为文件类型设置默认应用程序的官方Apple批准方式可能是使用其提供的LSSetDefaultRoleHandlerForContentType函数。此函数设置存储在LaunchServices中的值。

Here是关于如何在Objective-C和Swift中使用此API的有限官方文档。

似乎没有办法通过Info.plist执行此操作,因为第一个应用程序被设置为用户首选应用程序。用户必须更改其首选应用程序,您可以使用上述API进行操作。