发布生成
重要
Visual Studio App Center 计划于 2025 年 3 月 31 日停用。 虽然可以继续使用 Visual Studio App Center,直到它完全停用,但你可以考虑迁移到几个建议的替代方法。
将应用程序二进制包上传到 App Center 进行分发。 App Center 支持 Android、iOS、macOS、Windows 和自定义操作系统应用的包分发。 可以将发布分发给单个测试人员或测试人员组。 对于 iOS 和 Android 应用程序,还可以发布到 Google Play、App Store 和 Intune 等应用商店。 请参阅 发布到消费者和企业应用商店。
在此页上,可以了解如何生成用于发布的二进制文件,以及如何使用门户、命令行接口 (CLI) 以及应用程序编程接口 (API) 将其上传到组。
还可以使用 Azure DevOps 或 Jenkins:
- Azure DevOps 使用 App Center 分发任务 (版本 3+)
- Jenkins 插件 (版本 0.11.0+) 。
生成应用程序二进制包
首先,必须将应用程序打包到二进制文件中以供发布。 可以手动创建此文件,也可以使用 App Center Build。 可以将生成配置为在分支的生成配置中自动分发。
以下部分介绍了如何为 App Center 支持的所有应用类型创建分发文件。
注意
如果要上传 (.zip、.ipa 和其他) 存档,则应用的总未压缩大小必须小于 4GB。
Android
对于 Android,必须生成已签名的应用捆绑包或 APK 文件。 有关此过程的完整详细信息,请参阅 有关准备发布应用的官方 Google 文档。
- 确保已 更新清单 并具有正确 配置的 Gradle 内部版本。
- 在 Android Studio 中,选择 “生成>生成签名捆绑包/APK ”,然后按照向导中的步骤生成应用捆绑包或 APK。
Android Studio 将生成的应用捆绑包放在 project-name/module-name/build/outputs/bundle/ 中,将 APK 放在 project-name/module-name/build/outputs/apk/中。
注意
(AAB) 分发 Android 应用程序捆绑包时,App Center 会生成通用 APK,使用生成的签名密钥对其进行签名,并将其分发到设备。
iOS
对于 iOS,必须为应用程序生成 IPA 包。 有关此过程的完整详细信息,请参阅 官方 Apple 文档。
- 在预配配置文件中为所有硬件设备注册 UDID。
- 在 Xcode 中,转到 “产品>存档” 以存档应用。
- 使用适当的预配配置文件导出存档。
macOS
对于 macOS,必须生成应用包。 App Center 支持发布 .app.zip、.pkg 或 .dmg 类型的应用包。 有关此过程的完整详细信息,请参阅 官方 Apple macOS 文档。
Windows
App Center 支持发布类型.appx
为 、、.appxbundle
、、.msi
.msix
.appxupload
、.msixbundle
、 .msixupload
或 .zip
的 Windows 应用包。 有关如何以 AppX 或 MSIX 格式打包应用的完整详细信息,请参阅 官方 Microsoft UWP 文档。
自定义操作系统
使用 .zip 格式的自定义操作系统存档应用版本。
分发包
注意
包含要下载的文件的所有 install.appcenter.ms URL 均可公开访问。
若要使用 App Center 分发包,请转到 App Center,转到应用,然后转到 “分发>组 ”并选择“ 新版本”。 完成向导中的步骤。
在第一步中,选择 “发布 ”区域以浏览要上传的文件,或将文件拖放到该区域。 根据应用的操作系统和文件扩展名,App Center 可能会要求你输入版本的版本和内部版本号。 输入信息,然后选择“ 下一步”。
你可以以纯文本或 Markdown 格式将发行说明包含在发布过程中。 选择“下一步”。
可以将发布面向多个 通讯组 或测试人员。 App Center 使此版本可供这些测试人员和属于所选组的用户使用。 选择“下一步”。
发布 iOS 应用时,可以 自动预配测试人员的设备。 选择“下一步”。
查看发布。 如果应用使用 分发 SDK,则可以将 App Center 配置为强制发布。 当 App Center 分发发布时,它会向目标中设置的所有测试人员发送新版本的电子邮件通知。 可以在“审阅”选项卡中选择不通知测试人员。最后,选择“ 分发 ”,将文件发布到测试人员。
使用 App Center 命令行接口进行分发
警告
需要使用 App Center CLI 2.7 或更高版本才能使用此功能。
使用 appcenter distribute release
App Center CLI 中的 命令分发发布。 以下示例命令将名为 ~/releases/my_app-23.ipa
的文件分发到 拥有David
的应用My-App
组Beta testers
。
appcenter distribute release --app David/My-App --file ~/releases/my_app-23.ipa --group "Beta testers"
使用 API 进行分发
可以调用 App Center API 来分发发布。 以下方法旨在描述最小工作方法,许多任务可以进一步自定义或自动化。
可在此处查看示例实现: https://github.com/microsoft/appcenter-Xamarin.UITest-Demo/blob/main/ac-distribute.sh
先决条件
- 要上传和分发的应用包。
- 获取 API 令牌。 API 令牌用于对所有 App Center API 调用进行身份验证。
- 通讯组名称 (可选,如果缺少或无效,上传仍将完成)
{owner_name}
确定要为其分发发布的应用的 和{app_name}
。 这些标识符用于 API 调用的 URL 中。 对于用户拥有的应用,App Center 中的 URL 可能如下所示: https://appcenter.ms/users/Example-User/apps/Example-App。 此处,{owner_name}
为Example-User
,而{app_name}
为Example-App
。 对于组织拥有的应用,URL 可能是 https://appcenter.ms/orgs/Example-Org/apps/Example-App ,{owner_name}
而 将是Example-Org
。
上传新版本
使用以下顺序 API 调用上传新版本:
创建新的发布上传:要调用的终结点为 POST /v0.1/apps/{owner_name}/{app_name}/uploads/releases
OWNER_NAME="Example-Org" APP_NAME="Example-App" API_TOKEN="Example-Token" curl -X POST "https://api.appcenter.ms/v0.1/apps/$OWNER_NAME/$APP_NAME/uploads/releases" -H "accept: application/json" -H "X-API-Token: $API_TOKEN" -H "Content-Type: application/json" -H "Content-Length: 0"
响应将如下所示,并
{VARIABLE_NAME}
替换每个用途的唯一数据:{ "id": "{ID}", "package_asset_id": "{PACKAGE_ASSET_ID}", "upload_domain": "https://file.appcenter.ms", "token": "{TOKEN}", "url_encoded_token": "{URL_ENCODED_TOKEN}" }
从上一步的响应中复制参数,因为下一步将使用其中的大部分参数,包括
package_asset_id
、upload_domain
&url_encoded_token
。确定应用包的大小(以字节为单位)。 建议使用 等
wc -c ExampleApp.ipa
命令来获取准确的字节计数。MIME Type
根据应用为content_type
设置 :- Android .apk 使用供应商类型
application/vnd.android.package-archive
- Android .aab 使用供应商类型
application/x-authorware-bin
- iOS 使用常规类型
application/octet-stream
最后一个命令应如下所示:
FILE_NAME="ExampleApp.apk" FILE_SIZE_BYTES=$(wc -c $RELEASE_FILE_LOCATION | awk '{print $1}') APP_TYPE='application/vnd.android.package-archive' # iOS uses `application/octet-stream` instead. METADATA_URL="https://file.appcenter.ms/upload/set_metadata/$PACKAGE_ASSET_ID?file_name=$FILE_NAME&file_size=$FILE_SIZE_BYTES&token=$URL_ENCODED_TOKEN&content_type=$APP_TYPE" curl -s -d POST -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" "$METADATA_URL"
返回的输出应如下所示:
{ "error":false, "id":"{PACKAGE_ASSET_ID}", "chunk_size":4194304, "resume_restart":false, "chunk_list":[1,2,3,4,5], "blob_partitions":1, "status_code":"Success" }
- Android .apk 使用供应商类型
chunk_size
使用无法自定义的值,可以将应用上传拆分为连续区块,以便上传到分发。 例如,可以使用如下所示的split
实用工具:split -b $CHUNK_SIZE $RELEASE_FILE_LOCATION temp/split
此命令在名为
splitaa
、splitab
等的temp
目录中生成顺序文件。 每个文件在限制内chunk_size
被拆分。接下来,需要使用相应的块上传拆分应用包的每个区块:
BLOCK_NUMBER=0 for i in temp/* do BLOCK_NUMBER=$(($BLOCK_NUMBER + 1)) CONTENT_LENGTH=$(wc -c "$i" | awk '{print $1}') UPLOAD_CHUNK_URL="https://file.appcenter.ms/upload/upload_chunk/$PACKAGE_ASSET_ID?token=$URL_ENCODED_TOKEN&block_number=$BLOCK_NUMBER" curl -X POST $UPLOAD_CHUNK_URL --data-binary "@$i" -H "Content-Length: $CONTENT_LENGTH" -H "Content-Type: $CONTENT_TYPE" done
上传完成后,将上传资源的状态更新为
uploadFinished
。FINISHED_URL="https://file.appcenter.ms/upload/finished/$PACKAGE_ASSET_ID?token=$URL_ENCODED_TOKEN" curl -d POST -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" "$FINISHED_URL" COMMIT_URL="https://api.appcenter.ms/v0.1/apps/$OWNER_NAME/$APP_NAME/uploads/releases/$ID" curl -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" \ --data '{"upload_status": "uploadFinished","id": "$ID"}' \ -X PATCH \ $COMMIT_URL
上传后,在上传标记为已完成之前会有一段短暂的延迟。 轮询此状态以获取
$RELEASE_ID
下一步的 :RELEASE_STATUS_URL="https://api.appcenter.ms/v0.1/apps/$OWNER_NAME/$APP_NAME/uploads/releases/$UPLOAD_ID" POLL_RESULT=$(curl -s -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" $RELEASE_STATUS_URL) RELEASE_ID=$(echo $POLL_RESULT | jq -r '.release_distinct_id') if [[ $RELEASE_ID == null ]]; then echo "Failed to find release from appcenter" exit 1 fi
最后,释放生成。 要调用的终结点是 PATCH /v0.1/apps/{owner_name}/{app_name}/releases/{release_id}
DISTRIBUTE_URL="https://api.appcenter.ms/v0.1/apps/$OWNER_NAME/$APP_NAME/releases/$RELEASE_ID" curl -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" \ --data '{"destinations": [{ "name": "'"$DISTRIBUTION_GROUP"'"}] }' \ -X PATCH \ $DISTRIBUTE_URL
分发发布
将上传的版本分发给测试人员、组或商店,以查看 App Center 门户中的版本。 这三个终结点是:
- POST /v0.1/apps/{owner_name}/{app_name}/releases/{release_id}/testers
- POST /v0.1/apps/{owner_name}/{app_name}/releases/{release_id}/groups
- POST /v0.1/apps/{owner_name}/{app_name}/releases/{release_id}/stores
组的示例:
curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" -H "X-API-Token: $API_TOKEN" -d "{ \"id\": "$DISTRIBUTION_GROUP_ID", \"mandatory_update\": false, \"notify_testers\": false}"
可以在该组的设置页上找到通讯组 ID。
对于更复杂的方案,此处引用了分发到多个目标的请求: PATCH /v0.1/apps/{owner_name}/{app_name}/releases/{release_id}
Re-Release 生成
若要将内部版本发布到另一个通讯组,请在 App Center 中的任意位置转到 “分发 > 版本 ”,然后选择要再次分发的版本。 此时会打开发布详细信息页。 选择屏幕右上角的“ 分发 ”按钮,然后选择目标以启动重新发布过程。 按照向导中的步骤操作,最后选择“ 分发 ”,将发布发送给组/测试人员或应用商店。
强制汇报
强制发布以强制所有用户运行同一版本的应用。 执行此操作时,App Center 将在所有测试人员设备上安装所选更新。
仅当应用使用 App Center 分发 SDK 时,才能强制发布。 通过在分发版本的评审阶段选中 “强制更新 ”复选框,使发布成为强制发布,或者可以使用 API。
可以通过打开 [你的应用] > 分发>组>版本,在 App Center 中查看强制发布。 强制版本由红点指示。
指向版本的链接
成功发布后,测试人员可以通过电子邮件、登录 App Center 或直接链接访问发布。
可以在专用目标的发布页上找到指向特定版本的链接。
注意
可通过单击下载按钮在发布页上下载 android 应用程序捆绑包 (AAB) 。 如果需要可安装的 APK 文件格式,请使用设备上的安装门户 (https://install.appcenter.ms) 。 可以在“下载”按钮旁边的生成的 QR 码下方找到该链接。
可以在公共组中的“发布”选项卡上找到指向公共目标的特定版本的链接。