Expo托管项目启用use_modular_headers!修复Firebase iOS编译报错
Expo 托管项目 Firebase iOS 编译报错修复方案
该报错本质是静态库构建模式下GoogleUtilities pod未开启模块映射,导致Swift实现的FirebaseCoreInternal无法正常导入依赖模块。Expo托管项目无需手动修改Podfile,按以下步骤操作即可解决:
- 安装官方构建配置插件
执行命令安装Expo官方原生构建属性配置插件,无需编写自定义插件即可修改Pod层配置:npx expo install expo-build-properties - 为指定依赖开启模块化头
打开项目根目录的app.json/app.config.js,在expo.plugins数组中添加如下配置。注意仅针对GoogleUtilities开启模块化头即可,禁止全局配置use_modular_headers!,全局开启会导致大量不兼容的React Native原生依赖编译失败:[ "expo-build-properties", { "ios": { "podProperties": { "modular_headers": { "GoogleUtilities": true } } } } ] - 对齐依赖版本
依赖版本错配是触发该问题的最常见原因,执行命令自动将所有原生依赖对齐到当前Expo SDK兼容的版本,不要手动指定超出Expo兼容范围的Firebase相关包版本:npx expo install --fix
如果项目中使用了@react-native-firebase系列包,需确保所有该命名空间下的依赖版本号完全一致,跨版本混用会拉取不兼容的GoogleUtilities版本触发报错。 - 全量清理缓存后重新构建
旧的预构建缓存、CocoaPods缓存经常会导致配置不生效,按顺序执行清理操作:- 删除项目根目录下的
node_modules文件夹、手动预生成的ios文件夹 - 执行包管理器缓存清理:npm用户运行
npm cache clean --force,yarn用户运行yarn cache clean - 执行
npx expo prebuild --clean重新生成原生项目配置 - 本地构建可进入
ios目录执行pod deintegrate && pod install --repo-update后再编译;云端构建直接运行eas build -p ios即可。
- 删除项目根目录下的
若以上步骤操作后仍存在报错,可在app.config.js中编写轻量自定义插件,在Podfile生成阶段直接为GoogleUtilities添加:modular_headers => true属性,无需直接改动Podfile文件。
内容的提问来源于stack exchange,提问作者John Stanwick
相关产品推荐
相关产品推荐

