2013 年 4 月 9 日更新 这是对我之前问题的完全转发。随着我对启动服务、UTI 和贬值的创建者代码了解得更多,我觉得我最好从头开始问这个问题。
问题描述:
我们有一个专为 Legacy Mac 9.xx 设计的应用程序,它仍然在 Snow Leopard(带有 Rosetta)上运行。该应用程序使用捆绑文件我们为 Snow Leopard 及其他应用程序开发了我们的新应用程序。问题是启动服务没有根据我们当前使用的 plist 配置正确关联新应用程序,我需要知道我做错了什么。
如果我右键单击捆绑的文档并选择 GetInfo,我可以将捆绑的文件关联到旧应用程序或新应用程序,它会按我的预期工作。我相信那是因为雪豹仍然使用 Creator Code 技术进行这种关联。如果我告诉文件将自身与旧的旧应用程序关联并按“全部更改”,则启动服务将正确关联该类型的所有文件,并且它将按预期工作。如果我告诉文件将自己关联到新应用程序并选择“全部更改”,应用程序将打开,但文件不会。据我所知,启动服务正在为应用程序分配一个动态 UTI,当单击文件时,操作系统不知道要使用哪个应用程序。
我发现一些帖子似乎暗示苹果可能在新的 UTI 方法中犯了一些设计错误。这里的一篇文章展示了如何将一组字符串文件扩展名添加到新应用 pList 的 ExportedUTI 字典中。这会使应用程序正常运行,但这并不能解决问题;如果我们允许我们的用户为他们的文件命名,我们无法在数组中预测他们的文件扩展名将是什么。我们需要启动服务以严格使用 UTI 代码正确运行,或者如何让 OSType 代码正常工作。
一旦新应用程序决定它无法打开它的相关文件,我必须打开 LanchServices.plist,删除条目并重新启动 lsregister 数据库。然后我可以再次使用新应用程序打开一个文件(通过关联它而不按“全部更改”)。
我将一些图像附加到应用 plists 、捆绑的文档 plist 和 Launch Services 条目:
非常感谢任何帮助和我们的指导。
麦克风
更新日期:2013 年 4 月 16 日
我提供的关于 UTI 的帖子的链接还包括一个名为 RCDefault 应用程序的开源软件应用程序的链接。此应用程序将根据您选择的 UTI、文件扩展名、OSType 代码和文件类型将您的 APP 与给定文件相关联。奇怪的是,这个应用程序能够根据我们 plist 中提供的 UTI 结构将文件与应用程序相关联。
对于这种特定情况,这是否可能只是雪豹启动服务中的一个错误,而苹果此时选择忽略它(考虑到他们不再支持雪)?