iOS上使用的UTImportedTypeDeclarations和UTExportedTypeDeclarations是什么?

时间:2014-02-21 15:07:24

标签: ios uti

我在这里遇到拼写错误,或者确实在iOS上存在两种变体:

  • UTImportedTypeDeclarations
  • UTExportedTypeDeclarations

两者都会在Google上返回一些结果,但后者会返回两倍的点击次数。 这些plist键用于什么?和CFBundleDocumentTypes有什么不同,我认为其他两个人已经做了什么,即允许应用程序打开特定的文件类型?

2 个答案:

答案 0 :(得分:11)

UTExportedTypeDeclarations

您使用UTExportedTypeDeclarations定义您的应用想要教其安装系统的您自己的UTI 。 UTI描述一条数据(不一定是位于文件内部的数据!),并且至少需要一个标识符(com.example.MyCoolDataType)。另外,它可能具有名称(My Cool Data Type),一个或多个文件扩展名(.myCoolDataType),一种或多种MIME类型(x-application/my-cool-data-type),一种或多种粘贴板类型(在传输时使用)数据使用复制和粘贴),以及一种或多种旧式OS类型(四个字符代码,不再被OS X使用,这是MacOS 9和更早版本的类型系统)。通常,您还希望UTI符合现有的UTI,这样,不知道您的UTI但知道它所符合的UTI之一的应用仍然可以对它进行有意义的操作。例如。当您说您的UTI符合public.data时,任何可以处理通用数据的过程也可以处理您的UTI,因为您的UTI描述了通用数据。

系统具有所有已知UTI的数据库,并且当您的应用程序定义新的UTI时,这些将自动添加到数据库中,从而为整个系统所了解。 请注意,您的应用定义了这些UTI并不意味着它也可以“处理”包含此类数据的文件!

典型用法示例:
您定义自己的专有文件数据格式,并希望其他应用程序,插件,扩展名等也可以使用此数据格式。

UTImportedTypeDeclarations

您使用UTImportedTypeDeclarations确实会向系统介绍您希望在系统中被知道但不是您的UTI的UTI 。这些值与UTExportedTypeDeclarations相同,所有类型也都添加到数据库中,因此在整个系统中都是可见的。

UTExportedTypeDeclarationsUTImportedTypeDeclarations之间的区别仅在于您声明UTExportedTypeDeclarations中的UTI所有权,这意味着系统是否已经知道UTI但存储的值不同于您的UTI。值,因为它是您的UTI,所以您的值会更新存储的值,因此您的描述始终被视为权威!在UTImportedTypeDeclarations的情况下,甚至不会查看系统已经知道的类型,因为您所说的内容不具有权威性。到目前为止,仅考虑了未知类型的这些类型,并且一旦任何应用在UTExportedTypeDeclarations下列出了相同的UTI,该应用的值就会覆盖您应用所提供的值。

典型用法示例:
您的应用程序能够读取另一个应用程序的专有数据格式,但是您不知道该应用程序是否已安装在系统上。为了使该数据格式已知,您将其声明为import,因为一旦用户安装了该应用程序,您就希望该应用程序为您正确定义数据格式。

CFBundleDocumentTypes

您使用CFBundleDocumentTypes来告诉系统您的应用能够打开哪些文档类型。除非您还在此处列出您的UTI,否则这些UTI在Finder中不会与您的应用程序相关联,并且您的应用程序不会出现在Open With >菜单中。如果将所有文件类型都定义为UTI,那么为每种文档类型提供的所有内容就是UTI和角色。如果未由文档类型覆盖,则名称,图标,文件扩展名或MIME类型之类的内容都将从UTI中获取。但是请注意,可以在不定义UTI的情况下定义文档类型,在这种情况下,必须直接在文档类型上设置所有这些值。您始终必须为文档类型设置的唯一角色是角色。角色可以是“查看者”(可以显示该文件类型,但不能对其进行编辑),“编辑器”(可以显示和编辑该文件类型),“无”(未指定该文件的功能)。

典型用法示例:
您希望您的应用与某些文件类型相关联,这些文件类型可以通过扩展名,MIME类型或UTI标识符来标识。如果您想让您的应用与某个UTI类型相关联,则该应用应该导入或导出该类型,否则系统可能无法识别该类型,而注册为未知的UTI类型根本没有任何作用。

答案 1 :(得分:4)

如果您的应用定义了新的UTI,则使用UTExportedTypeDeclarations。这告诉系统您自己的自定义UTI。

如果您的应用使用其他人创建但未由系统定义的UTI,则使用UTImportedTypeDeclarations