macOS应用程序文件关联

时间:2019-03-04 22:10:26

标签: c++ macos file-association dmg

一段时间以来,我一直在尝试筛选信息,但是在确定仍然重要的问题时遇到了问题。出于某种原因,似乎该主题的信息也少于应有的信息。

我正在为macOS分发一个应用程序。我想将自定义文件扩展名与我的应用程序关联。我希望用户能够双击其中一个文件并使应用程序打开它。对于我来说,选择应用程序来打开文件非常容易,但是我不知道如何获取打开文件的文件名。

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

首先,如果用户对其进行更改并直接选择该应用程序会怎样?我以为那是行不通的?有什么办法解决吗?

第二,首先如何自动关联应用程序?我找到了有关CFBundleTypeExtensions的信息,但后来发现它已被弃用。我找到了有关UTI和启动服务的信息。如何将UTI添加到plist文件并运行lsregister命令是很有意义的。不过,您将如何自动执行此操作?用户使用dmg安装应用程序,什么时候可以运行lsregister命令?

1 个答案:

答案 0 :(得分:3)

在您的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将启动您的应用程序,并且它将收到“打开文件”事件。您需要处理。具体操作方式取决于开发应用程序所使用的框架/语言。