MacOS应用程序文件关联

macOS application file association

本文关键字:关联 文件 应用程序 MacOS      更新时间:2023-10-16

我已经尝试筛选信息已有一段时间了,并且我在确定仍然相关的问题上遇到了问题。似乎由于某种原因,该主题的信息比应该少的信息。

我正在处理用于MacOS的应用程序。我想将自定义文件扩展名与我的应用程序相关联。我希望用户能够双击其中一个文件并将应用程序打开。我很容易选择该应用程序打开文件,但是我无法弄清楚如何获取打开文件的文件名。

到目前为止,我唯一发现的是从AppleScript创建一个应用程序。然后,AppleScript可以解析参数并与他们调用主应用程序。这种方法有两个问题。

首先,如果用户更改并直接选择应用程序会发生什么?我认为这只是不起作用吗?有什么办法吗?

第二,我首先如何自动关联应用程序?我找到了有关cfbundletypeextensions的信息,但后来发现这被弃用了。我找到了一些有关UTI和发布服务的信息。如何将UTI添加到PLIST文件并运行LSRegister命令是有道理的。您将如何自动执行此操作?用户使用DMG安装应用程序,我可以在什么时候运行LSRegister命令?

将以下内容添加到您的Info.plist中。它将告诉MacOS您的应用程序处理.foo.bar文件。

<key>CFBundleDocumentTypes</key>
<array>
<dict>
    <key>CFBundleTypeRole</key>
        <string>Viewer</string>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>foo</string>
        <string>bar</string>
    </array>
    <key>CFBundleTypeIconFile</key>
        <string>FileIcons.icns</string>
    <key>CFBundleTypeMIMETypes</key>
        <string>application/octet-stream</string>
    <key>CFBundleTypeName</key>
        <string>Something Unique Here</string>
    <key>CFBundleTypeOSTypes</key>
    <array>
        <string>****</string>
    </array>
</dict>
</array>

FileIcons.icns应包含注册文件的图标文件。如果您不想创建文件图标,则可以将该字符串空白:

<key>CFBundleTypeIconFile</key>
    <string></string>

CFBundleTypeMIMETypes设置为上面的application/octet-stream。这就是通用二进制数据的MIME类型。如果文件实际上具有适当的MIME类型,请使用这些。

一旦MacOS看到您的应用程序(例如,在下载时),它将自动知道可以打开.foo.bar。您不需要运行任何外部任何东西。

最后,当用户双击.foo.bar文件时,您的应用程序将由MacOS启动,并且它将接收"打开文件"事件。您需要处理。您的工作方式取决于开发应用程序的框架/语言。