本文将指导您如何发布已经发布到 iOS App Store 和 Google Play 的 NativeScript 应用的新版本。我将使用我最近更新的一个小型应用,Pokémon Types,作为具体示例来演示这些步骤。
与移动设备的大多数操作一样,iOS 和 Android 在处理更新方面拥有相似但略有不同的流程,因此我们将分别针对各个平台进行处理,首先是 Android。
注意:由于本文是关于升级现有应用,因此我假设您已经熟悉如何将 NativeScript 应用部署到应用商店。如果您需要此过程的帮助,请参考我们关于发布应用的文章。
升级应用的第一步,无论是 iOS 还是 Android,都是更新版本号。在 Android 上,这些版本号位于您的app/App_Resources/Android/AndroidManifest.xml
文件中,因此请立即打开该文件。
在文件顶部,您会注意到两个配置变量:android:versionCode
和android:versionName
。Android 的versionCode
是一个整数值,每次将新版本上传到 Google Play 时都必须递增。您可以根据需要任意增加此数字,但最常见的做法是将数字递增 1。
versionName
是用户在 Google Play 中看到的版本号。Android 关于版本控制的文档对该值描述如下。
“该值为字符串,以便您可以将应用版本描述为
<major>.<minor>.<point>
字符串,或作为任何其他类型的绝对或相对版本标识符。versionName
除了显示给用户外没有其他用途。”
因此,基本上您可以使用任何字符串,但大多数开发人员使用与您为其他任何软件版本使用的相同的<major>.<minor>.<point>
语法。以下是我如何更改AndroidManifest.xml
文件以准备 Pokémon Types 应用升级。
版本更改到位后,下一步是构建应用的新 APK,以便部署到用户。您可以参考我们关于创建 Android 发布版本的文档,但本质上,您需要运行以下命令,将~path/to/tj-vantoll.jks
、my-very-secure-password
和PokemonTypes
替换为您的值。
tns build android --release
--key-store-path ~/path/to/tj-vantoll.jks
--key-store-password my-very-secure-password
--key-store-alias PokemonTypes
--key-store-alias-password my-very-secure-password
命令完成后,您将在应用的platforms/android/build/outputs/apk
文件夹中找到一个发布版.apk
文件。现在,您已准备好前往 Google Play 开发者控制台上传此新版本。
在play.google.com/apps/publish处打开控制台,并选择您要升级的应用。从那里,点击“管理生产”按钮开始创建新的生产版本的过程。
接下来,点击“创建版本”按钮。
在下一个屏幕上,您需要做几件事。首先,找到“上传 APK”按钮并点击它。您将看到以下屏幕。
使用“浏览文件”按钮上传您刚刚生成的 APK(请记住,它位于您的platforms/android/build/outputs/apk
文件夹中),然后点击“保存草稿”按钮。
最后,向下滚动并找到“版本名称”部分。在这里,为您的应用命名(大多数人为了简单起见只是在这里提供他们的版本名称),然后提供更新说明。对更新说明更加谨慎,因为用户在 Google Play 中升级您的应用时会看到这段文本。以下是我为 Pokémon Types 使用的值。
就是这样!最后,点击“保存”按钮,然后点击屏幕顶部的“提交更新”按钮。如果一切顺利,您的用户将在一天左右的时间内开始看到更新。
Android 已经处理完毕,让我们继续讨论如何在 iOS 上进行相同的升级流程。
与 Android 上一样,您升级 iOS 的第一步是更新应用的版本号。在 iOS 上,这些版本号位于您的应用的app/App_Resources/iOS/Info.plist
文件中,因此请立即打开该文件。
与 Android 一样,iOS 也拥有两个版本号,CFBundleShortVersionString
和CFBundleVersion
。第一个,CFBundleShortVersionString
,是最终用户看到的版本号,因此您可能希望使用与 Android 应用相同的<major>.<minor>.<point>
约定。
CFBundleVersion
值与 Android 的versionCode
非常相似,每次将版本上传到 iTunes Connect 时,都必须递增CFBundleVersion
。在大多数情况下,您可以为CFBundleShortVersionString
和CFBundleVersion
提供相同的值。例如,当我升级 Pokémon Types 时,我正是这样做的。
但是,如果您需要提交使用相同版本号的应用的多个版本(例如,如果您让用户通过 TestFlight 测试您的应用,或者如果 Apple 拒绝您的应用,您必须提交一个新版本),那么您必须在将新版本上传到 iTunes Connect 之前递增CFBundleVersion
。
在这些情况下,最常见的是为CFBundleVersion
使用<major>.<minor>.<point>.<build>
约定。例如,我可以将我的第一个 Pokémon Types 版本 1.1.0 的CFBundleVersion
设为1.1.0.0
,并将后续版本的CFBundleVersion
设为1.1.0.1
、1.1.0.2
等。
将您要使用的版本号到位后,您需要为这个新版本执行您的发布版 iOS 版本构建。您可以参考我们的关于创建 iOS 发布版本的文档以了解详细信息,但本质上,您需要运行以下命令,并进行适当的代码签名更改(如果您不记得,请参考文档了解具体内容)。
tns build ios --release --for-device
--provision abdc-use-you-own-uuid
该命令完成后,您将在platforms/ios/build/device
文件夹中找到所需的.ipa
文件。现在,您已准备好前往 iTunes Connect 上传此新版本。
首先在https://itunesconnect.apple.com/处打开 iTunes Connect,点击“我的应用”,然后选择您要更新的应用。
从那里,找到“+ 版本或平台”链接并点击它。
接下来,为您的应用提供一个版本号,然后点击“创建”按钮。(您在这里提供的版本号应与您之前使用的CFBundleShortVersionString
匹配。)
现在您已创建了新版本,您需要提供另外两条信息。第一是您的更新说明,您在屏幕顶部的最上面输入这些说明。我通常复制粘贴我为 Android 使用的相同说明。
您必须提供的第二件事是更新的.ipa
文件。如果您向下滚动到 iTunes Connect 中,您会发现此新版本的“版本”部分为空。
将版本上传到 iTunes Connect 有几种不同的方法,但 NativeScript 应用的首选方法是使用 NativeScript CLI 的tns publish
命令。
tns publish ios --ipa <path to your ipa file>
提示:请记住,您的 .ipa 文件位于应用的
platforms/ios/build/device
文件夹中。对于 Pokémon Types,我运行的完整命令是tns publish ios --ipa platforms/ios/build/device/pokemontypes.ipa
。
该命令会询问您的 iTunes Connect 电子邮件地址和密码,然后上传您的版本。请注意:Apple 需要几分钟(有时需要几个小时)才能处理您的版本,因此如果您的版本没有立即显示在 iTunes Connect 仪表盘中,请不要惊慌。相反,请刷新收件箱,直到您看到以下邮件,表明您的版本已准备就绪。
此时,请返回 iTunes Connect,选择您的新版本,然后点击屏幕顶部的“提交审核”按钮。
就这样,您已完成所有设置。iOS 应用商店更新仍然需要经过 Apple 的审核流程,因此请查看http://appreviewtimes.com/以了解您需要等待多长时间才能让应用通过审核并最终提供给用户。对于 Pokémon Types,我等待了一天多一点,然后我的设备上出现了以下内容 😄
更新 iOS 和 Android 应用可能很棘手,但它远没有首次将应用上传到应用商店那么困难。在您完成这些步骤几次后,您应该能够在一个小时内完成整个过程。如果您遇到问题,NativeScript 社区论坛 是一个很好的求助场所。