다음을 통해 공유


Xcode 앱 빌드, 테스트 및 배포

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

이 빠른 시작에서는 Azure Pipelines에서 YAML 파이프라인을 사용하여 Xcode 프로젝트를 빌드하고 배포하는 방법을 보여 줍니다.

필수 조건

  • 파이프라인을 만들고 앱을 배포할 수 있는 권한이 있는 Azure DevOps 조직 및 프로젝트입니다.
  • GitHub 리포지토리의 Xcode 9+ 프로젝트 및 앱입니다. 자세한 내용은 앱에 대한 Xcode 프로젝트 만들기를 참조 하세요.

파이프라인 만들기

Important

GitHub 프로시저 중에 GitHub 서비스 연결을 만들거나 GitHub로 리디렉션되어 로그인, Azure Pipelines 설치 또는 Azure Pipelines 권한을 부여하라는 메시지가 표시될 수 있습니다. 화면의 지침에 따라 프로세스를 완료합니다. 자세한 내용은 GitHub 리포지토리에 대한 액세스를 참조 하세요.

  1. Azure DevOps 프로젝트에서 파이프라인 새 파이프라인을>선택하거나, 이 파이프라인이 프로젝트의 첫 번째 파이프라인인 경우 파이프라인 만들기를 선택합니다.
  2. 소스 코드의 위치로 GitHub를 선택합니다.
  3. 리포지토리 선택 화면에서 Xcode 프로젝트의 리포지토리를 선택합니다.
  4. 파이프라인 구성 화면에서 Xcode를 선택합니다.

Azure Pipelines는 Xcode 템플릿을 기반으로 하는 시작 파이프라인을 제공합니다. azure-pipelines.yml 코드를 검토합니다.

빌드 환경

Xcode는 Azure PipelinesMicrosoft 호스팅 macOS 에이전트에 미리 설치되므로 인프라를 설정할 필요가 없습니다. 사전 설치된 정확한 Xcode 버전은 Microsoft 호스팅 에이전트 소프트웨어를 참조하세요.

pool azure-pipelines.yml 파일의 맨 위에 있는 노드가 적절한 에이전트 풀을 선택합니다.

pool:
  vmImage: 'macOS-latest'

Xcode 빌드 작업

Xcode 작업은 macOS에서 Xcode 작업 영역을 빌드, 테스트 또는 보관하며 필요에 따라 앱을 패키지할 수 있습니다. 시작 azure-pipelines.yml 파일의 Xcode 단계는 기본 구성표, 시뮬레이터 및 패키징 없이 iOS 프로젝트를 빌드합니다. 값을 변경하고 프로젝트 구성과 일치하도록 매개 변수를 추가할 수 있습니다.

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

파이프라인 저장 및 실행

azure-pipelines.yml 코드 검토를 마치면 저장을 선택하고 실행합니다.

새 YAML 파이프라인의 저장 및 실행 단추 스크린샷

필요에 따라 커밋 메시지를 편집하고 설명을 제공합니다. 그런 다음 저장을 선택하고 다시 실행하여 azure-pipelines.yml 파일을 리포지토리에 커밋하고 빌드를 시작합니다.

빌드 실행 페이지에는 빌드 세부 정보 및 진행률이 표시됩니다. 파이프라인의 작동을 확인하려면 페이지 아래쪽에서 작업을 선택합니다.

이제 사용자 지정할 준비가 된 리포지토리에 작동하는 YAML 파이프라인 (azure-pipelines.yml)이 있습니다.

파이프라인 사용자 지정

파이프라인을 변경하려면 파이프라인 페이지에서 편집을 선택합니다. 다음 섹션에서는 Xcode 파이프라인을 사용자 지정하는 몇 가지 일반적인 방법을 설명합니다.

서명 및 프로비저닝 작업 추가

디바이스에서 실행하거나 앱 스토어에 게시할 수 있도록 Xcode 앱에 서명하고 프로비전해야 합니다. 서명 및 프로비저닝 프로세스는 P12 서명 인증서 및 하나 이상의 프로비저닝 프로필에 액세스해야 합니다. 자세한 내용은 모바일 앱 서명을 참조하세요.

빌드하는 동안 Xcode에서 인증서 및 프로필을 사용할 수 있도록 하려면 Apple 인증서 설치 및 Apple 프로비저닝 프로필 설치 작업을 파이프라인에 추가합니다.

Carthage 환경 변수 사용

프로젝트에서 개인 Carthage 리포지토리와 함께 Carthage를 사용하는 경우 리포지토리에 액세스할 수 있는 토큰 값으로 명명된 GITHUB_ACCESS_TOKEN 환경 변수를 사용하여 인증을 설정할 수 있습니다. Carthage는 이 환경 변수를 자동으로 감지하고 사용합니다.

비밀 토큰을 파이프라인 YAML에 직접 추가하지 마세요. 대신 파이프라인 페이지에서 변수를 선택하여 변수 창을 열고 이 토큰에 대한 변수를 만듭니다. 잠금 아이콘을 사용하도록 설정하여 변수 값을 암호화해야 합니다. 자세한 내용은 비밀 변수 설정을 참조 하세요.

다음 파이프라인 코드는 환경 변수의 값에 명명된 myGitHubAccessToken 비밀 변수를 GITHUB_ACCESS_TOKEN 사용합니다.

- script: carthage update --platform iOS
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Azure 호스팅 디바이스에서 테스트

Visual Studio App Center의 호스트된 iOS 디바이스 랩에서 앱을 테스트하려면 파이프라인에 App Center 테스트 작업을 추가합니다.

이 작업을 수행하려면 App Center 평가판 계정이 필요하며, 테스트 랩을 계속 사용하려면 30일 후에 유료로 변환해야 합니다. 이 작업을 사용하기 전에 App Center 계정에 등록합니다.

다음 예제에서는 App Center 테스트 도구 모음을 실행합니다. 태스크는 설정해야 하는 서비스 연결을 사용합니다.

전체 작업 구문 및 참조는 App Center 테스트 작업을 참조 하세요. 자세한 내용은 UI 테스트에 Azure DevOps 사용을 참조하세요.

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

빌드 레코드를 사용하여 아티팩트 유지

iOS AppStore 패키지(IPA) 파일을 빌드 레코드 또는 테스트와 함께 저장하고 후속 파이프라인에 배포하려면 파일 복사 및 빌드 아티팩트 게시 작업을 파이프라인에 추가합니다. 자세한 내용은 파이프라인 아티팩트 게시 및 다운로드를 참조 하세요.

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

App Center에 배포

테스터 또는 베타 사용자 그룹에 앱을 배포하거나 앱을 Intune 또는 Apple App Store로 승격하려면 App Center 배포 작업을 추가합니다. 이 작업에는 무료로 유지되는 무료 App Center 계정이 필요합니다.

다음 예제에서는 사용자에게 앱을 배포합니다. 전체 작업 구문 및 참조는 App Center 배포를 참조 하세요. 자세한 내용은 App Center를 사용하여 Azure DevOps 빌드 배포를 참조 하세요.

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the IPA file you want to publish
    symbolsOption: 'Apple'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

Apple App Store 확장 설치 및 Apple App Store에 배포

Apple App Store와의 상호 작용을 자동화하려면 Apple App Store 확장을 설치한 다음 파이프라인에서 다음 작업을 사용합니다. 기본적으로 이러한 작업은 구성해야 하는 서비스 연결을 사용하여 Apple에 인증됩니다.

App Store에서 기존 iOS TestFlight 베타 앱 또는 프로덕션 앱에 대한 업데이트 릴리스를 자동화하려면 App Store 릴리스 작업을 추가합니다.

Apple 2단계 인증에서 이 작업을 사용하는 데는 제한 사항이 있습니다. Apple 인증은 지역별 인증이며 fastlane 세션 토큰은 빠르게 만료되며 다시 만들고 다시 구성해야 합니다.

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection' 
    appIdentifier: com.yourorganization.testapplication.etc
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    shouldSkipSubmission: true

iTunes Connect에서 App Store로 이전에 제출된 앱의 승격을 자동화하려면 App Store 승격 작업을 추가합니다.

- task: AppStorePromote@1
  displayName: 'Submit to the App Store for review'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection'
    appIdentifier: com.yourorganization.testapplication.etc
    shouldAutoRelease: false