【问题标题】:macOS application file associationmacOS 应用程序文件关联
【发布时间】:2019-03-04 22:10:25
【问题描述】:

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

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

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

首先,如果用户更改它并直接选择应用程序会发生什么?我想它只是行不通吗?有什么办法吗?

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

【问题讨论】:

    标签: c++ macos file-association dmg


    【解决方案1】:

    将类似以下内容添加到您的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 将启动您的应用程序,并收到“打开文件”事件。你需要处理它。如何做到这一点取决于您用于开发应用的框架/语言。

    【讨论】:

    猜你喜欢
    • 2021-08-27
    • 2021-12-20
    • 1970-01-01
    • 2012-04-27
    • 2011-01-03
    • 2022-01-11
    • 2011-02-10
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多