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

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

Expo SDK 56 通过为 Expo 模块引入预编译的 XCFramework,显著提升了 iOS 干净构建时间。此前,每次干净构建都会从源码重新编译 React Native 核心、Expo 模块和第三方库。现在,您的应用程序可直接链接这些预编译的二进制文件,在无需任何配置的情况下,大幅加快开发流程和 EAS Builds 的速度。此举也标志着从传统的 CocoaPods 依赖系统向 Apple 现代 Swift Package Manager(SPM)的转变正式开启。 预编译的 XCFramework 是 Apple 用于分发预编译原生库的格式,消除了冗余的本地编译。此次更新解决了过度依赖过时的 CocoaPods 以及原生构建缓慢的双重问题。CocoaPods 作为一种基于 Ruby 的遗留基础设施,已接近其生命周期终点,向 SPM 的迁移对于确保未来兼容性至关重要。缓慢的原生构建,尤其是在持续集成(CI)和大项目中,因将编译工作提前至流水线早期、实现框架一次性编译并复用而得到缓解。 实施此项工作面临技术挑战,主要源于 XCFramework 严格的模块化要求与 CocoaPods 宽松环境形成鲜明对比。关键难点包括重构公共接口以移除非法头文件导出、打破 Swift 与 Objective-C 之间的循环依赖,以及分离源码树以满足 SPM 严格的拥有权规则。为弥合与 React Native 现有头文件结构之间的差距,团队实现了 Clang 虚拟文件系统(VFS)覆盖层,使编译器能够看到虚拟的模块化布局,而无需进行物理重组。 构建时间的提升十分显著:预编译的 React Native 核心将构建时间减少了约 44%,Expo 模块再额外减少 10%(总计 50%),第三方库再减少 15%(总计 65%)。为管理 SPM 清单的复杂性,团队开发了新工具以自动生成 Package.swift 文件、源码结构和依赖图。此次迁移支持共存模式,允许开发者在需要时禁用预编译模块,同时生态系统逐步脱离 CocoaPods。 此次基础设施迁移是 Expo SDK 56 更广泛现代化努力的一部分,旨在实现更快的原生构建、更清晰的模块化架构以及与 Apple 开发生态的更深层次集成。下一步工作包括稳定兼容性、扩大包覆盖范围、验证性能表现,并与 React Native 上游团队开展合作。此次转型是迈向 Apple 平台上 React Native 开发更具可扩展性未来的里程碑式一步,承诺带来更快的构建速度、改进的工具链,并最终实现一个无需 CocoaPods 的世界。