A question was raised this week by Sturla as to how to incorporate the Launch Icon Badge extension into the build process when making use of the templates from Pipeline Templates (Damien covers how to use this extension in a Azure DevOps pipeline in his post on the topic). By the way, a big thank you to Sturla for testing each release of the templates and providing invaluable feedback along the way.
The purpose of the Launch Icon Badge extension is to make it really easy to add a banner to your application icon (or any other image) to indicate that your application is prerelease. As you’ll see from the yaml in the example below there are a lot of attributes you can control, meaning that you can use this for whatever you want to signify. For example you may want to signify what environment the app is targeting by changing the background colour on the banner.
To get started with the Launch Icon Badge extension you need to make sure you install the extension to your Azure DevOps Organisation. This is important, otherwise any attempt to use the LaunchIconBadge task will fail.
If you’re using one of the build templates from Pipeline Templates you simply need to extend it by adding the LaunchIconBadge task to the preBuild task list. This is shown at the end of the following YAML snippet.
stages:
- template: azure/mobile/build-xamarin-android.yml@builttoroam_templates
parameters:
# Stage name and whether it's enabled
stage_name: 'Build_Android'
build_android_enabled: ${{variables.android_enabled}}
# Version information
full_version_number: '$(version_prefix).$(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: $(solution_file)
solution_build_configuration: $(solution_build_config)
# Output information
artifact_folder: $(artifact_android_folder)
application_package: $(android_application_package)
preBuild:
- task: LaunchIconBadge@1
inputs:
sourceFolder: '$(Build.SourcesDirectory)/src/Apps/DotNet/Uno/InspectorUno/InspectorUno/InspectorUno.Droid' # Optional. Default is: $(Build.SourcesDirectory)
contents: '**/*.png' # Optional. Default is: '**/*.png'
bannerVersionNamePosition: 'bottomRight' # Options: topLeft, topRight, bottomRight, bottomLeft. Default is: 'bottomRight'
bannerVersionNameText: 'Prerelease' # Optional. Default is: ''
bannerVersionNameColor: '#C5000D' # Optional. Default is: '#C5000D'
bannerVersionNameTextColor: '#FFFFFF' # Optional. Default is: '#FFFFFF'
bannerVersionNumberPosition: 'top' # Optional. top, bottom, none. Default is: 'none'
bannerVersionNumberText: '$(version_prefix).$(Build.BuildId)' # Optional. Default is: ''
bannerVersionNumberColor: '#34424F' # Optional. Default is: '#34424F'
bannerVersionNumberTextColor: '#FFFFFF' # Optional. Default is: '#FFFFFF'
Important Note: In v0.5.2 of the Pipeline Templates you can no longer pass in a variable to the build_android_enabled parameter using the $(variablename) syntax. As shown here you need to use the ${{variables.variablename}} syntax to ensure it’s resolved as part of inflating the templates.
When you’re attempting to get the LaunchIconBadge task to work for you, make sure that your sourceFolder and contents are configured to locate the app icons for your application. This took me a couple of iterations as I got the path wrong the first couple of times and it resulted in no images being found – check the build log for full information on what the task is doing.
Once you have every configured, your application should be built with the appropriate banner across the application icon. I configured this for the Android, iOS and Windows build for my application and this is what I now see in App Center.
Pipeline Templates v0.5.2
Here’s a summary of what’s in release v0.5.2:
Breaking Changes:
- build-xamarin-[iOS/android/windows].yml and deploy-appcenter.yml – XXX_enabled parameter (eg windows_enabled or deploy_enabled) no longer supports passing a variable in using $(variablename) syntax. Make sure you use ${{variables.variablename}} syntax. This also means that only variables defined in the YAML file are supported – NOT variables defined in variable groups or in the UI for the pipeline. Going forward it’s recommended to use runtime parameters for getting user input when invoking a pipeline.
Other Changes:
- none