每次构建都跳过 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
