如何在Expo本地凭据credentials.json中配置多个Provisioning Profile?
解决Expo EAS多环境Provisioning Profile配置问题
核心问题分析
你遇到两个关键点问题:一是无法在单一credentials.json中区分生产/开发环境的Provisioning Profile;二是内部分发时误用了App Store类型的生产Profile(内部分发要求使用Ad Hoc类型的Profile)。
具体解决步骤
1. 创建多环境凭证配置文件
放弃单一credentials.json,为每个环境单独创建对应配置文件:
- 开发/内部分发环境:
credentials.development.json,配置Ad Hoc类型的Provisioning Profile - 生产/App Store分发环境:
credentials.production.json,配置App Store类型的Provisioning Profile
示例:credentials.development.json
{ "android": { "keystore": { "keystorePath": "android/keystores/release.keystore", "keystorePassword": "paofohlooZ9e", "keyAlias": "keyalias", "keyPassword": "aew1Geuthoev" } }, "ios": { "provisioningProfilePath": "ios/certs/adhoc-profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/dist-cert.p12", "password": "iex3shi9Lohl" } } }
示例:credentials.production.json
{ "android": { "keystore": { "keystorePath": "android/keystores/release.keystore", "keystorePassword": "paofohlooZ9e", "keyAlias": "keyalias", "keyPassword": "aew1Geuthoev" } }, "ios": { "provisioningProfilePath": "ios/certs/appstore-profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/dist-cert.p12", "password": "iex3shi9Lohl" } } }
2. 构建时关联对应环境的配置
有两种方式实现环境与凭证文件的绑定:
- 命令行直接指定:
开发/内部分发构建:
生产/App Store分发构建:eas build --profile development --credentials-path ./credentials.development.jsoneas build --profile production --credentials-path ./credentials.production.json - 在eas.json中预设配置(更高效):
修改项目根目录的eas.json,在每个构建profile中添加credentialsPath字段:
之后只需运行{ "build": { "development": { "developmentClient": true, "distribution": "internal", "credentialsPath": "./credentials.development.json" }, "production": { "distribution": "store", "credentialsPath": "./credentials.production.json" } } }eas build --profile development或eas build --profile production,即可自动加载对应环境的凭证配置。
3. 严格匹配Profile类型与分发方式
- 内部分发(
internal):必须使用Ad Hoc类型的Provisioning Profile,这类Profile包含测试设备UDID,允许安装到指定测试设备 - App Store分发(
store):使用App Store类型的Provisioning Profile,用于提交应用到App Store审核
若用App Store类型的Profile做内部分发,必然触发你遇到的报错,务必保证环境与Profile类型一一对应。
内容的提问来源于stack exchange,提问作者Lasharela
相关产品推荐
相关产品推荐

