Xcode uygulamaları derleme, test etme ve dağıtma

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

Azure Pipelines ile Xcode projeleri oluşturmayı ve dağıtmayı öğrenin.

Önkoşullar

İşlem hattını oluşturma

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. İşlem Hatları'na gidin ve ardından yeni işlem hattı veya İlk işlem hattınızı oluşturuyorsanız işlem hattı oluştur'u seçin.

  3. İlk olarak kaynak kodunuzun konumu olarak GitHub'ı seçerek sihirbazın adımlarını uygulayın.

  4. Oturum açmak için GitHub'a yönlendirilebilirsiniz. Öyleyse GitHub kimlik bilgilerinizi girin.

  5. Depo listesini gördüğünüzde deponuzu seçin.

  6. Azure Pipelines uygulamasını yüklemek için GitHub'a yönlendirilebilirsiniz. Öyleyse Onayla ve yükle'yi seçin.

Yapılandır sekmesi görüntülendiğinde Xcode'ı seçin.

  1. Yeni işlem hattınız görüntülendiğinde, ne yaptığını görmek için YAML'ye göz atın. Hazır olduğunuzda Kaydet ve çalıştır'ı seçin.

    Yeni bir YAML işlem hattında kaydet ve çalıştır düğmesi

  2. Deponuza yeni bir azure-pipelines.yml dosyası işlemeniz istenir. İletiden memnun olduktan sonra Kaydet'i seçin ve yeniden çalıştırın .

    İşlem hattınızın nasıl çalıştığını izlemek istiyorsanız derleme işini seçin.

    Kodunuz Xcode şablonuna uygun göründüğünden sizin için otomatik olarak oluşturduğumuz bir işlem hattı oluşturdunuz ve çalıştırdık.

    Artık deponuzda özelleştirmeniz için hazır çalışan bir YAML işlem hattı (azure-pipelines.yml) var!

  3. İşlem hattınızda değişiklik yapmaya hazır olduğunuzda İşlem Hatları sayfasından seçin ve ardından Dosyayı düzenleyinazure-pipelines.yml.

İşlem hattınızı özelleştirmenin en yaygın yollarından bazılarını öğrenmek için aşağıdaki bölümlere bakın.

İpucu

YAML dosyasında bu konuda açıklandığı gibi değişiklik yapmak için İşlem Hatları sayfasında işlem hattını seçin ve ardından Düzenle'yi seçerek dosya için azure-pipelines.yml bir düzenleyici açın.

Derleme ortamı

Kendi altyapınızı ayarlamanıza gerek kalmadan Xcode ile uygulamalarınızı derlemek için Azure Pipelines'ı kullanabilirsiniz. Xcode, Azure Pipelines'da Microsoft tarafından barındırılan macOS aracılarına önceden yüklenmiştir. Derlemelerinizi çalıştırmak için macOS aracılarını kullanabilirsiniz.

Xcode'un önceden yüklenmiş tam sürümleri için Bkz. Microsoft tarafından barındırılan aracılar.

Deponuzun kökünde azure-pipelines.yml adlı bir dosya oluşturun. Ardından, uygun aracı havuzunu seçmek için dosyanıza azure-pipelines.yml aşağıdaki kod parçacığını ekleyin:

# https://learn.microsoft.com/azure/devops/pipelines/ecosystems/xcode
pool:
  vmImage: 'macOS-latest'

Xcode ile uygulama oluşturma

Xcode ile uygulama oluşturmak için dosyanıza azure-pipelines.yml aşağıdaki kod parçacığını ekleyin. Bu, simülatör için varsayılan şemasını kullanarak ve paketlemeden bir iOS projesi oluşturmaya yönelik en düşük kod parçacığıdır. Değerleri proje yapılandırmanızla eşleşecek şekilde değiştirin. Bu seçenekler hakkında daha fazla bilgi için Xcode görevine bakın.

pool:
  vmImage: 'macos-latest'

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

İmzalama ve sağlama

Bir Xcode uygulamasının bir cihazda çalışması veya App Store'da yayımlanması için imzalanması ve sağlanması gerekir. İmzalama ve sağlama işleminin P12 imzalama sertifikanıza ve bir veya daha fazla sağlama profiline erişmesi gerekir. Apple Sertifikasını Yükle ve Apple Sağlama Profilini Yükle görevleri, derleme sırasında bunları Xcode'un kullanımına sağlar.

Daha fazla bilgi edinmek için bkz . Mobil uygulamanızı imzalama.

Kartaca

Projeniz özel bir Carthage deposuyla Carthage kullanıyorsa, depoya erişimi olan bir belirtecin değeriyle adlı GITHUB_ACCESS_TOKEN ortam değişkenini ayarlayarak kimlik doğrulamasını ayarlayabilirsiniz. Carthage bu ortam değişkenlerini otomatik olarak algılar ve kullanır.

Gizli dizi belirtecini doğrudan işlem hattı YAML'nize eklemeyin. Bunun yerine, bu değeri şifrelemek için Değişkenler bölmesinde kilidi etkinleştirilmiş yeni bir işlem hattı değişkeni oluşturun. Bkz. gizli dizi değişkenleri.

Burada, ortam değişkeninin değeri için adlı myGitHubAccessToken bir gizli dizi değişkeni kullanan bir örnek verilmiştir GITHUB_ACCESS_TOKEN .

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

Azure tarafından barındırılan cihazlarda test etme

Uygulamayı iOS ve Android cihazların barındırılan laboratuvarında test etmek için App Center Test görevini ekleyin. Daha sonra ücretliye dönüştürülmesi gereken bir App Center ücretsiz deneme sürümü gereklidir.

Önce App Center'a kaydolun.

# App Center test v1
# Test app packages with Visual Studio App Center.
- task: AppCenterTest@1
  inputs:
    appFile: # string. Alias: app. Required. Binary application file path. 
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest' # string. Alias: artifactsDir. Required. Artifacts directory. Default: $(Build.ArtifactStagingDirectory)/AppCenterTest.
  # Prepare Tests
    #prepareTests: true # boolean. Alias: enablePrepare. Prepare tests. Default: true.
    frameworkOption: 'appium' # 'appium' | 'espresso' | 'calabash' | 'uitest' | 'xcuitest'. Alias: framework. Required when enablePrepare = true. Test framework. Default: appium.
    #appiumBuildDirectory: # string. Alias: appiumBuildDir. Required when enablePrepare = true && framework = appium. Build directory. 
    #espressoBuildDirectory: # string. Alias: espressoBuildDir. Optional. Use when enablePrepare = true && framework = espresso. Build directory. 
    #espressoTestApkFile: # string. Alias: espressoTestApkPath. Optional. Use when enablePrepare = true && framework = espresso. Test APK path. 
    #calabashProjectDirectory: # string. Alias: calabashProjectDir. Required when enablePrepare = true && framework = calabash. Project directory. 
    #calabashConfigFile: # string. Optional. Use when enablePrepare = true && framework = calabash. Cucumber config file. 
    #calabashProfile: # string. Optional. Use when enablePrepare = true && framework = calabash. Profile to run. 
    #calabashSkipConfigCheck: false # boolean. Optional. Use when enablePrepare = true && framework = calabash. Skip Configuration Check. Default: false.
    #uiTestBuildDirectory: # string. Alias: uitestBuildDir. Required when enablePrepare = true && framework = uitest. Build directory. 
    #uitestStorePath: # string. Optional. Use when enablePrepare = true && framework = uitest. Store file. 
    #uiTestStorePassword: # string. Alias: uitestStorePass. Optional. Use when enablePrepare = true && framework = uitest. Store password. 
    #uitestKeyAlias: # string. Optional. Use when enablePrepare = true && framework = uitest. Key alias. 
    #uiTestKeyPassword: # string. Alias: uitestKeyPass. Optional. Use when enablePrepare = true && framework = uitest. Key password. 
    #uiTestToolsDirectory: # string. Alias: uitestToolsDir. Optional. Use when enablePrepare = true && framework = uitest. Test tools directory. 
    #signInfo: # string. Optional. Use when framework = calabash || framework = uitest. Signing information. 
    #xcUITestBuildDirectory: # string. Alias: xcuitestBuildDir. Optional. Use when enablePrepare = true && framework = xcuitest. Build directory. 
    #xcUITestIpaFile: # string. Alias: xcuitestTestIpaPath. Optional. Use when enablePrepare = true && framework = xcuitest. Test IPA path. 
    #prepareOptions: # string. Alias: prepareOpts. Optional. Use when enablePrepare = true. Additional options. 
  # Run Tests
    #runTests: true # boolean. Alias: enableRun. Run tests. Default: true.
    credentialsOption: 'serviceEndpoint' # 'serviceEndpoint' | 'inputs'. Alias: credsType. Required when enableRun = true. Authentication method. Default: serviceEndpoint.
    #serverEndpoint: # string. Required when enableRun = true && credsType = serviceEndpoint. App Center service connection. 
    #username: # string. Required when enableRun = true && credsType = inputs. App Center username. 
    #password: # string. Required when enableRun = true && credsType = inputs. App Center password. 
    appSlug: # string. Required when enableRun = true. App slug. 
    devices: # string. Required when enableRun = true. Devices. 
    #series: 'master' # string. Optional. Use when enableRun = true. Test series. Default: master.
    #dsymDirectory: # string. Alias: dsymDir. Optional. Use when enableRun = true. dSYM directory. 
    localeOption: 'en_US' # 'da_DK' | 'nl_NL' | 'en_GB' | 'en_US' | 'fr_FR' | 'de_DE' | 'ja_JP' | 'ru_RU' | 'es_MX' | 'es_ES' | 'user'. Alias: locale. Required when enableRun = true. System language. Default: en_US.
    #userDefinedLocale: # string. Optional. Use when enableRun = true && locale = user. Other locale. 
    #loginOptions: # string. Alias: loginOpts. Optional. Use when enableRun = true && credsType = inputs. Additional options for login. 
    #runOptions: # string. Alias: runOpts. Optional. Use when enableRun = true. Additional options for run. 
    #skipWaitingForResults: false # boolean. Alias: async. Optional. Use when enableRun = true. Do not wait for test result. Default: false.
  # Advanced
    #cliFile: # string. Alias: cliLocationOverride. App Center CLI location. 
    #showDebugOutput: false # boolean. Alias: debug. Enable debug output. Default: false.

Yapıtları derleme kaydıyla tutma

IPA'nızı derleme kaydıyla depolamak veya sonraki işlem hatlarında test etmek ve dağıtmak için DosyalarıKopyalama ve Derleme Yapıtlarını Yayımlama görevlerini ekleyin. Bkz. Yapıtlar.

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

Dağıtma

App Center

App Center Distribute görevini ekleyerek bir uygulamayı bir grup test ediciye veya beta kullanıcısına dağıtın ya da uygulamayı Intune veya Apple App Store'a yükseltin. Ücretsiz bir App Center hesabı gereklidir (ödeme gerekmez).

# App Center distribute v3
# Distribute app builds to testers and users via Visual Studio App Center.
- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: # string. Required. App Center service connection. 
    appSlug: # string. Required. App slug. 
    appFile: # string. Alias: app. Required. Binary file path. 
    #buildVersion: # string. Build version. 
    releaseNotesOption: 'input' # 'input' | 'file'. Alias: releaseNotesSelection. Required. Create release notes. Default: input.
    releaseNotesInput: # string. Required when releaseNotesSelection = input. Release notes. 
    #releaseNotesFile: # string. Required when releaseNotesSelection = file. Release notes file. 
    #isMandatory: false # boolean. Require users to update to this release. Default: false.
    destinationType: 'groups' # 'groups' | 'store'. Required. Release destination. Default: groups.
    #distributionGroupId: # string. Alias: destinationGroupIds. Optional. Use when destinationType = groups. Destination IDs. 
    #destinationStoreId: # string. Required when destinationType = store. Destination ID. 
    #isSilent: # boolean. Optional. Use when destinationType = groups. Do not notify testers. Release will still be available to install. 
  # Symbols
    #symbolsOption: 'Apple' # 'Apple' | 'Android' | 'UWP'. Alias: symbolsType. Symbols type. Default: Apple.
    #symbolsPath: # string. Optional. Use when symbolsType == AndroidNative || symbolsType = Windows. Symbols path. 
    #appxsymPath: # string. Optional. Use when symbolsType = UWP. Symbols path (*.appxsym). 
    #symbolsDsymFiles: # string. Alias: dsymPath. Optional. Use when symbolsType = Apple. dSYM path. 
    #symbolsMappingTxtFile: # string. Alias: mappingTxtPath. Optional. Use when symbolsType = Android. Mapping file. 
    #nativeLibrariesPath: # string. Optional. Use when symbolsType == Android. Native Library File Path. 
    #symbolsIncludeParentDirectory: # boolean. Alias: packParentFolder. Optional. Use when symbolsType = Apple. Include all items in parent folder.

Apple App Store

Apple App Store uzantısını yükleyin ve App Store ile etkileşimi otomatikleştirmek için aşağıdaki görevleri kullanın. Varsayılan olarak, bu görevler yapılandırdığınız bir hizmet bağlantısını kullanarak Apple'da kimlik doğrulaması yapar.

Sürüm

Mevcut iOS TestFlight beta uygulamalarına veya App Store'daki üretim uygulamalarına güncelleştirmelerin yayımlanmasını otomatikleştirmek için App Store Yayın görevi ekleyin.

Apple kimlik doğrulaması bölgeye özgü olduğundan ve hızlı oturum belirteçlerinin süresi hızla dolduğundan ve yeniden oluşturulup yeniden yapılandırılması gerektiğinden, bu görevi Apple iki öğeli kimlik doğrulamasıyla kullanma sınırlamalarına bakın.

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

Yükselt

Daha önce gönderilen bir uygulamanın iTunes Bağlan App Store'a yükseltılmasını otomatikleştirmek için App Store Yükseltme görevini ekleyin.

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