发布构建

重要

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:

生成应用程序二进制包

首先,必须将应用程序打包到二进制文件中才能发布。 可以手动创建此文件。

以下部分介绍如何为 App Center 支持的所有应用程序类型创建文件以便分发。

注释

如果要上传存档(.zip、.ipa 等),则应用的总未压缩大小必须小于 4GB。

安卓

对于 Android,必须生成已签名的应用捆绑包或 APK 文件。 有关此过程的完整详细信息,请参阅 有关准备应用发布的官方 Google 文档

  1. 确保已 更新清单 ,并已正确 配置 Gradle 生成
  2. 在 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 文档

  1. 为预配配置文件中的所有硬件设备注册 UDID
  2. 在 Xcode 中,转到 产品>存档 以存档您的应用。
  3. 使用正确的预配配置文件导出存档。

macOS

对于 macOS,必须生成应用包。 App Center 支持发布类型为 .app.zip、.pkg或.dmg的应用包。 有关此过程的完整详细信息,请参阅 官方 Apple macOS 文档

  1. 在 Apple 开发人员帐户中注册单个设备注册多个设备
  2. 在 Xcode 中,转到 产品>存档 以存档您的应用。
  3. 使用正确的预配配置文件导出存档。

Windows操作系统

App Center 支持发布类型 .appx、、 .appxbundle.appxupload.msi.msix、、 .msixbundle.msixupload.zipWindows 应用包。 有关如何以 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 releaseApp Center CLI 中的命令分发发布。 以下示例命令将一个调用~/releases/my_app-23.ipa的文件分发给由其Beta testers拥有的应用My-AppDavid

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 调用上传新版本:

  1. 创建新版本上传:要调用的终结点为 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}"
         }
    
  2. 复制上一步骤中响应中的参数,因为其中大多数参数都用于下一步,包括 package_asset_idupload_domainurl_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"
     }
    
  3. 在使用无法自定义的chunk_size值时,您可以将应用上传拆分为顺序区块,以便上传到Distribute。 例如,可以使用如下所示的 split 实用工具:

    split -b $CHUNK_SIZE $RELEASE_FILE_LOCATION temp/split
    

    此命令在命名tempsplitaasplitab目录中生成顺序文件,等等。 每个文件都被拆分在 chunk_size 限制内。

  4. 接下来,需要使用相应的块上传拆分应用包的每个区块:

    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
    
  5. 上传完成后,将上传资源的状态更新为 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
    
  6. 上传后,在上传标记为完成之前存在短暂的延迟。 轮询此状态以获取 $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
    
  7. 最后,发布生成。 要调用的终结点是 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 门户中的版本。 三个终结点是:

组的示例:

    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 码下找到链接。

可以在公共组的“发布”选项卡上找到面向公众发布的具体版本链接。 公共深层链接