分享方式:


建置、測試及部署 Xcode 應用程式

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

本快速入門說明如何在 Azure Pipelines 中使用 YAML 管線建置和部署 Xcode 專案。

必要條件

  • 您有權建立管線和部署應用程式的 Azure DevOps 組織和專案。
  • GitHub 存放庫中的 Xcode 9+ 專案和應用程式。 如需詳細資訊,請參閱 建立應用程式的 Xcode 專案。

建立管線

重要

在 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 Pipelines 中Microsoft裝載的 macOS 代理程式 上,因此您不需要設定任何基礎結構。 如需預安裝之 Xcode 的確切版本,請參閱 Microsoft裝載的代理程序軟體

poolazure-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 應用程式,才能在裝置上執行或發佈至 App Store。 簽署和布建程式必須存取您的 P12 簽署憑證和一或多個布建配置檔。 如需詳細資訊,請參閱 簽署行動應用程式

若要在建置期間將憑證和配置檔提供給 Xcode,請將 [安裝 Apple 憑證] 和 [安裝 Apple 布建配置檔] 工作新增至管線。

使用 Carthage 環境變數

如果您的專案使用 Carthage 搭配私人 Carthage 存放庫,您可以使用名為 GITHUB_ACCESS_TOKEN 的環境變數來設定驗證,其值為可存取存放庫的令牌。 Carthage 會自動偵測並使用這個環境變數。

請勿將秘密令牌直接新增至管線 YAML。 相反地,選取管線頁面上的 [變數] 以開啟 [變數] 窗格,併為此令牌建立變數。 請務必啟用鎖定圖示來加密變數的值。 如需詳細資訊,請參閱 設定秘密變數

下列管線程式代碼會針對環境變數的值使用名為 myGitHubAccessTokenGITHUB_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 測試工作。 如需詳細資訊,請參閱 使用 Azure DevOps 進行 UI 測試

- 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

若要將應用程式散發給一組測試人員或 Beta 使用者,或將應用程式升階至 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 Beta 應用程式或生產應用程式的更新發行自動化,請新增 App Store 發行 工作。

搭配 Apple 雙因素驗證使用此工作有一個限制。 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