近几个月来,我们重新评估了我们的云构建产品和用户对其的需求。结果表明,有很多功能缺失,人们经常在需要控制环境或云操作出现问题的情况下遇到困难。每种情况都是独特的,但由于 NativeScript 云构建的架构,我们无法提供客户应得的体验。
我们研究了各种填补客户需求与我们当前架构之间差距的方案。我们得出的结论是,我们需要一个全新的解决方案。我们一直在努力提供它,并且已经推出了它 - 使用 Circle CI 的云构建。您可以在 Dimitar Tachev 的这篇精彩博客文章 中了解更多有关该解决方案的信息。
新解决方案在以下方面提供了更好的体验
重要提示:由于我们在拥有更好的解决方案的情况下,没有看到保留现有云构建解决方案的任何好处,因此我们决定停止使用现有的 NativeScript 云构建。停止将从 2020 年 5 月 31 日起对所有云构建生效。
现有的 NativeScript 云构建将在 2020 年 5 月 31 日起停止使用。
我们鼓励大家在截止日期之前迁移到新解决方案!
下面我们将尝试详细说明如何将现有应用程序迁移到使用 nativescript-remote-builds
插件而不是 NativeScript 云构建进行构建。
在开始之前,请确保您已安装下面列出的所有组件,并且它们可以在您的命令行中访问
openssl
ruby -v
以确保它可以访问git --version
以确保它可以访问gem install fastlane
(您需要 2.144 或更高版本)如果您要为 Android 构建,只需转到 迁移应用程序
当前 NativeScript 云构建的设置要求您拥有有效的付费 Apple 开发者帐户和已生成的证书和配置文件对。
nativescript-remote-builds
插件在幕后与 fastlane 协同工作,并依赖于 fastlane match
方法进行 iOS 代码签名。在这种方法中,fastlane 管理您的证书和配置文件,并将它们存储在您为此操作提供的私有 GitHub 存储库中。
gem install fastlane
fastlane match
- 该命令将提示您输入私有存储库以存储自动生成的证书和配置文件、您的 Apple 标识符和密码。3.2 如果您没有 macOS,则必须手动导入构建应用程序所需的证书和配置文件。在这种情况下,使用 fastlane match import
命令。两种方法将在下面介绍
注意:当 fastlane 询问您私有 match 存储库时,请确保使用
ssh
而不是https
在这种情况下,您不必考虑当前的证书和配置文件。只需在 macOS 上执行此操作
fastlane match
该命令将提示您输入您的 Apple 凭据、用于存储证书的私有存储库和用于保护文件的密码。输入所有信息后,fastlane 将根据您的 Apple 帐户自动导入所有必需的证书,并在构建过程中使用它们。
注意:您只需要在第一次执行
fastlane match
时使用 macOS。之后,您就可以从 Windows、Linux 和 macOS 为 iOS 构建。
如果您不想使用自动管理配置文件和证书,您可以手动将证书和配置文件导入 match 存储库。为此,您需要 .mobileprovision
、.p12
和 .cer
文件,这些文件用于构建您的应用程序。
如果您没有有效的
.p12
和.mobileprovision
,您可以使用 NativeScript Sidekick 和 Apple Developer Portal 生成一个。1) 首先您需要生成证书,请按照 本文档 中的步骤操作。2) 之后您需要生成一个移动配置文件 - 只需按照 Apple 指南 操作。
1) 获取与您的 .p12
文件匹配的 .cer
文件
为了使用与现有 NativeScript Cloud 构建相同的证书和配置文件对进行 CircleCI 构建,您还需要 .cer
文件。您可以按照以下步骤获取它
.cer
文件。如果您不确定 Apple Developer Portal 中哪个证书与您的本地 .p12 文件匹配,您可以使用以下命令获取友好名称
openssl pkcs12 -info -in <path to your .p12 certificate>
该命令将提示您输入密码,如果您的证书未受密码保护,您可以直接按 Enter 键。
示例输出为
openssl pkcs12 -info -in ios_development.p12
Enter Import Password:
MAC: sha1, Iteration 1
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
friendlyName: iPhone Developer: John Doe (F34A23801A)
localKeyID: ...
subject=UID = KHMY4SS8C9, CN = iPhone Developer: John Doe (F34A23801A), OU = A49FBB0MS7, O = Company Name, C = US
issuer=C = US, O = Apple Inc., OU = Apple Worldwide Developer Relations, CN = Apple Worldwide Developer Relations Certification Authority
-----BEGIN CERTIFICATE-----
...
请注意输出中的 friendlyName
- 第一个部分 iPhone Developer
显示证书的类型,在本例中为 iOS 开发,第二个部分是证书名称(在本例中为 John Doe
)。
在 Apple Developer Portal 中,您可以搜索名为 John Doe
、类型为 iOS Development
的证书。如果有多个证书匹配上述条件,您可以尝试通过获取过期日期来确定哪个证书是您的。为此,只需执行以下命令
openssl pkcs12 -in <path to your .p12 certificate> -nodes | openssl x509 -noout -enddate
这将打印您本地证书的过期日期,以便您可以在 Apple Developer Portal 中查看它。
拥有所有 .cer
、.p12
和 .mobileprovision
文件后,您可以继续执行下一步。
2) 从 .p12
文件中删除密码。
如果您的 .p12
私钥受密码保护,fastlane match
将无法工作,因此您需要删除它。为此,请执行以下操作
.p12
文件的路径、用于保护它的密码和输出文件(将不含密码)来运行它RemoveP12Password /Users/vladimirov/my-certificate.p12 123456 /Users/vladimirov/my-certificate-no-pass.p12
3) 将无密码的证书、.cer
和 .mobileprovision
导入您的 match 存储库
fastlane match import
...该命令将询问您 .cer
、.p12
和 .mobileprovision
文件
请注意:
fastlane match import
对移动配置文件中设置的通配符应用程序标识符并不十分有效,因此您必须为导入的每个移动配置文件使用特定的应用程序 ID。fastlane match import
命令在 Windows 上存在一个问题,它要求在安装 fastlane 的驱动器的根目录中有一个tmp
目录。请创建一个,例如C:\tmp
。在 Windows 上使用fastlane match import
并且有提示时,请确保将文件拖放到终端中,因为输入可能会被空格或引号符号破坏。
为了迁移应用程序,您必须在应用程序中设置 nativescript-remote-builds
插件。以下是在应用程序中需要执行的基本步骤,更详细的描述和所有支持的方案可以在 插件的 README.md 中找到
1) 在 Circle CI 中创建您的帐户,或使用您的现有帐户登录。
2) 为您的 Circle CI 帐户 生成一个个人访问令牌,并复制其值。
3) 在您的应用程序中安装 nativescript-remote-builds
插件:npm install --save nativescript-remote-builds
4) 在应用程序的根目录中创建 .nsremote.config.json
文件。
5) 在 .nsremote.config.json
中添加 sshRepositoryUrl
属性 - 该存储库与您的应用程序相关联,并且已在 CircleCI 中启用构建
{
"circleci": {
"sshRepositoryURL": "{{an SSH GitHub repository url}}"
}
}
6) 确保您在本地机器上有一个有效的无密码 ssh 密钥,并且与您的 GitHub 帐户相关联。您可以按照 这里的步骤 操作
7) 将您的 ssh 密钥添加到 Circle CI 帐户,如以下图像所示。
注意:在 Circle CI 中设置 ssh 密钥时,您必须填写主机名,确保它为 github.com
8) 在应用程序的根目录中创建 .nsremote.env.json
文件。
9) 在 .nsremote.env.json
配置文件中添加 Circle CI 访问令牌值
{
"local": {
"CIRCLE_CI_API_ACCESS_TOKEN": "{{your Circle CI access token generated in step 2}}"
}
}
10) (iOS 构建需要)将 IOS_SIGNING_REPO_URL
、IOS_APPLE_ID
和 MATCH_PASSWORD
添加到 .nsremote.env.json
文件中
{
"local": {
"CIRCLE_CI_API_ACCESS_TOKEN": "{{your Circle CI access token generated in step 2}}"
},
"remote": {
"IOS_SIGNING_REPO_URL": "{{ssh url to the repository containing your certificates (the fastlane match repository)}}",
"IOS_APPLE_ID": "{{the email with which you login in the Apple developer portal}}",
"MATCH_PASSWORD": "{{the password for your fastlane match repository}}"
}
}
11) 使用以下命令在云中使用 Circle CI 进行构建
tns build ios|android
如果您已连接设备,甚至可以直接运行它
tns run
或者甚至在特定设备/模拟器上调试
tns debug ios|android
每当 NativeScript CLI 需要构建应用程序时,它将在 Circle CI 中进行构建。在构建过程中,您会看到 CLI 的消息
A cloud build has started. Open <url> for more details.
您可以在 Circle CI 中查看 URL,以获取执行的详细信息。
NativeScript 云构建的新解决方案更加灵活和强大。我们鼓励您尝试它并充分利用它!