每次构建都跳过 70+ iOS 包的重新编译

React Native 开发人员面临一个常见问题:每次进行 clean iOS 构建时,都会重新编译整个依赖树。你每次都要等待 React Native 核心、Expo 模块和第三方库重新构建。

Expo SDK 56 解决了这个问题。它将 Expo 模块以预编译的 XCFrameworks 形式发布。你的应用直接链接这些二进制文件,不再需要从源码重新构建。

这一变化加快了 clean build 的速度。它还将生态系统从 CocoaPods 迁移到了 Swift Package Manager。这是 Apple 用于管理依赖的现代系统。

对你的好处:

  • 更少的编译步骤
  • 更快的本地开发速度
  • 更快的 EAS builds 速度
  • 更可预测的构建环境

你不需要进行迁移。这在现有应用中会自动生效。

什么是 XCFrameworks? 它们是 Apple 用于预编译原生库的格式。你不再需要在自己的机器上编译源代码,而是直接使用已经为 iOS 设备和模拟器构建好的二进制文件。

在 Apple M4 Max 上的性能提升: • React Native 核心预构建:构建时间减少约 44%。 • Expo 模块预构建:相比源码减少约 50%。 • 第三方库预构建:相比源码减少约 65%。

大型项目获益最大。随着应用的增长,原生构建时间通常会增加,这会影响你的 CI 和 EAS Build 速度。预编译的 XCFrameworks 将工作提前到了流水线的前端。我们只需编译一次框架,然后重复使用。

这一转型是一次重大的基础设施变革。我们必须解决几个技术障碍:

  • 重构公共接口以隔离依赖项。
  • 修复 Objective-C 和 Swift 之间的循环依赖。
  • 创建临时源码结构以满足 Swift Package Manager 的规则。
  • 使用 Clang Virtual File System overlays 来支持旧版头文件布局。

SDK 56 专注于共存。你仍然可以使用 CocoaPods。如果你需要关闭预编译模块,请使用此设置: EXPO_USE_PRECOMPILED_MODULES=0

这一举措使 Expo 更贴近 Apple 的现代开发生态系统。这意味着未来将拥有更快的构建速度和更清晰的架构。

Source: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6