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

Download history 2583/week @ 2024-04-23 2478/week @ 2024-04-30 2155/week @ 2024-05-07 2583/week @ 2024-05-14 2284/week @ 2024-05-21 2367/week @ 2024-05-28 2398/week @ 2024-06-04 2730/week @ 2024-06-11 2593/week @ 2024-06-18 2579/week @ 2024-06-25 2584/week @ 2024-07-02 2923/week @ 2024-07-09 3155/week @ 2024-07-16 2793/week @ 2024-07-23 2793/week @ 2024-07-30 4055/week @ 2024-08-06

13,371 每月下载量
15 个crate中使用 (通过 apple-codesign)

MPL-2.0 许可证

120KB
2.5K SLoC

apple-flat-package

此crate实现了一个接口,用于Apple的flat package安装程序包文件格式。这是自macOS 10.5以来使用的基于XAR的安装程序包格式(.pkg)。

该接口是纯Rust,无需使用Apple特定工具或硬件即可运行。此crate中的功能可用于重新实现Apple安装工具,如pkgbuildproductbuild


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包含一个单个的componentProduct安装程序可以包含多个components以及描述安装程序的额外元数据。最终用户的.pkg文件通常是product packages。使用Apple工具,component packages使用pkgbuild构建,而product packages使用productbuild构建。

Components

一个component定义了一个可安装的单元。 Components由一组知名文件组成

Bom 描述组件内容的 物料清单PackageInfo 描述组件的 XML 文件。有关定义此文件格式的 Rust 结构体的信息,请参阅 [PackageInfo]。 Payload 包含组成组件的文件的 cpio 存档。有关此文件格式的更多信息,请参阅 cpio-archiveScripts 包含作为组件处理一部分运行的 脚本 文件的 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