You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Expo(React Native)升级至49后执行eas build时Run fastlane步骤报错的解决方法及本地调试方案咨询

Expo(React Native)升级至49后执行eas build时Run fastlane步骤报错的解决方法及本地调试方案咨询

我仔细看了你遇到的问题:从Expo 48升级到49、Node.js从16.x切换到18.x(用nvm设为默认),中途添加又移除Sentry后,执行eas build时fastlane步骤持续报错,而且每次云构建试错要花钱确实很闹心。下面给你针对性的排查方向和本地调试方案,帮你快速解决问题:


一、先分析报错日志里的关键线索

从你贴的日志来看,几个核心问题点值得关注:

  1. xcodebuild命令超时,还出现了Requested but did not find extension point with identifier Xcode.InterfaceBuilderBuildSupport.PlatformDefinition的报错,这大概率和Xcode版本不兼容、依赖缓存异常或者项目配置混乱有关
  2. Expo 49对应React Native 0.72,对Xcode版本有明确要求(至少Xcode 14.3),如果云构建的镜像版本过低,很容易出现这类兼容性问题

二、针对fastlane构建报错的排查步骤

1. 确保云构建镜像符合版本要求

你已经尝试在eas.json里指定"image": "latest",这步是对的,但可以再细化:

  • 直接指定明确的兼容镜像版本,比如"image": "xcode-14.3"(Expo 49推荐的最低Xcode版本),避免latest镜像可能存在的版本波动
  • 本地先确认自己的Xcode版本≥14.3,本地开发环境和云构建环境版本一致能减少很多兼容性问题

2. 彻底清理各类缓存

缓存堆积是这类构建报错的高发原因,建议按顺序执行以下操作:

# 清理Pod依赖缓存
pod cache clean --all
# 清理Expo预构建缓存,重新生成iOS项目文件
npx expo prebuild --clean
# 清理Xcode本地构建缓存
rm -rf ~/Library/Developer/Xcode/DerivedData

如果云构建还是报错,可以在eas.json的构建配置里添加预构建脚本,强制在云环境清理缓存:

"build": {
  "production-ios": {
    "ios": {
      "image": "xcode-14.3",
      "prebuildCommand": "rm -rf Pods && pod cache clean --all && npx expo prebuild --clean"
    },
    "distribution": "store",
    "releaseChannel": "production.ios-1.7.1"
  }
}

3. 重新同步代码签名配置

日志里提到了Provisioning Profile的映射,升级后签名配置容易出现混乱:

  • 本地打开Xcode,进入项目的Signing & Capabilities面板,检查Team、Provisioning Profile是否配置正确,没有红标报错
  • 执行eas credentials命令,重新同步你的签名证书和Provisioning Profile到Expo服务器,确保云构建时能正确获取签名资源

4. 修复Node.js与全局依赖的绑定问题

你重启后eas命令找不到,说明全局依赖和nvm的Node版本绑定关系出了问题:

  • 切换到Node 18.x环境后重新安装eas-cli:
    nvm use 18
    npm install -g eas-cli
    
  • 执行eas --version确认安装成功,且当前终端的Node版本是18.x

三、本地调试fastlane,彻底告别云构建试错成本

你完全可以在本地模拟eas build的fastlane流程,不用每次都花钱跑云构建,步骤如下:

1. 本地初始化fastlane环境

进入项目的iOS目录,初始化fastlane:

cd ios
bundle init
bundle add fastlane
fastlane init

(按照提示选择Manual setup即可,生成基础的Fastfile和配置文件)

2. 同步云构建的fastlane配置

把云构建日志里的Gymfile参数(就是你贴的表格里的内容)复制到本地iOS目录下的Gymfile中,注意把路径改成本地实际路径,比如:

suppress_xcode_output(true)
clean(false)
scheme("MYPROJECTNAME")
configuration("Release")
export_xcargs("OTHER_CODE_SIGN_FLAGS=\"--keychain ~/Library/Keychains/login.keychain-db\"")
disable_xcpretty(true)
buildlog_path("./fastlane/logs")
output_directory("./build")

3. 本地执行fastlane构建

在iOS目录下执行命令,直接复现云构建的fastlane流程:

bundle exec fastlane gym

这样就能在本地看到完整的报错日志,实时调试,完全不用花云构建的费用。

4. 匹配云构建的环境变量(可选)

如果本地构建成功但云构建失败,可能是环境变量差异导致的,你可以在本地设置和云构建相同的环境变量后再执行:

export EAS_BUILD=true
export EXPO_APP_ID=你的项目App ID
bundle exec fastlane gym

备注:内容来源于stack exchange,提问作者Zeth

火山引擎 最新活动