如何为我的应用文档类型关闭 Finder 的图标预览?
How can I turn off Finder's icon preview for my app's document type?
我已经设法完成了正确的舞蹈,并为我的 OS X 应用程序的文档类型设置了一个自定义 UTI,具有自定义文件扩展名等等。我也为我的文件类型设置了一个图标,这也有效。我知道这一点是因为当我从我的应用程序中保存一个新文件时,我可以看到它以正确的图标出现在 Finder 中。但是——大约一秒钟后,Finder 将我的图标替换为它的一个通用 "preview" 图标,在图标内显示我的文件的文本内容,我的文件扩展名大写,位于预览图标的底部,像这样:
我认为这是因为我声明我的自定义 UTI 具有 MIME 类型 text/plain
并符合 public.utf8-plain-text
。我确实想这样做,因为它们实际上是文本文件,我想让用户这样对待它们,其他应用程序也这样识别它们,等等。但是鉴于此,Finder(可能通过一些 QuickLook 生成器或其他东西)因此说 "aha, it's a text file, I know how to make custom preview icons for text files!" 并替换我的自定义图标。不用说,这不是我想要的。我怎样才能防止这种情况发生?我在我的项目中使用 Objective-C,但我认为这不是 language-specific 问题;这一切都与我应用的 plist 中的 UTI 声明有关。
说到这里,这是我的 UTI 在 Xcode 中配置方式的屏幕截图:
下面是 Xcode 中 UTI 导出的屏幕截图:
那里的图标预览显示为问号很好;这是因为图标图像作为 .iconset
文件夹包含在我的项目中,在构建时由 Xcode 变成必需的 .icns
文件,而 Xcode 不是足够聪明,可以显示正确的预览。但正如我上面所说,正确的图标确实会在 Finder 中显示一秒钟,然后才会被预览图标替换,因此图标 .icns
文件的设置和 .icns
到UTI 显然有效。同样,如果我在 Finder 中对我的文件执行 "Get Info",顺便说一句,它会在信息 window 的左上角显示正确的图标。正确的图标也显示在我的应用程序 window 的标题栏中。只是在 Finder 的显示中使用了错误的图标。有什么想法吗?
经过进一步试验,我目前找到的最佳解决方案是将 "conforms to" 字段从 public.utf8-plain-text
更改为简单的 public.text
。 public.text
UTI 适用于任何类型的文本——任何编码,有或没有标记等。任何更具体的 conforms-to UTI 似乎都会导致 Finder(或无论它是谁)替换我的图标。但是 public.text
图标没有被替换,大概是因为做这个的人觉得他们没有足够的信息来继续,因为 public.text
太通用了。
这确实是 non-optimal,因为这意味着我的文件使用的编码未在我的 UTI 导出信息中公开说明,这使得其他应用不太可能打开我的应用文件文本。如果其他人有更好的解决方案,我很乐意投票支持它而不是这个答案。但是为了后代,我提出了这个答案,因为它可能会帮助处于类似船上的其他人。
我已经设法完成了正确的舞蹈,并为我的 OS X 应用程序的文档类型设置了一个自定义 UTI,具有自定义文件扩展名等等。我也为我的文件类型设置了一个图标,这也有效。我知道这一点是因为当我从我的应用程序中保存一个新文件时,我可以看到它以正确的图标出现在 Finder 中。但是——大约一秒钟后,Finder 将我的图标替换为它的一个通用 "preview" 图标,在图标内显示我的文件的文本内容,我的文件扩展名大写,位于预览图标的底部,像这样:
我认为这是因为我声明我的自定义 UTI 具有 MIME 类型 text/plain
并符合 public.utf8-plain-text
。我确实想这样做,因为它们实际上是文本文件,我想让用户这样对待它们,其他应用程序也这样识别它们,等等。但是鉴于此,Finder(可能通过一些 QuickLook 生成器或其他东西)因此说 "aha, it's a text file, I know how to make custom preview icons for text files!" 并替换我的自定义图标。不用说,这不是我想要的。我怎样才能防止这种情况发生?我在我的项目中使用 Objective-C,但我认为这不是 language-specific 问题;这一切都与我应用的 plist 中的 UTI 声明有关。
说到这里,这是我的 UTI 在 Xcode 中配置方式的屏幕截图:
下面是 Xcode 中 UTI 导出的屏幕截图:
那里的图标预览显示为问号很好;这是因为图标图像作为 .iconset
文件夹包含在我的项目中,在构建时由 Xcode 变成必需的 .icns
文件,而 Xcode 不是足够聪明,可以显示正确的预览。但正如我上面所说,正确的图标确实会在 Finder 中显示一秒钟,然后才会被预览图标替换,因此图标 .icns
文件的设置和 .icns
到UTI 显然有效。同样,如果我在 Finder 中对我的文件执行 "Get Info",顺便说一句,它会在信息 window 的左上角显示正确的图标。正确的图标也显示在我的应用程序 window 的标题栏中。只是在 Finder 的显示中使用了错误的图标。有什么想法吗?
经过进一步试验,我目前找到的最佳解决方案是将 "conforms to" 字段从 public.utf8-plain-text
更改为简单的 public.text
。 public.text
UTI 适用于任何类型的文本——任何编码,有或没有标记等。任何更具体的 conforms-to UTI 似乎都会导致 Finder(或无论它是谁)替换我的图标。但是 public.text
图标没有被替换,大概是因为做这个的人觉得他们没有足够的信息来继续,因为 public.text
太通用了。
这确实是 non-optimal,因为这意味着我的文件使用的编码未在我的 UTI 导出信息中公开说明,这使得其他应用不太可能打开我的应用文件文本。如果其他人有更好的解决方案,我很乐意投票支持它而不是这个答案。但是为了后代,我提出了这个答案,因为它可能会帮助处于类似船上的其他人。