不是尿路感染(urinary tract infections),是 macOS 的统一标识符(Uniform Type Identifiers)。
不是尿路感染(urinary tract infections),是 macOS 的统一标识符(Uniform Type Identifiers)。
本文核心对象:macOS 用来给文件(及 bundle 等)分类型、并映射到可用应用的全局对象分类体系,取代了 Classic Mac OS 的 OSType。命名多用反向 URL 形式(常见以 public 开头,如 public.item、public.jpeg,也有厂商专用如 com.adobe.pdf),呈层级符合关系,便于向上泛化或向下特化。完整 UTI 还带标签规范(文件扩展名、MIME 类型等)供识别;系统预置大量标准 UTI,应用也可在 Info.plist 中导出自定义类型。扩展名/MIME 冲突时系统库优先,第三方之间则近似先到先得且无提示。
文中强调文件类型与应用的关联主要服务于 Finder 及更广的 macOS GUI(例如双击文档应打开预期应用),而非命令行或应用内部文件访问。Finder 侧的类型识别与打开行为依赖 UTI 及其与扩展名、MIME 等的映射,并由 LaunchServices 等子系统 consummate 这些关联。
文中负责根据 UTI 数据库决定用哪个应用打开文档:例如安装 LogUI 后,扩展名为 logui 的文件被查到对应 co.eclecticlight.loguilog,从而交给该应用。应用在 Info.plist 里声明对某些 UTI 的角色(如编辑者)即告知 LaunchServices 应建立的文档关联。该机制还延伸到打开/存储对话框中的类型与扩展名、以及「用何应用打开」列表;与 GUI 相关的子系统依赖 UTI,而非内容嗅探。
应用通过 Info.plist 向系统 UTI 库补充自定义类型,并声明自身对特定 UTI 承担的角色。文中以 LogUI 为例:导出 co.eclecticlight.loguilog(描述为 LogUI Log,符合 public.json),同时声明作为该类文档的编辑者,从而让 LaunchServices 建立打开关联;标签规范里还可给出扩展名(如 logui)和 MIME(如 application/json)供识别。
Classic Mac OS 时代用来标识文件类型的旧方案,文中指出已被 macOS 的 UTI 体系取代。关键点中亦提到:如今文件类型主要通过文件扩展名或 MIME 映射到 UTI,OSType 仅作为历史上的识别方式一并提及。
在本文中,MIME Type 是 UTI 标签规范(tag specification)的一部分,对应类型为 public.mime-type,用来和文件名扩展名一起把文件识别并映射到具体 UTI。例如 LogUI 自定义类型 co.eclecticlight.loguilog 可关联扩展名 logui 与 MIME application/json,从而识别本机文件或下载文件。与扩展名类似,MIME 也可能被多个 UTI 争用;发生冲突时系统库中的定义优先,第三方之间则大致按先到先得且无明确提示。它是 LaunchServices 等 GUI 关联机制的输入之一,而非命令行工具的硬性约束。
文章指出,Spotlight 在为文件建索引时,除 UTI/扩展名体系外,还会用基于文件内容嗅探(sniffing)的额外类型判定方法。这与 LaunchServices 及多数 GUI 子系统主要依赖 UTI 及其关联形成对比:后者按扩展名、MIME 等映射到 UTI 再匹配应用,而 Spotlight 的类型判断路径更不完全受 UTI 数据库左右。作者借此说明「文件类型如何被系统认识」在不同子系统间并不统一。
文中将 Quick Look 与 Spotlight 并列:生成预览时同样会采用基于文件数据嗅探的补充类型检查,而不是只靠 UTI 与扩展名/MIME 的关联。相对地,Finder 双击打开、打开/存储对话框可选类型、以及「用何应用打开」等 GUI 行为,主要由 LaunchServices 依据 UTI 完成。因此 Quick Look 能在 UTI 信息不足或仅有动态 UTI 时,仍可能依据内容识别并展示预览,体现 macOS 类型系统在预览链路与应用关联链路上的分工差异。
文中说明 macOS 自早期 Macintosh 起就依赖「文件类型—应用」关联来支撑 GUI;现行方案是 UTI 分类与映射。系统自带大量预定义 UTI,并通过 LaunchServices 等在双击打开、打开/存储对话框、可选应用列表等场景使用这些关联。命令行工具及应用内部读写一般不受 UTI/扩展名约束;Spotlight、QuickLook 还会用内容嗅探,但 GUI 侧主要仍靠 UTI。对扩展名冲突目前不做主动检测,系统库定义优先于第三方。
可左右滑动查看