使用本地凭证
这个网页介绍了如何在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_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"
一旦您的计算机上有密钥库文件,您应该将其移动到适当的目录。我们建议您将密钥库保存在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.p12和profile.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
)组成。
在这种情况下,您的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.json和eas.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指南触发构建中描述的相同过程来触发构建。