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

Posted

技术标签:

【中文标题】我是不是正确使用了统一类型标识符?【英文标题】:Have I used uniform type identifiers correctly?我是否正确使用了统一类型标识符? 【发布时间】:2010-08-10 08:37:01 【问题描述】:

我正在为 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 编码的加密内容... application/octet-stream 是最好的 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】:

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

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

【讨论】:

我应该提到它是一个基于 Qt 的应用程序,所以 [[NSApp delegate] application:openFile:] 不适用...我明天必须检查我的代码。感谢您提供有关 plist 文件和 UTI 的信息。 请参阅***.com/questions/3451280/…,了解在 Finder 中双击 Qt 应用程序时打开文件。

以上是关于我是不是正确使用了统一类型标识符?的主要内容,如果未能解决你的问题,请参考以下文章

第三方统一类型标识符实现?

iOS UTI(统一类型标识)

如何在 plist 中定义统一类型标识符以在共享操作表中添加我的 iOS 应用程序选项?

什么是 docx 文件的统一类型标识符

如果我在 Apollo Client 中使用 dataIdFromObject 设置了唯一标识符,是不是需要 graphql 的 ID 类型

URI 和 URL