> UTImportedTypeDeclarations
> UTExportedTypeDeclarations
两者都会在Google上返回一些结果,但后者会返回两倍的点击次数.
这些plist键用于什么?和CFBundleDocumentTypes有什么区别,它似乎已经做了我认为其他两个做的事情,即允许应用程序打开特定的文件类型?
解决方法
您可以使用UTExportedTypeDeclarations定义您自己的应用程序想要教授其安装系统的UTI. UTI描述了一段数据(不一定是位于文件中的数据!),并且至少需要一个标识符(com.example.MyCoolDataType).此外,它可能有一个名称(我的酷数据类型),一个或多个文件扩展名(.myCoolDataType),一个或多个MIME类型(x-application / my-cool-data-type),一个或多个粘贴板类型(使用当使用复制和粘贴传输那种数据时,以及一个或多个传统操作系统类型(四个字符代码,OS X不再使用,这是MacOS 9及更早版本的类型系统).通常,您还希望UTI符合现有的UTI,这样,那些不了解您的UTI但确实知道其符合的UTI的应用程序仍然能够对其执行有意义的操作.例如.当你说你的UTI符合public.data时,任何可以处理通用数据的进程也可以处理你的UTI,因为你的UTI描述了通用数据.
系统具有所有已知UTI的数据库,当您的应用程序定义新UTI时,这些UTI会自动添加到数据库中,因此整个系统都知道这些UTI.请注意,您的应用程序定义这些UTI的事实并不意味着它也可以“处理”包含此类数据的文件!
典型用法示例:您定义自己的专有文件数据格式,并且您希望其他应用程序,插件,扩展等也知道此数据格式.
UTImportedTypeDeclarations
您使用UTImportedTypeDeclarations会向系统讲授您希望在系统中知道但不是您的UTI的UTI.这些值与UTExportedTypeDeclarations相同,并且所有类型也都添加到数据库中,因此在整个系统中都可见.
UTExportedTypeDeclarations和UTImportedTypeDeclarations之间的区别仅在于您声明UTExportedTypeDeclarations中UTI的所有权,这意味着如果系统已经知道UTI但存储的值与您的值不同,则您的值会更新存储的值,因为它是您的UTI,所以你的描述总是被认为是权威的!在UTImportedTypeDeclarations的情况下,甚至没有查看系统已知的类型,因为您说的不具有权威性.这些仅被考虑到目前为止未知的类型,并且一旦任何应用程序在UTExportedTypeDeclarations下列出相同的UTI,该应用程序的值将覆盖您的应用程序给出的值.
典型用法示例:您的应用程序能够读取其他应用程序的专有数据格式,但您不知道该应用程序是否安装在系统上.要使该数据格式已知,请将其声明为导入,因为只要用户安装了相关应用程序,您就希望此应用程序正确地为您定义数据格式.
CFBundleDocumentTypes
您可以使用CFBundleDocumentTypes告诉系统您的应用程序能够打开哪些文档类型.除非您还在此处列出了您的UTI,否则这些UTI不会与您在Finder中的应用相关联,并且您的应用不会显示在打开时使用>菜单.如果您将所有文件类型定义为UTI,那么您需要为每种文档类型提供的是UTI和角色.如果没有被文档类型覆盖,那么名称,图标,文件扩展名或MIME类型等内容都将从UTI中获取.但请注意,您可以在不定义UTI的情况下定义文档类型,在这种情况下,您必须直接在文档类型上设置所有这些值.您始终必须为文档类型设置的唯一内容是角色.角色可以是“查看器”(您可以显示该文件类型但不能编辑它),“编辑器”(您可以显示和编辑该文件类型),“无”(未指定您可以对该文件执行的操作) .
典型用法示例:您希望您的应用程序与某些文件类型相关联,这些文件类型可通过扩展名,MIME类型或UTI标识符来标识.如果您希望应用程序与UTI类型相关联,则应用程序应该导入或导出类型,否则系统可能不知道该类型,并且注册到未知的UTI类型根本没有任何影响.