我是否正确使用了统一类型标识符?

时间:2010-08-10 08:37:02

标签: macos plist file-type

我正在为Mac OS X创建一个应用程序,我想知道我是否在应用程序的.plist文件中正确使用了UTI:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.petroules.silverlock.database</string>
        <key>UTTypeDescription</key>
        <string>Silverlock Database File</string>
        <key>UTTypeIconFile</key>
        <string>app.icns</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>com.apple.ostype</key>
            <string>SDBX</string>
            <key>public.filename-extension</key>
            <array>
                <string>sdbx</string>
            </array>
            <key>public.mime-type</key>
            <string>application/octet-stream</string>
        </dict>
    </dict>
</array>

此代码似乎有效,但在Finder中双击.sdbx文件并不会导致我的应用程序打开文件本身......但这可能只是我的代码(稍后我将会介绍)。

另外,我的文件类型的格式是以base-64编码的加密内容...应用程序/八位字节流是用于此的最佳MIME类型,还是我应该使用的其他内容,我是否可以运行通过使用不太常见的MIME类型来解决频谱中任何地方的兼容性问题?

此外,我还包括以下代码:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>sdbx</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>app.icns</string>
        <key>CFBundleTypeName</key>
        <string>com.petroules.silverlock.database</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.petroules.silverlock.database</string>
        </array>
        <key>LSHandlerRank</key>
        <string>Owner</string>
    </dict>
</array>

我是否应该包含此内容,因为我上面有UTI代码?这有必要吗?两者有什么不同?我真的无法从文档中确定这一点。谢谢:))

1 个答案:

答案 0 :(得分:2)

要确定此代码或代码是否有问题,请在双击文件之前退出应用程序。如果此操作启动了您的应用但未打开该文件,那么您的Info.plist就可以了,问题出在-[[NSApp delegate] application:openFile:]。如果应用程序根本没有启动,那么就启动服务而言,您可以确定Info.plist不正确。

需要UTExportedTypeDeclarationsCFBundleDocumentTypes节。第一个告诉Launch Services您的自定义UTI存在。第二个告诉它你的应用程序是该文件类型的编辑器。