如何将文件与我的应用相关联?

时间:2013-09-26 04:35:29

标签: macos cocoa

我在Mac OS X上有一个Cocoa应用程序“PDFHistory”,它使用NSDocument架构来保存和加载专门为我的应用程序内部格式化的PDF文件。每当我从PDFHistory保存文件(例如“mydoc.pdf”)时,我想这样做,然后双击mydoc.pdf将自动在PDFHistory.app中打开它。但是,我不想这样做所有.pdf文件都是在PDFHistory中自动打开的,而是使用系统默认值(可能是Preview.app)。但是,.pdf后缀是一项要求,因为我需要用户能够将文件通过电子邮件发送给可以在默认PDF查看器中查看文件的其他用户。

问题在于,如果我将LSHandlerRank设置为“Owner”,则所有 .pdf文件将使用PDFHistory打开,这很糟糕(因为我只了解.pdf文件的内部结构)那个PDFHistory写的)。但是如果我将LSHandlerRank设置为“Alternate”,那么所有.pdf文件都将打开到系统默认应用程序(Preview.app),这对于刚刚使用我的应用程序创建文件的用户来说很困惑。

曾几何时,“创建者代码”可用于实现此类功能,但启动服务开始在Snow Leopard中忽略它们(请参阅http://tidbits.com/article/10537)。 UTI不是提供此功能的替代品(参见http://boredzo.org/blog/archives/2009-09-22/how-not-to-use-utis)。

使用Finder获取文件信息允许用户指定用于打开特定文件的特定应用程序。这应该通过在文件的资源中设置“usro”属性来实现。有一些开源代码可以模仿这种行为(https://github.com/AlanQuatermain/SetAppAffinity),但是使用了已弃用的函数,因此会导致Apple拒绝来自App Store的应用程序。同样,人们已发布AppleScript来设置此属性(https://discussions.apple.com/thread/2597365),但沙盒会阻止我调用它。

虽然.pdf后缀是一个要求,以便能够将文件发送给其他系统/平台上的用户,但我考虑尝试将后缀注册为两个扩展名为“.phistory.pdf”,这将允许“file.phistory.pdf”将在PDFHistory中打开,但“file.pdf”将在默认的PDF查看器中打开。但是,这根本不起作用:似乎最终后缀是启动服务使用的唯一后缀,之前的所有内容都将被忽略。

那么有没有办法让我的应用程序成为打开它自己创建的文件的默认应用程序?

0 个答案:

没有答案