17 个重大版本发布
0.18.0 | 2024年1月17日 |
---|---|
0.17.0 | 2023年11月17日 |
0.16.0 | 2023年11月15日 |
0.13.0 | 2022年12月21日 |
0.2.0 | 2022年3月28日 |
#195 in macOS 和 iOS API
13,371 每月下载量
在 15 个crate中使用 (通过 apple-codesign)
120KB
2.5K SLoC
apple-flat-package
此crate实现了一个接口,用于Apple的flat package安装程序包文件格式。这是自macOS 10.5以来使用的基于XAR的安装程序包格式(.pkg
)。
该接口是纯Rust,无需使用Apple特定工具或硬件即可运行。此crate中的功能可用于重新实现Apple安装工具,如pkgbuild
和productbuild
。
lib.rs
:
Apple flat packages。
Apple flat packages - 通常以 .pkg
文件的形式存在 - 是macOS使用的安装文件格式。
文件格式
flat packages是Apple风格的XAR存档。XAR是一个类似于tar的文件格式,由文件记录/元数据和原始文件数据组成。有关此文件格式的更多信息,请参阅apple-xar
crate。
Flat packages有2种口味:component packages和product packages。 Component packages包含一个单个的component。 Product安装程序可以包含多个components以及描述安装程序的额外元数据。最终用户的.pkg
文件通常是product packages。使用Apple工具,component packages使用pkgbuild
构建,而product packages使用productbuild
构建。
Components
一个component定义了一个可安装的单元。 Components由一组知名文件组成
Bom
描述组件内容的 物料清单。 PackageInfo
描述组件的 XML 文件。有关定义此文件格式的 Rust 结构体的信息,请参阅 [PackageInfo]。 Payload
包含组成组件的文件的 cpio 存档。有关此文件格式的更多信息,请参阅 cpio-archive
。 Scripts
包含作为组件处理一部分运行的 脚本 文件的 cpio 存档。
产品
一个 产品 平坦包由 1 个或多个 组件 以及额外的元数据组成。
产品平坦包通过存档根目录中存在的 Distribution
XML 文件来识别。有关定义此文件格式的 Rust 类型的信息,请参阅 [Distribution]。有关 Apple 的 XML 文档,请参阅 Apple's XML documentation。
产品平坦包中的组件存在于子目录中,这些子目录通常具有名称 *.pkg/
。
此外,产品平坦包还可能在 Resources/
目录中包含额外的 资源 文件。
加密签名
加密消息语法 (CMS) / RFC 5652 签名可以嵌入 XAR 存档的 内容表 中,这是一个位于 XAR 开头的数据结构,用于定义其中的内容。
加密签名是针对 校验和 内容摘要的,该摘要也记录在 XAR 内容表中。这个 校验和 有效地捕获了 XAR 中所有文件的内容。
嵌套存档格式
平坦包包含多个数据结构,这些数据结构有效地列举了文件列表。洋葱有很多层,并且有功能重复来表示文件清单。
- XAR 存档包含一个列举 XAR 中文件的 内容表。
- 每个组件都有
Payload
和/或Scripts
文件,这些文件是 cpio 存档。这些 cpio 存档是包含文件元数据和内容的文件清单。 - 每个组件可能还有一个
Bom
,它是一个定义文件元数据以及其他属性的二进制数据结构。
还有涉及压缩的多个层次
- XAR 内容表可能使用 zlib 进行压缩。
- XAR 存档中的单个文件可以单独使用表示 MIME 类型的压缩格式进行压缩。
- cpio 存档文件也可以进行压缩。
- 组件中安装的文件也可能被压缩(但此文件内容由平坦包格式视为不可见)。
依赖项
~12–22MB
~419K SLoC