如何在React Native中为不同bundle identifier配置对应env文件?
问题根因
- 问题1:XCode中拷贝.env的脚本执行顺序晚于react-native-config读取环境变量的时机,导致始终读的是旧的.env文件内容
- 问题2:
npx react-native run-ios默认使用Prod对应的配置构建,没有指定Dev/QA的scheme和配置,所以bundle id为Prod的值
修复步骤
1. 调整XCode脚本执行顺序
- 打开XCode对应项目,点击项目根目录 → 选中对应Target → 进入Build Phases标签页
- 找到你之前添加的拷贝.env的脚本,将它拖动到 [CP] Copy Pods Resources 之前、所有react-native-config相关执行步骤的最前面(如果没看到react-native-config的步骤,就放在所有pod相关执行步骤的最开头)
- 给脚本加上判断逻辑,无需为每个scheme单独写脚本,同一个脚本即可适配所有环境:
# 根据当前构建的configuration加载对应env文件 if [ "${CONFIGURATION}" == "Debug Dev" ] || [ "${CONFIGURATION}" == "Release Dev" ]; then cp "${PROJECT_DIR}/../.env.dev" "${PROJECT_DIR}/../.env" elif [ "${CONFIGURATION}" == "Debug Qa" ] || [ "${CONFIGURATION}" == "Release Qa" ]; then cp "${PROJECT_DIR}/../.env.qa" "${PROJECT_DIR}/../.env" else cp "${PROJECT_DIR}/../.env" "${PROJECT_DIR}/../.env" fi
注意:上面的Debug Dev、Release Dev要替换成你自己在XCode里新建的Dev/QA配置的实际名称,大小写严格匹配
2. 配置scheme构建预处理(可选,避免缓存问题)
- 点击XCode顶部scheme选择栏 → 选中Dev scheme → 点击Edit Scheme
- 进入Build → Pre-actions,点击+号添加New Run Script Action,把上面的拷贝脚本再粘贴一遍,设置Provide build settings from选择你的项目target,避免变量读取不到
- QA和Prod scheme做相同配置,对应不同env文件即可
3. 修复命令行构建的bundle id问题
运行run-ios时指定对应的scheme和configuration即可,Dev环境的运行命令修改为:ENVFILE=.env.dev npx react-native run-ios --scheme "myapp.Dev" --configuration "Debug Dev"
替换scheme和configuration名称为你自己的实际命名即可,QA环境同理替换对应参数
4. 清理缓存生效
修改完成后先执行以下操作避免缓存影响:
- 删除项目根目录下的
.env临时文件 - 执行
cd ios && xcodebuild clean清理XCode构建缓存 - 删除模拟器上已安装的三个旧版本应用
- 重新运行项目验证
内容的提问来源于stack exchange,提问作者Morton
相关产品推荐
相关产品推荐

