Louis Matos has put together Xamarin Month with the topic of Code Snippets – Check out Louis’ blog for the full month of snippet. In this post I’m going to cover some code snippets that use Pipeline Templates in order to setup a Azure DevOps pipeline for your Xamarin application.
Azure Pipeline Templates are a way to define reusable components of YAML that can be shared across different pipelines and in fact across different repositories. Noting how difficult it was to setup even a basic pipeline to build and deploy a Xamarin application, the Pipeline Templates project was born to publish reusable templates that could easily be dropped into any pipeline.
Getting Started
In order to make use of templates, the first thing you need to do is to reference the pipeline_templates GitHub repository as a resource in you YAML build pipeline.
resources: repositories: - repository: builttoroam_templates type: github name: builttoroam/pipeline_templates ref: refs/tags/v0.6.1 endpoint: github_connection
It’s worth noting that the ref attribute is referencing the v0.6.1 release by specifying the tag. Alternatively you could reference any branch simply by changing the ref to a value similar to “refs/heads/nickr/bugfix” where the branch is nickr/bugfix. I would recommend referencing one of the tagged releases for stability of your build pipeline – from time to time we do make breaking changes, so if you’re referencing a branch, your build might start failing.
Build Templates
Android
To build the Android application, use the build-xamarin-android template – simply provide the necessary parameters.
stages: - template: azure/stages/build-xamarin-android.yml@builttoroam_templates parameters: # Stage name and whether it's enabled stage_name: 'Build_Android' build_android_enabled: true # Version information full_version_number: '1.0.$(Build.BuildId)' # Signing information secure_file_keystore_filename: '$(android_keystore_filename)' keystore_alias: '$(android_keystore_alias)' keystore_password: '$(android_keystore_password)' # Solution to build solution_filename: 'src/SnippetXamarinApp.sln' solution_build_configuration: 'Release' # Output information artifact_folder: 'artifacts' application_package: 'android.apk'
iOS
To build the iOS application, use the build-xamarin-ios template
- template: azure/stages/build-xamarin-ios.yml@builttoroam_templates parameters: # Stage name and whether it's enabled stage_name: 'Build_iOS' build_ios_enabled: true # Version information full_version_number: '1.0.$(Build.BuildId)' # Solution to build solution_filename: 'src/SnippetXamarinApp.sln' solution_build_configuration: 'Release' # Signing information ios_plist_filename: 'src/SnippetXamarinApp/SnippetXamarinApp.iOS/Info.plist' ios_cert_password: '$(ios_signing_certificate_password)' ios_cert_securefiles_filename: '$(ios_signing_certificate_securefiles_filename)' ios_provisioning_profile_securefiles_filename: '$(ios_provisioning_profile_securefiles_filename)' # Output information artifact_folder: 'artifacts' application_package: 'ios.ipa'
Windows
To build the Windows application, use the build-xamarin-windows template. Technically this template should work with any UWP application.
- template: azure/stages/build-xamarin-windows.yml@builttoroam_templates parameters: # Stage name and whether it's enabled stage_name: 'Build_Windows' build_windows_enabled: true # Version information full_version_number: '1.0.$(Build.BuildId)' # Signing information windows_cert_securefiles_filename: '$(windows_signing_certificate_securefiles_filename)' windows_cert_password: '$(windows_signing_certificate_password)' # Solution to build solution_filename: 'src/SnippetXamarinApp.sln' solution_build_configuration: 'Release' # Output information artifact_folder: 'artifacts' application_package: 'windows.msix'
Deploy
Of course, once you’re done building your applications, you probably want to deploy the applications for testing. For this you can use the deploy-appcenter template. Note that you need to add a stage for each platform you want to deploy but you can use the same template as it knows how to deploy iOS, Android and Windows applications to AppCenter.
- template: azure/stages/deploy-appcenter.yml@builttoroam_templates parameters: # Stage name and dependencies stage_name: 'Deploy_Android' depends_on: 'Build_Android' deploy_appcenter_enabled: true environment_name: 'AppCenter' # Build artifacts artifact_folder: 'artifacts' application_package: 'android.apk' # Signing information (for Android repack to APK) secure_file_keystore_filename: '$(android_keystore_filename)' keystore_alias: '$(android_keystore_alias)' keystore_password: '$(android_keystore_password)' # Deployment to AppCenter appcenter_service_connection: $(appcenter_service_connection) appcenter_organisation: $(appcenter_organisation) appcenter_applicationid: $(appcenter_android_appid)
For a more detailed walk through of using the pipeline templates for building cross platform xamarin applications, please check out this post that covers the process end to end.
Call to Action: Contributions
The Pipeline Templates project is an open source project and I would love to get feedback and contributions from the community in order to provide more templates (not just for mobile).
Specifically, if anyone has built out the tasks necessary to deploy applications to each of the three stores, it would be great to create a template similar to the AppCenter template that targets the actual stores.
If anyone is familiar with both GitHub Actions and Azure Pipelines, it would be great to get someone to give me a hand to convert the existing templates for Azure DevOps across to GitHub Actions.