UTI 全称是 Uniform Type Identifier(统一类型标识符),是 Apple 定义的一种用于统一表示文件和数据类型的字符串格式,用来取代早期的 MIME 类型和文件扩展名的混乱做法。
什么是UTI?
UTI 是一个唯一标识符字符串,代表一种内容类型。
例如:
纯文本:文件扩展名 .txt,UTI是public.plain-text。
PNG 图片:文件扩展名 .txt,UTI是 .png。
JPEG 图像:文件扩展名 .jpg,UTI是 .public.jpeg
PDF 文件:文件扩展名 .pdf,UTI是 com.adobe.pdf。
文件夹:文件夹扩展名——,UTI是public.directory。
Swift 文件:文件扩展名 .swift,UTI是public.swift-source。
每种内容类型都可以对应一个或多个扩展名,也可以映射到多个 MIME 类型,但它们都统一归为一个 UTI 标识符。
Apple平台使用UTI
从 iOS 14 / macOS 11 开始,Apple 推出 UTType 结构来替代旧的字符串 UTI,用于 Swift 类型安全地访问。
旧的写法:
let uti: String = "public.png"
Swift新写法(推荐):
import UniformTypeIdentifiers
let type: UTType = .png
print(type.identifier) // "public.png"
和UTType的关系
UTI:底层字符串标识(如 “public.json”)。
UTType:Swift 类型封装(如 .json),内部就是 UTI 字符串。
可以从 UTType 获取 UTI 字符串:
let jsonType = UTType.json
print(jsonType.identifier) // "public.json"
常见UTI示例
1、文本:UTI标识符public.plain-text,Swift UTType是 .plainText。
2、图片:UTI标识符public.image,Swift UTType是 .image。
3、PNG 图片:UTI标识符public.png,Swift UTType是 .png。
4、JPEG 图片:UTI标识符public.jpeg,Swift UTType是 .jpeg。
5、音频:UTI标识符public.audio,Swift UTType是 .audio。
6、视频:UTI标识符public.movie,Swift UTType是 .movie。
7、JSON:UTI标识符public.json,Swift UTType是 .json。
8、文件夹:UTI标识符public.directory,Swift UTType是 .directory。
自定义UTI(高级)
可以为自己的 App 定义一个自定义 UTI,比如:
UTType(exportedAs: "com.yourcompany.mydoc")
在Info.plist中注册:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.yourcompany.mydoc</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My Custom Document</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>mydoc</string>
</array>
<key>public.mime-type</key>
<string>application/mydoc</string>
</dict>
</dict>
</array>
总结
UTI是统一类型标识符(如 “public.png”)。
在Swift中对UTI封装为UTType,让UTI更安全、可读性强。
用于表示文件/数据类型,导入、导出和文档注册等场景。
替代了文件扩展名 + MIME类型的混乱组合。
在.fileImporter 和 .fileExporter 都必须依赖 UTType(背后就是 UTI)。
UTType 比 .ext == “.png” 更安全,跨平台更可靠。
自定义 App 的文档格式,必须注册新的 UTI(例如 com.myapp.myfile)。
扩展知识
1、Apple类型标识符UTType:https://fangjunyu.com/2025/07/05/apple%e7%b1%bb%e5%9e%8b%e6%a0%87%e8%af%86%e7%ac%a6uttype/