React Native应用构建完成后能否注入或添加环境变量?
可行性结论
这个方案完全可落地。你的iOS构建耗时大部分集中在原生代码编译、Pods依赖编译、主二进制生成这类和环境变量无关的步骤,仅修改环境变量完全不需要重新走全量构建流程,只要对缓存的基础构建产物做变量注入、重签名即可,调整后仅改环境变量的构建耗时可以压缩到5分钟以内。
具体实现步骤
- 第一阶段:生成并缓存无环境变量的基础构建产物
把构建流程拆分为「基础构建」和「变量注入打包」两个环节:
基础构建环节仅在Podfile.lock、iOS原生代码、RN核心依赖(package-lock.json/yarn.lock/pnpm-lock.yaml)发生变更时执行,编译所有原生代码、生成未注入环境变量的.app基础包、未替换变量的JS bundle骨架,将整个ios/build目录以及Pods编译产物存入GitHub Actions缓存,缓存key绑定上述变更文件的哈希值即可。 - 第二阶段:注入环境变量
根据你的环境变量使用场景做对应替换即可,不需要重新编译:- JS侧环境变量:如果使用
react-native-config之类的变量管理库,直接写脚本替换GeneratedDotEnv.m文件里的占位值,或者直接修改main.jsbundle里预设的变量占位符即可。 - 原生侧配置变量:如果是存放在Info.plist里的变量,直接用
plutil -replace 字段名 -string 变量值 路径/Info.plist命令修改即可。
- JS侧环境变量:如果使用
- 第三阶段:重签名导出IPA
注入变量后.app包内容发生了变更,需要重新对.app进行签名,再导出IPA包,这一步全程耗时不超过2分钟。
注意事项
- 所有需要动态修改的环境变量不要硬编码到原生代码的编译段中,要提前预留好配置文件/占位符,否则后注入无法生效
- 生成基础缓存产物时要提前清空所有已经写入的环境变量值,避免缓存脏数据
- 重签名使用的证书、描述文件需要和基础构建环节使用的完全一致,否则会出现签名失败无法安装的问题
内容的提问来源于stack exchange,提问作者shawn
相关产品推荐
相关产品推荐

