深入了解 Apple 的 .car 文件格式
深入了解 Apple 的 .car 文件格式 这一探索深入探讨了其意义和潜在影响。 — Mewayz 商业操作系统。
Mewayz Team
Editorial Team
深入了解 Apple 的 .car 文件格式
Apple 的 .car 文件格式(Compiled Asset Catalog Resource 的缩写)是 Apple 用于在整个平台生态系统中打包、优化和交付应用程序资产的二进制容器。对于任何想要发布更精简、更快和更好优化的应用程序的 iOS、macOS、tvOS 或 watchOS 开发人员来说,了解这种格式都很重要。
.car 文件到底是什么以及 Apple 为什么使用它?
当您构建 Xcode 项目时,Assets.xcassets 目录会由 Asset Catalog Compiler (atool) 编译为二进制 .car 文件,该文件会包含在您的应用程序包中。 Apple 不是在运行时提供松散的 PNG、PDF 或 HEIC 文件,而是将所有内容捆绑到这个单一的结构化二进制文件中。
这种设计背后的动机是经过深思熟虑和分层的。编译器在构建时执行多项优化,这对于原始图像文件来说是不可能的:
GPU 优化的纹理压缩——图像被预先转换为 ASTC 或 PVR 等格式,GPU 可以直接使用,无需 CPU 解码开销。
比例因子切片 — @1x、@2x 和 @3x 变体根据目标设备的屏幕密度进行存储和服务。
应用程序精简集成——应用程序商店剔除与下载设备无关的资产变体,从而显着减少安装大小。
色彩空间管理 — 根据需要对资源进行标记并转换为 Display P3、sRGB 或扩展色彩空间。
命名颜色和符号支持 - SF 符号和语义颜色标记被解析并与栅格数据一起嵌入。
关键见解:.car 格式不仅仅是一个容器,它还是一个主动优化管道。繁重的工作发生在编译时,因此运行时资产加载几乎是即时的,这就是为什么原生 Apple 应用程序比运行同等资产的基于 Web 的替代应用程序感觉更快的核心原因。
.car 文件的内部结构是如何组织的?
Apple 从未发布过 .car 二进制格式的官方规范,但社区的逆向工程工作(最著名的是 Asset Catalog Tinkerer 和 ThemeEngine 等项目)已经详细映射了其布局。
在顶层,.car 文件构建在 BOM(物料清单)文件系统上 - 与 Apple 用于安装程序包的格式相同。在该 BOM 树中,您将找到几个命名流:
RENDITIONS 流是最大且最重要的,包含由唯一的呈现键索引的实际图像和数据有效负载。 KEYFORMAT 流定义这些键的架构,编码属性,如惯用语(iPhone、iPad、Mac)、比例、显示色域和外观(亮、暗)。 FACETKEYSDB 和 FEATUREFLAGS 流分别保存有关命名资产和功能标志的元数据。最新 SDK 版本中添加的 EXTENDED_METADATA 流支持本地化符号名称和可变宽度符号等内容。
每个呈现有效负载本身都是结构化的——它携带一个描述像素尺寸、颜色空间、压缩类型的标头,然后是原始压缩数据。对于光栅图像,这可能是 LZFSE 压缩的原始像素;对于 PDF 矢量,它是原始 PDF 字节;对于数据资产,它是您存储的任何二进制 blob。
开发人员可以使用哪些工具来检查和提取 .car 内容?
由于 .car 文件是编译的二进制文件,因此您不能简单地在 Preview 或 Finder 中打开它们。 Apple 通过私有框架提供了一些官方界面,但为了进行实际检查,您通常会使用第三方工具。
Asset Catalog Tinkerer(由 Guilherme Rambo 开发)是使用最广泛的 GUI 工具 — 它可以让您浏览、预览和导出任何 .car 文件中的单个资产。 acextract 是一个社区命令行实用程序,可从编译的目录中重建松散的文件夹结构。 Apple 自己的 assetutil 命令随 Xcode 工具链一起提供,可以查询元数据并过滤特定设备的目录。对于深度二进制
Streamline Your Business with Mewayz
Mewayz brings 207 business modules into one platform — CRM, invoicing, project management, and more. Join 138,000+ users who simplified their workflow.
Start Free Today →Related Posts
获取更多类似的文章
每周商业提示和产品更新。永远免费。
您已订阅!