React Native iOS构建ExpoModulesCore相关报错调试求助
M1 Mac GitHub Actions + fastlane 构建RN项目编译报错排查方向
你贴的日志只是Xcode输出的失败阶段标记,不是真实错误根因,按以下顺序排查:
- 首先抓真实错误日志:当前输出只标记了哪个构建阶段失败,具体错误被Xcode吞了。在fastlane的gym配置中增加
xcargs: "-verbose",或者直接在CI脚本里加一步,构建失败后打印DerivedData下对应target的完整构建日志,搜索Script-46EB2E00025480.sh执行段落的fatal error、command not found、Permission denied、wrong architecture类关键字,90%的同类问题都是没找到真实报错点,在做无效排查。 - 优先排查CI环境架构兼容问题:GitHub Actions的M1 Mac runner默认走arm64执行环境,老版本React Native(低于0.68)的FBReactNativeSpec代码生成脚本对arm64的node环境兼容很差:
- 加一步CI命令执行
node -p "process.arch",确认输出为arm64,如果输出x64说明你装的是x86版本的node,重装arm64版本即可——架构不匹配时node执行脚本会静默崩溃,最后只留脚本执行失败的标记。 - 如果你的RN版本低于0.67,直接在所有
pod install、fastlane、xcodebuild命令前加arch -x86_64前缀,走Rosetta转译执行,可绕过大半架构兼容问题。
- 加一步CI命令执行
- 检查CI缓存污染问题:你本地重置node_modules、重装Pods不生效是因为CI用独立缓存,跨架构缓存(比如之前x86 runner生成的node_modules、Pods缓存被M1 runner复用)会直接导致二进制不匹配。先临时禁用GitHub Actions里的node_modules、Pods、DerivedData相关缓存,全量重装依赖跑一次,确认是不是缓存问题。
- 修正Pod配置与脚本权限:
- 在Podfile的
post_install钩子中增加如下配置,修正架构与签名问题:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' if target.name == 'FBReactNativeSpec' config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' end end end end- 执行
pod install之后加一步chmod -R +x Pods/Target\ Support\ Files/Pods-*/*.sh,给所有Pods的构建脚本加可执行权限,CI拉取代码时经常丢失脚本执行权限,触发无明确提示的脚本执行失败。
- 在Podfile的
- 注意:日志里的
ExpoModulesCoreSwift编译失败是连锁报错,根因是前面FBReactNativeSpec的代码生成脚本没跑成功,ExpoModulesCore找不到依赖的RN接口才编译失败,不需要单独排查ExpoModulesCore的问题,解决Generate Specs阶段的错误后这个问题会自动消失。
快速验证顺序:先开详细日志找真实报错 → 清CI全量缓存 → 验证node架构 → 补Pod配置和脚本权限 → 老版本RN切Rosetta执行。
内容的提问来源于stack exchange,提问作者paulrostorp
相关产品推荐
相关产品推荐

