다음을 통해 공유


빌드 릴리스

중요

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를 사용할 수도 있습니다.

애플리케이션 이진 패키지 생성

먼저 릴리스를 위해 애플리케이션을 이진 파일로 패키지해야 합니다. 이 파일을 수동으로 만들거나 App Center Build를 사용할 수 있습니다. 분기의 빌드 구성에서 자동으로 배포되도록 빌드를 구성할 수 있습니다.

다음 섹션에서는 배포를 위해 App Center에서 지원하는 모든 앱 유형에 대한 파일을 만드는 방법을 설명합니다.

참고

보관 파일(.zip, .ipa 등)을 업로드하려는 경우 앱의 압축되지 않은 총 크기는 4GB 미만이어야 합니다.

Android

Android의 경우 서명된 앱 번들 또는 APK 파일을 생성해야 합니다. 이 프로세스에 대한 자세한 내용은 릴리스를 위한 앱 준비에 대한 공식 Google 설명서를 참조하세요.

  1. 매니페스트를 업데이트하고 올바르게 구성된 Gradle 빌드가 있는지 확인합니다.
  2. 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 설명서를 참조하세요.

  1. 프로비저닝 프로필의 모든 하드웨어 디바이스에 대한 UDID를 등록합니다.
  2. Xcode에서 제품>보관으로 이동하여 앱을 보관합니다.
  3. 적절한 프로비저닝 프로필을 사용하여 보관 파일을 내보냅니다.

macOS

macOS의 경우 앱 패키지를 생성해야 합니다. App Center는 .app.zip, .pkg 또는 .dmg 형식의 앱 패키지 릴리스를 지원합니다. 이 프로세스에 대한 자세한 내용은 공식 Apple macOS 설명서를 참조하세요.

  1. 단일 디바이스를 등록 하거나 Apple 개발자 계정에 여러 디바이스를 등록 합니다.
  2. Xcode에서 제품>보관으로 이동하여 앱을 보관합니다.
  3. 적절한 프로비저닝 프로필을 사용하여 보관 파일을 내보냅니다.

Windows

App Center는 , , , , , .msix.msi.msixupload.msixbundle.appxupload, .appxbundle또는 .zip형식.appx의 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 이상이 필요합니다.

App Center CLIappcenter distribute release 명령을 사용하여 릴리스를 배포합니다. 다음 예제 명령은 가 소유한 DavidMy-App 그룹에 Beta testers 라는 ~/releases/my_app-23.ipa 파일을 배포합니다.

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. , & url_encoded_token를 포함하여 다음 단계에서 대부분의 매개 변수가 사용되기 때문에 이전 단계의 응답에서 매개 변수를 package_asset_idupload_domain 복사합니다.

    앱 패키지의 크기를 바이트 단위로 결정합니다. 와 같은 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 사용자 지정할 수 없는 값을 사용하여 앱 업로드를 순차적 청크로 분할하여 배포에 업로드할 수 있습니다. 예를 들어 다음과 같이 유틸리티를 split 사용할 수 있습니다.

    split -b $CHUNK_SIZE $RELEASE_FILE_LOCATION temp/split
    

    이 명령은 , splitab등이라는 splitaa디렉터리에 순차적 파일을 temp 생성합니다. 각 파일은 한도 내에서 분할됩니다 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를 찾을 수 있습니다.

패치 /v0.1/apps/{owner_name}/{app_name}/releases/{release_id} 시나리오를 위해 여러 대상에 배포하는 요청은 여기에서 참조됩니다.

빌드 Re-Release

빌드를 다른 배포 그룹으로 릴리스하려면 App Center의 모든 위치에서 릴리스 배포 > 로 이동한 다음 다시 배포할 릴리스를 선택합니다. 릴리스 세부 정보 페이지가 열립니다. 화면의 오른쪽 위 모서리에 있는 배포 단추를 선택하고 대상을 선택하여 다시 릴리스 프로세스를 시작합니다. 마법사의 단계를 수행하고 마지막으로 배포 를 선택하여 릴리스를 그룹/테스터 또는 저장소에 보냅니다.

필수 업데이트

모든 사용자가 동일한 버전의 앱을 강제로 실행하도록 릴리스를 필수로 만듭니다. 이렇게 하면 App Center에서 선택한 업데이트를 모든 테스터 디바이스에 설치합니다.

앱에서 App Center 배포 SDK를 사용하는 경우에만 릴리스를 필수로 만들 수 있습니다. 릴리스 배포 검토 단계에서 필수 업데이트 확인란을 선택하여 릴리스를 필수로 만들거나 API를 사용할 수 있습니다.

[앱] >> 그룹 >배포 릴리스를 열어 App Center에서 필수 릴리스를 볼 수 있습니다. 필수 릴리스는 빨간색 점으로 표시됩니다.

성공적으로 릴리스되면 테스터는 전자 메일, App Center에 로그인 또는 직접 링크를 통해 릴리스에 액세스할 수 있습니다.

프라이빗 대상에 대한 릴리스 페이지에서 특정 릴리스에 대한 링크를 찾을 수 있습니다. 설치 단추

참고

AAB(Android 애플리케이션 번들)는 다운로드 단추를 클릭하여 릴리스 페이지에서 다운로드할 수 있습니다. 설치 가능한 APK 파일 형식이 필요한 경우 디바이스에서 설치 포털(https://install.appcenter.ms)을 사용하세요. 생성된 QR 코드 아래에서 다운로드 단추 옆에 있는 링크를 찾을 수 있습니다.

공용 그룹의 릴리스 탭에서 퍼블릭 대상에 대한 특정 릴리스에 대한 링크를 찾을 수 있습니다. 공용 딥 링크