如何实现Expo (EAS) iOS首次构建提交全CI自动化(无需交互)
解决Expo iOS首次CI构建的交互式依赖问题
问题本质
Expo首次构建需要完成iOS证书、描述文件关联,以及EAS项目初始化配置,官方要求的“本地成功运行一次构建”,本质是要手动完成这些交互式确认步骤。我们可以通过预生成固化配置,让CI直接复用,跳过所有交互环节。
实操步骤
1. 预生成初始化配置模板
找一个测试应用在本地完整跑一次eas build流程,结束后保存以下文件作为模板:
.eas/build.json:EAS核心构建配置文件ios/目录下所有自动生成的文件(比如Podfile.lock、Expo.xcworkspace、Expo.plist等)- 如果使用自签名证书,导出对应的
.p12证书文件和.mobileprovision描述文件
2. 集成到多应用代码生成工具
生成新应用时,自动注入模板文件并替换变量:
- 复制
.eas/build.json到新项目根目录,替换其中的bundleIdentifier、projectId等为新应用的对应值 - 直接将
ios/模板文件同步到新应用的ios目录 - 证书和描述文件不要直接存入代码,转成Base64字符串后,要么存到GitLab CI环境变量,要么加密后纳入工具资源库
3. 优化CI构建命令
在原有命令基础上添加参数,跳过交互式配置检查:
npx eas-cli build --platform ios --auto-submit --non-interactive --no-wait --skip-project-configuration
--skip-project-configuration参数会直接使用预生成的.eas/build.json,不再触发交互式配置确认
4. 在CI环境注入认证信息
在GitLab CI的项目变量中添加以下环境变量:
EXPO_APPLE_ID:Apple开发者账号邮箱EXPO_APPLE_PASSWORD:Apple账号专用密码(需在Apple ID管理页面生成,不要用普通登录密码)EXPO_PROVISIONING_PROFILE:描述文件的Base64字符串(本地执行base64 -i 你的描述文件.mobileprovision生成)EXPO_CERTIFICATE:.p12证书的Base64字符串(本地执行base64 -i 你的证书.p12生成)EXPO_CERTIFICATE_PASSWORD:证书设置的密码
然后在CI脚本中添加解码和导入证书的步骤:
# 解码描述文件并放到指定目录 echo "$EXPO_PROVISIONING_PROFILE" | base64 --decode > ~/Library/MobileDevice/Provisioning\ Profiles/new-app-profile.mobileprovision # 解码证书文件 echo "$EXPO_CERTIFICATE" | base64 --decode > /tmp/new-app-cert.p12 # 导入证书到CI环境钥匙串,用于代码签名 security import /tmp/new-app-cert.p12 -k ~/Library/Keychains/login.keychain-db -P "$EXPO_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
5. 验证全自动化流程
生成一个新应用后直接触发GitLab CI构建,检查是否能自动完成从构建到提交TestFlight的全流程,无需任何手动交互操作。
内容的提问来源于stack exchange,提问作者Ajaib Singh
相关产品推荐
相关产品推荐

