Xcode-apps bouwen, testen en implementeren
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Meer informatie over het bouwen en implementeren van Xcode-projecten met Azure Pipelines.
Vereisten
- Een Xcode 9+ project in een GitHub-opslagplaats. Als u geen project hebt, raadpleegt u Het maken van een Xcode-project voor een app
Maak de pijplijn
Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.
Ga naar Pijplijnen en selecteer vervolgens Nieuwe pijplijn of Pijplijn maken als u uw eerste pijplijn maakt.
Voer de stappen van de wizard uit door eerst GitHub te selecteren als de locatie van uw broncode.
U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.
Wanneer u de lijst met opslagplaatsen ziet, selecteert u de opslagplaats.
U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Goedkeuren en installeren.
Wanneer het tabblad Configureren wordt weergegeven, selecteert u Xcode.
Wanneer uw nieuwe pijplijn wordt weergegeven, bekijkt u de YAML om te zien wat deze doet. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.
U wordt gevraagd een nieuw azure-pipelines.yml-bestand door te voeren naar uw opslagplaats. Nadat u tevreden bent met het bericht, selecteert u Opslaan en opnieuw uitvoeren .
Als u de pijplijn in actie wilt bekijken, selecteert u de buildtaak.
U hebt zojuist een pijplijn gemaakt en uitgevoerd die automatisch voor u is gemaakt, omdat uw code een goede overeenkomst leek voor de Xcode-sjabloon .
U hebt nu een werkende YAML-pijplijn (
azure-pipelines.yml
) in uw opslagplaats die u kunt aanpassen.Wanneer u klaar bent om wijzigingen aan te brengen in uw pijplijn, selecteert u deze op de pagina Pijplijnen en bewerkt u het
azure-pipelines.yml
bestand.
Zie de onderstaande secties voor meer informatie over de meest voorkomende manieren om uw pijplijn aan te passen.
Tip
Als u wijzigingen wilt aanbrengen in het YAML-bestand zoals beschreven in dit onderwerp, selecteert u de pijplijn op de pagina Pijplijnen en selecteert u Bewerken om een editor voor het azure-pipelines.yml
bestand te openen.
Omgeving bouwen
U kunt Azure Pipelines gebruiken om uw apps te bouwen met Xcode zonder dat u een eigen infrastructuur hoeft in te stellen. Xcode is vooraf geïnstalleerd op door Microsoft gehoste macOS-agents in Azure Pipelines. U kunt de macOS-agents gebruiken om uw builds uit te voeren.
Raadpleeg voor de exacte versies van Xcode die vooraf zijn geïnstalleerd, naar door Microsoft gehoste agents.
Maak een bestand met de naam azure-pipelines.yml in de hoofdmap van uw opslagplaats. Voeg vervolgens het volgende fragment toe aan uw azure-pipelines.yml
bestand om de juiste agentgroep te selecteren:
# https://learn.microsoft.com/azure/devops/pipelines/ecosystems/xcode
pool:
vmImage: 'macOS-latest'
Een app bouwen met Xcode
Als u een app met Xcode wilt bouwen, voegt u het volgende codefragment toe aan uw azure-pipelines.yml
bestand. Dit is een minimaal fragment voor het bouwen van een iOS-project met behulp van het standaardschema, voor de simulator en zonder verpakking. Wijzig de waarden zodat deze overeenkomen met uw projectconfiguratie. Zie de Xcode-taak voor meer informatie over deze opties.
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
Ondertekening en inrichting
Een Xcode-app moet zijn ondertekend en ingericht om op een apparaat uit te voeren of te worden gepubliceerd in de App Store. Het ondertekenings- en inrichtingsproces heeft toegang nodig tot uw P12-handtekeningcertificaat en een of meer inrichtingsprofielen. De taken Apple-certificaat installeren en Apple Provisioning Profile installeren maken deze beschikbaar voor Xcode tijdens een build.
Zie Uw mobiele app ondertekenen voor meer informatie.
Carthage
Als uw project Gebruikmaakt van Carthage met een privéopslagplaats in Windows, kunt u verificatie instellen door een omgevingsvariabele GITHUB_ACCESS_TOKEN
in te stellen met de naam een waarde van een token dat toegang heeft tot de opslagplaats.
De omgevingsvariabele zal deze omgevingsvariabele automatisch detecteren en gebruiken.
Voeg het geheime token niet rechtstreeks toe aan uw pijplijn YAML. Maak in plaats daarvan een nieuwe pijplijnvariabele met de vergrendeling ingeschakeld in het deelvenster Variabelen om deze waarde te versleutelen. Zie geheime variabelen.
Hier volgt een voorbeeld waarin een geheime variabele wordt gebruikt die is benoemd myGitHubAccessToken
voor de waarde van de GITHUB_ACCESS_TOKEN
omgevingsvariabele.
- script: carthage update --platform iOS
env:
GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)
Testen op door Azure gehoste apparaten
Voeg de App Center-testtaak toe om de app te testen in een gehost lab met iOS- en Android-apparaten. Er is een gratis proefversie van App Center vereist die later moet worden geconverteerd naar betaald.
Meld u eerst aan bij App Center .
# 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.
Artefacten behouden met de buildrecord
Voeg de taken Voor het kopiëren van bestanden en het publiceren van buildartefacten toe om uw IPA op te slaan met de buildrecord of test en implementeer deze in volgende pijplijnen. Zie artefacten.
- task: CopyFiles@2
inputs:
contents: '**/*.ipa'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Implementeren
App Center
Voeg de taak App Center Distribueren toe om een app te distribueren naar een groep testers of bètagebruikers, of de app te promoveren naar Intune of de Apple App Store. Er is een gratis App Center-account vereist (er is geen betaling nodig).
# 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
Installeer de Apple App Store-extensie en gebruik de volgende taken om de interactie met de App Store te automatiseren. Deze taken worden standaard geverifieerd bij Apple met behulp van een serviceverbinding die u configureert.
Vrijgeven
Voeg de releasetaak van de App Store toe om de release van updates voor bestaande bèta-apps voor iOS TestFlight of productie-apps in de App Store te automatiseren.
Zie beperkingen voor het gebruik van deze taak met Tweeledige Apple-verificatie, omdat Apple-verificatie regiospecifiek is en fastlane-sessietokens snel verlopen en opnieuw moeten worden gemaakt en opnieuw moeten worden geconfigureerd.
- 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
Promoten
Voeg de taak App Store Niveau verhogen toe om de promotie van een eerder ingediende app vanuit iTunes Verbinding maken te automatiseren in de App Store.
- 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
Verwante extensies
- Apple App Store (Microsoft)
- Gecodificeerde beveiliging (gecodificeerde beveiliging)
- MacinCloud (Moboware Inc.)
- Taken voor mobiele apps voor iOS en Android (James Montemagno)
- Mobile Testing Lab (Perfecto Mobile)
- Raygun (Raygun)
- React Native (Microsoft)
- Versie Setter (Tom Gilder)
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub Issues geleidelijk uitfaseren als het feedbackmechanisme voor inhoud. Het wordt vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor