如何创建要为 iOS 应用程序的自定义导出文档类型显示的图像?

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

我通过将 UTExportTypeDeclarations 和 CFBundleDocumentTypes 添加到 info.plist 来导出应用程序中的自定义文档类型。

如何获取与导出的文档类型关联的自定义图像?

当我导出基于

public.text
一致 UTI(UTTypeConformsTo 键)的文档类型时,无论我做什么,我总是会在自定义文件类型的消息文档附件中看到通用文本文档图标。

我尝试了在 Stack Overflow 和互联网上看到的技术,需要设置

CFBundleTypeIconFiles
CFBundlesDocumentTypes
子键(在
info.plist
中),其值是键字典中的文件名字符串数组,我尝试了该键的替代名称,
CFBundleTypeIconFile
(这显然是该键的 macOS 应用程序变体)。

我尝试过将

CFBundleTypeIconFiles
数组的字符串值设为资源包中图像文件的简单名称,或者,我尝试将字符串数组值设为资源目录中图像的名称,但都没有为我的案子工作过。

我也不清楚应该在图标参考列表中包含哪些尺寸的图像,因为多年来屏幕分辨率和图标要求已经发生了变化。

更糟糕的是,当我do指定 CFBundleTypeIconFiles 键时,显然某些状态会严重混乱,并且 AppIcon 永远不会用作任何 UTI 类型的default(因为它适用于使用某些符合 public.data 定义的自定义导出类型) UTI 基础类型)。我见过恢复默认行为的唯一可靠方法是在 iPhone 上完全重置并重新安装 iOS。 有时但并不总是退出 iCloud,然后重置所有内容(不删除内容)会起作用。

注意:我在这里做一个问答式的回答,以节省人们的困惑和时间,因为这不是一个足够完善的记录区域

ios image export plist uti
1个回答
0
投票

显然从 iOS 16.6、XCode 14.3.1 开始,相关文档是 Apple 2015 年关于 UTI 类型的文档(最初仅适用于 Mac 的文档)。虽然这是一份非常古老的文件,但它似乎是最新且相关的文件。它说使用 UTTypeIconFile 并将值设置为 yourfile.icns

UTTypeIconFile
子项位于 info.plist 中的
UTExportedTypeDeclarations
(或
UTImportedTypeDeclarations
,具体取决于您正在执行的操作)下。

生成 .icns 文件(包含各种分辨率的图标)的一种非常简单的方法是拍摄一张图像,例如 AppIcon 图像,1024x1024,并将其拖动到经典(完全免费)macOS App Store 应用程序的窗口中

image2icon
并将其导出为 .icns。

在 XCode 中将 .icns 文件添加到您的应用程序中,默认情况下,当应用程序启动时,该文件会被复制到应用程序的资源包中,这足以让系统找到并使用它。

然后,当您导出自定义应用程序扩展时,它应该显示为 图标。我已经测试了 public.json、public.txt、public.content 类型的 UTI。

    <key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>LSSupportsOpeningDocumentsInPlace</key>
            <true/>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.data</string>
            </array>
            <key>UTTypeIconFile</key>
            <string>AppIconMirror.icns</string>
            <key>UTTypeDescription</key>
            <string>My App Document</string>
            <key>UTTypeIdentifier</key>
            <string>com.mydomain.document</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>myext</string>
                </array>
            </dict>
        </dict>
    </array>
    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>My App Document</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.mydomain.document</string>
            </array>
        </dict>
    </array>
© www.soinside.com 2019 - 2024. All rights reserved.