跳到主要内容

使用本地凭证

这个网页介绍了如何在EAS中配置和使用本地凭证。以下是网页内容的中文翻译:

了解如何在EAS使用时配置和使用本地凭证。


通常,您可以通过让EAS为您处理来避免成为一个代码签名专家。然而,在某些情况下,一些用户可能希望自行管理他们的项目密钥库、证书和配置文件。

如果您想自行管理自己的应用签名凭证,您可以使用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_PASSWORDKEY_PASSWORDKEY_ALIAScom.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"

一旦您的计算机上有密钥库文件,您应该将其移动到适当的目录。我们建议您将密钥库保存在android/keystores目录中。记得git-ignore您所有的发布密钥库! 如果您运行了上述keytool命令并将密钥库放置在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指向密钥库在计算机上的位置。支持相对(相对于项目根目录)和绝对路径。
  • keystorePassword是密钥库密码。如果您已遵循前面的步骤,那就是KEYSTORE_PASSWORD的值。
  • keyAlias是密钥别名。如果您已遵循前面的步骤,那就是KEY_ALIAS的值。
  • keyPassword是密钥密码。如果您已遵循前面的步骤,那就是KEY_PASSWORD的值。

iOS凭证

构建iOS应用程序二进制文件需要更多的先决条件。您需要一个付费的Apple Developer账户,然后您需要为您的应用程序生成分发证书和配置文件,这可以通过Apple Developer Portal完成。

一旦您的计算机上有分发证书和配置文件,您应该将它们移动到适当的目录。我们建议您将它们保存在ios/certs目录中。在本文档的其余部分,我们假设它们分别被命名为dist.p12profile.mobileprovision

记得将包含您凭证的目录添加到**.gitignore**,这样您就不会意外地将它们提交到仓库并可能泄露您的秘密。

如果您已将凭证放置在建议的目录中,您可以通过向**.gitignore**添加以下行来忽略这些文件:

ios/certs/dist.p12
ios/certs/profile.mobileprovision

创建(或编辑)credentials.json并使用凭证进行配置:

{
"android": {
%%placeholder-start%%... %%placeholder-end%%
},
"ios": {
"provisioningProfilePath": "ios/certs/profile.mobileprovision",
"distributionCertificate": {
"path": "ios/certs/dist.p12",
"password": "DISTRIBUTION_CERTIFICATE_PASSWORD"
}
}
}
  • provisioningProfilePath指向配置文件在计算机上的位置。支持相对(相对于项目根目录)和绝对路径。
  • distributionCertificate.path指向分发证书在计算机上的位置。支持相对(相对于项目根目录)和绝对路径。
  • distributionCertificate.password是位于distributionCertificate.path的分发证书的密码。

多目标项目

如果您的iOS应用程序使用App Extensions,如Share Extension、Widget Extension等,您需要为Xcode项目的每个目标提供凭证。这是必要的,因为每个扩展都由一个单独的bundle identifier标识。

假设您的项目由一个主应用程序目标(命名为multitarget)和一个Share Extension目标(命名为shareextension)组成。 multi-target 在这种情况下,您的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": {
"android": {
"credentialsSource": "local"
}
},
"google-production": {
"android": {
"credentialsSource": "remote"
}
}
}
}

如果您没有设置任何选项,"credentialsSource"将默认为"remote"

从CI触发的构建中使用本地凭证

在开始设置您的CI作业之前,请确保您的credentials.jsoneas.json文件已按照上述描述进行配置。

开发人员倾向于通过使用环境变量来为CI作业提供秘密。这种方法的一个挑战是credentials.json文件包含一个JSON对象,并且可能很难正确转义它,因此您可以将其分配给环境变量。解决这个问题的一个可能的方案是将文件转换为base64编码的字符串,将环境变量设置为该值,然后在CI上稍后对其进行解码并恢复文件。

考虑以下步骤:

  • 在控制台中运行以下命令,根据您的凭证文件生成Base64字符串:
base64 credentials.json
  • 在您的CI上,将CREDENTIALS_JSON_BASE64环境变量设置为上述命令的输出。

  • 在CI作业中,使用一个简单的shell命令恢复文件:

echo $CREDENTIALS_JSON_BASE64 | base64 -d > credentials.json

同样,您可以对您的密钥库、配置文件和分发证书进行编码,以便稍后在CI上恢复。要成功使用CI中的本地凭证触发构建,您必须确保所有凭证都存在于CI实例的文件系统中(在credentials.json中定义的相同位置)。

一旦恢复步骤就位,您可以使用从CI指南触发构建中描述的相同过程来触发构建。