macOS应用程序文件关联

问题描述 投票:2回答:1

我一直在努力筛选信息一段时间,而我在确定仍然相关的问题时遇到了问题。似乎由于某种原因,关于这个主题的信息比应该的少。

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

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

首先,如果用户更改并直接选择应用程序会发生什么?我以为它不会工作?那有什么办法吗?

其次,如何首先自动关联应用程序?我找到了有关CFBundleTypeExtensions的信息,但后来发现这已被弃用。我在UTI和Launch Services上找到了一些信息。如何将UTI添加到plist文件并运行lsregister命令是有意义的。你会怎么做呢?用户使用dmg安装应用程序,我可以在什么时候运行lsregister命令?

c++ macos file-association dmg
1个回答
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将启动您的应用程序,它将收到“打开文件”事件。你需要处理它。如何做到这一点取决于您用于开发应用程序的框架/语言。

© www.soinside.com 2019 - 2024. All rights reserved.