This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
使用本地凭据
编辑页面
了解在使用 EAS 时如何配置和使用本地凭据。
通常情况下,你不需要成为代码签名专家,因为可以让 EAS 帮你处理。不过,在某些情况下,一些用户可能希望自行管理项目的 keystore、证书和配置文件。
如果你想管理自己的应用签名凭据,可以使用 credentials.json 向 EAS Build 提供本地文件系统中凭据的相对路径,以及用于签名构建的相关密码。
credentials.json
如果你启用了本地凭据配置,你需要在项目根目录下创建一个 credentials.json 文件,它看起来应该类似这样:
{ "android": { "keystore": { "keystorePath": "android/keystores/release.keystore", "keystorePassword": "paofohlooZ9e", "keyAlias": "keyalias", "keyPassword": "aew1Geuthoev" } }, "ios": { "provisioningProfilePath": "ios/certs/profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/dist-cert.p12", "password": "iex3shi9Lohl" } } }
记得将 credentials.json 和你的所有凭据都添加到 .gitignore 中,这样就不会意外将它们提交到仓库,从而可能泄露你的密钥。
Android 凭据
如果你想构建 Android 应用二进制文件,你需要有一个 keystore。如果你还没有发布用的 keystore,可以使用下面的命令自行生成一个(将 KEYSTORE_PASSWORD、KEY_PASSWORD、KEY_ALIAS 和 com.expo.your.android.package 替换为你选择的值):
- keytool \ -genkey -v \ -storetype JKS \ -keyalg RSA \ -keysize 2048 \ -validity 10000 \ -storepass KEYSTORE_PASSWORD \ -keypass KEY_PASSWORD \ -alias KEY_ALIAS \ -keystore release.keystore \ -dname "CN=com.expo.your.android.package,OU=,O=,L=,S=,C=US"一旦你的电脑上有了 keystore 文件,你应该把它移动到合适的目录。我们建议你将 keystore 保存在 android/keystores 目录中。记得将所有发布用 keystore 都加入 git-ignore! 如果你已经运行了上面的 keytool 命令,并将 keystore 放到了 android/keystores/release.keystore,你可以通过在 .gitignore 中添加以下一行来忽略该文件:
android/keystores/release.keystore
创建 credentials.json 并使用这些凭据进行配置:
{ "android": { "keystore": { "keystorePath": "android/keystores/release.keystore", "keystorePassword": "KEYSTORE_PASSWORD", "keyAlias": "KEY_ALIAS", "keyPassword": "KEY_PASSWORD" } }, "ios": { %%placeholder-start%%... %%placeholder-end%% } }
keystorePath指向 keystore 在你电脑上的位置。支持相对路径(相对于项目根目录)和绝对路径。keystorePassword是 keystore 密码。如果你按照前面的步骤操作,它就是KEYSTORE_PASSWORD的值。keyAlias是密钥别名。如果你按照前面的步骤操作,它就是KEY_ALIAS的值。keyPassword是密钥密码。如果你按照前面的步骤操作,它就是KEY_PASSWORD的值。
iOS 凭据
构建 iOS 应用二进制文件还需要一些额外的前置条件。你需要一个付费的 Apple Developer Account,然后需要为你的应用生成 Distribution Certificate 和 Provisioning Profile,这可以通过 Apple Developer Portal 完成。
一旦你的电脑上有了 Distribution Certificate 和 Provisioning Profile,你应该把它们移动到合适的目录。我们建议你将它们保存在 ios/certs 目录中。在本文档的其余部分,我们假设它们分别命名为 dist.p12 和 profile.mobileprovision。
记得把存放凭据的目录添加到 .gitignore 中,这样就不会意外将它们提交到仓库,从而可能泄露你的密钥。
如果你已将凭据放在建议的目录中,可以通过在 .gitignore 中添加以下一行来忽略这些文件:
ios/certs/*
创建(或编辑)credentials.json 并使用这些凭据进行配置:
{ "android": { %%placeholder-start%%... %%placeholder-end%% }, "ios": { "provisioningProfilePath": "ios/certs/profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/dist.p12", "password": "DISTRIBUTION_CERTIFICATE_PASSWORD" } } }
provisioningProfilePath指向 Provisioning Profile 在你电脑上的位置。支持相对路径(相对于项目根目录)和绝对路径。distributionCertificate.path指向 Distribution Certificate 在你电脑上的位置。支持相对路径(相对于项目根目录)和绝对路径。distributionCertificate.password是位于distributionCertificate.path的 Distribution Certificate 的密码。
多目标项目
如果你的 iOS 应用使用了App 扩展,例如 Share Extension、Widget Extension 等,那么你需要为 Xcode 项目的每个 target 提供凭据。这是必要的,因为每个扩展都由各自独立的 bundle identifier 标识。
假设你的项目由一个主应用 target(名为 multitarget)和一个 Share Extension target(名为 shareextension)组成。
在这种情况下,你的 credentials.json 应如下所示:
{ "ios": { "multitarget": { "provisioningProfilePath": "ios/certs/multitarget-profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/dist.p12", "password": "DISTRIBUTION_CERTIFICATE_PASSWORD" } }, "shareextension": { "provisioningProfilePath": "ios/certs/shareextension-profile.mobileprovision", "distributionCertificate": { "path": "ios/certs/another-dist.p12", "password": "ANOTHER_DISTRIBUTION_CERTIFICATE_PASSWORD" } } } }
设置凭据来源
你可以通过在构建配置中指定 "credentialsSource": "local" 或 "credentialsSource:" "remote" 来告诉 EAS Build 应该如何解析凭据。
- 如果提供
"local",则将使用 credentials.json。 - 如果提供
"remote",则凭据将从 EAS 服务器解析。
例如,也许你希望在部署到 Amazon Appstore 时使用本地凭据,而在部署到 Google Play Store 时使用远程凭据:
{ "build": { "amazon-production": { "credentialsSource": "local", "android": { // ... } }, "google-production": { "credentialsSource": "remote", "android": { // ... } } } }
如果你没有设置任何选项,"credentialsSource" 的默认值将是 "remote"。
在从 CI 触发的构建中使用本地凭据
在开始设置 CI 任务之前,请确保你的 credentials.json 和 eas.json 文件已按上述说明配置好。
开发者通常会通过环境变量向 CI 任务提供密钥。这个方法的一个挑战是,credentials.json 文件包含一个 JSON 对象,可能很难正确转义,因此你可以将其分配给一个环境变量。解决这个问题的一种方法是将文件转换为 base64 编码字符串,将该值设置为环境变量,然后在 CI 中再解码并恢复文件。
请考虑以下步骤:
- 在控制台中运行以下命令,基于你的凭据文件生成 Base64 字符串:
Terminal
-base64 credentials.json - 在你的 CI 中,使用上面命令的输出设置
CREDENTIALS_JSON_BASE64环境变量。 - 在 CI 任务中,使用一个简单的 shell 命令恢复文件:
Terminal
-echo $CREDENTIALS_JSON_BASE64 | base64 -d > credentials.json
同样,你也可以对 keystore、provisioning profile 和 distribution certificate 进行编码,以便之后在 CI 中恢复它们。要成功使用 CI 中的本地凭据触发构建,你必须确保所有凭据都存在于 CI 实例的文件系统中(并且位置与 credentials.json 中定义的相同)。
一旦恢复步骤就绪,你就可以使用 从 CI 触发构建 指南中描述的相同步骤来触发构建。