重要
Visual Studio App Center 于 2025 年 3 月 31 日停用,但分析和诊断功能除外,这些功能将继续受支持,直到 2026 年 6 月 30 日。 了解详细信息。
将应用程序二进制包上传到 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 支持的所有应用程序类型创建文件以便分发。
注释
如果要上传存档(.zip、.ipa 等),则应用的总未压缩大小必须小于 4GB。
安卓
对于 Android,必须生成已签名的应用捆绑包或 APK 文件。 有关此过程的完整详细信息,请参阅 有关准备应用发布的官方 Google 文档。
- 确保已 更新清单 ,并已正确 配置 Gradle 生成。
- 在 Android Studio 中,选择 “生成>生成的已签名捆绑包/APK ”,并按照向导中的步骤生成应用捆绑包或 APK。
Android Studio 在 project-name/module-name/build/outputs/bundle/ 目录下放置生成的应用捆绑包,在 project-name/module-name/build/outputs/apk/ 目录下放置生成的 APK。
注释
分发 Android 应用程序捆绑包(AAB)时,App Center 会生成通用 APK,使用生成的签名密钥对其进行签名,并将其分发到设备。
iOS
对于 iOS,必须为应用程序生成 IPA 包。 有关此过程的完整详细信息,请参阅 官方 Apple 文档。
- 为预配配置文件中的所有硬件设备注册 UDID。
- 在 Xcode 中,转到 产品>存档 以存档您的应用。
- 使用正确的预配配置文件导出存档。
macOS
对于 macOS,必须生成应用包。 App Center 支持发布类型为 .app.zip、.pkg或.dmg的应用包。 有关此过程的完整详细信息,请参阅 官方 Apple macOS 文档。
Windows操作系统
App Center 支持发布类型 .appx
、、 .appxbundle
、 .appxupload
、 .msi
、 .msix
、、 .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
的文件分发给由其Beta testers
拥有的应用My-App
组David
。
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
值时,您可以将应用上传拆分为顺序区块,以便上传到Distribute。 例如,可以使用如下所示的split
实用工具:split -b $CHUNK_SIZE $RELEASE_FILE_LOCATION temp/split
此命令在命名
temp
splitaa
的splitab
目录中生成顺序文件,等等。 每个文件都被拆分在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 Distribute SDK 时,才能强制发布。 在分发发布版本的评审阶段选中 “必需更新” 复选框以强制更新,或者可以使用 API。
可以通过打开 [你的应用] > 分发 > 组 > 版本,在 App Center 中查看强制版本。 强制发布由红点标识。
指向发布的链接
成功发布后,测试人员可以通过电子邮件访问发布、登录到 App Center 或通过直接链接访问发布。
可以在私密目的地的发布页面上找到指向特定版本的链接。
注释
可通过单击下载按钮在发布页上下载 Android 应用程序捆绑包(AAB)。 如果需要可安装的 APK 文件格式,请使用设备上的安装门户 (https://install.appcenter.ms)。 可以在下载按钮旁的生成的 QR 码下找到链接。
可以在公共组的“发布”选项卡上找到面向公众发布的具体版本链接。