将自定义文件扩展名关联到我的应用

时间:2017-03-01 16:29:56

标签: macos info.plist uti

我正在尝试将自定义文件扩展名与我正在处理的应用程序相关联,以便当我双击具有该特定扩展名的文件时,我的应用程序将启动。

.abc文件只是一个收集几个.xml文件的存档文件(.zip重命名为.abc)。当我用我的应用程序加载其中一个.abc文件时,将解压缩归档文件并解析.xml文件,以便我可以在代码中为某些变量设置一些值。

如果我理解正确,这有两个部分。

  • 让OS X知道.abc扩展名必须与我的应用
  • 相关联
  • 在我的应用启动后处理该文件

现在我遇到第一部分的问题。我已经阅读了一些处理此主题的堆栈溢出帖子(例如herehere),但我无法理解他们如何提出字符串值的内容密钥<LSItemContentTypes>(我已经尝试过abc但它不起作用)和密钥<UTTypeIdentifier>

到目前为止,这是我已添加到info.plist文件中的代码

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFile</key>
        <array>
            <string>myicon.icns</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>My Custom Project File</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>don't.know.what.to.put.here.abc</string>
        </array>
    </dict>
</array>

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string> <!--not sure about that value-->
        </array>
        <key>UTTypeDescription</key>
        <string>My Custom Project File</string>
        <key>UTTypeIdentifier</key>
        <string>don't.know.what.to.put.here.abc</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>abc</string>
            <key>public.mime-type</key>
            <string>application/octet-stream</string> <!--not sure about that value-->
        </dict>
    </dict>
</array>

另外,在我的情况下,UTTypeConformsTo public.data是否正常?由于自定义文件扩展名表示包含xml文件的存档?

如果有人可以帮我这个:)

由于

1 个答案:

答案 0 :(得分:0)

我找到了我的问题的解决方案,我只是误读了文档,因为键CFBundleTypeIconFile是一个字符串而不是一个字符串数组(我感到困惑,因为我正在关注和iOS示例使用键{{ 1}}这是一个数组)