Using Visual Studio Code Tasks

March 28, 2022 ยท View on GitHub

The Titanium extension contributes two tasks to Visual Studio Code to allow you to easily customize your own builds, as well as orchestrate tasks from different sources to ease your development. This document describes how to configure these tasks, and also provides examples of some useful tasks for Titanium development.

Titanium Build Task

The titanium-build task is for building applications and modules during development. All configuration for this task is under a titaniumBuild property.

Common Build Task Configuration

PropertyDescriptionDefault ValueValid Values
titaniumBuild.deployTypeDeploy Type to be used when buildingNo Defaulttest, development
titaniumBuild.deviceIdID or UDID for the device or simulatorNo DefaultN/A
titaniumBuild.extraArgumentsExtra arguments to be used in the buildNo DefaultN/A
titaniumBuild.platformPlatform to build forNo Defaultandroid, ios
titaniumBuild.projectTypeProject type to be builtNo Defaultapp, module
titaniumBuild.targetTarget to build forNo DefaultN/A
titaniumBuild.androidAndroid configuration optionsNo DefaultSee Android Build Task Configuration
titaniumBuild.iosiOS configuration optionsNo DefaultSee iOS Build Task Configuration

Android Build Task Configuration

There are no Android specific configuration properties for the Build task.

iOS Build Task Configuration

PropertyDescriptionDefault ValueValid Values
titaniumBuild.ios.provisioningProfileProvisioning Profile UUID to use when signing device buildsNo DefaultN/A
titaniumBuild.ios.certificateCertificate name to use when signing device buildsNo DefaultN/A
titaniumBuild.ios.simulatorVersionSimulator version use when performing a simulator buildNo DefaultN/A

Sample Build Task Configurations

Build for a specific Android emulator

{
	"type": "titanium-build",
	"label": "Build - Android - Pixel 3a XL API 29",
	"titaniumBuild": {
		"platform": "android",
		"target": "emulator",
		"deviceId": "Pixel_3a_XL_API_29"
	},
}

Build for iOS device with certificate and provisioning profile

{
	"type": "titanium-build",
	"label": "Build - iOS - Device",
	"titaniumBuild": {
		"platform": "ios",
		"target": "device",
		"deviceId": "846564383f42cf576ebe6966800caf83fd588f54",
		"ios": {
			"certificate": "iPhone Developer: TiDev (A12345BC6D)",
			"provisioningProfile": "12345678-1a23-1a23-ab6a-1234a5678b9c"
		}
	}
}

Titanium Package Task

The titanium-package task is for building distribution versions of applications and modules.

Package Configuration

PropertyDescriptionDefault ValueValid Values
titaniumBuild.extraArgumentsExtra arguments to be used in the buildNo DefaultN/A
titaniumBuild.outputDirectoryOutput directory for the built applicationNo DefaultN/A
titaniumBuild.platformPlatform to build forNo Defaultandroid, ios
titaniumBuild.targetTarget to build forNo DefaultN/A
titaniumBuild.projectTypeProject type to be builtNo Defaultapp, module
titaniumBuild.androidAndroid configuration optionsNo DefaultSee Android Package Task Configuration
titaniumBuild.iosiOS configuration optionsNo DefaultSee iOS Package Task Configuration

Android Package Task Configuration

PropertyDescriptionDefault ValueValid Values
titaniumBuild.android.keystore.aliasAlias for the keystoreNo DefaultN/A
titaniumBuild.android.keystore.locationPath of the keystore to be used, must be a full pathNo DefaultN/A

iOS Package Task Configuration

PropertyDescriptionDefault ValueValid Values
titaniumBuild.ios.provisioningProfileProvisioning Profile UUID to be usedNo DefaultN/A
titaniumBuild.ios.certificateCertificate name to be usedNo DefaultN/A

Sample Package Task Configurations

Package for iOS dist-appstore

{
	"type": "titanium-package",
	"label": "Package - iOS - AppStore",
	"titaniumBuild": {
		"platform": "ios",
		"target": "dist-appstore",
		"outputDirectory": "/Users/ewan/git/kitchensink-v2",
		"ios": {
			"certificate": "iPhone Distribution: TiDev",
			"provisioningProfile": "48a8cfb7-17ed-4829-a794-dab384512292"
		}
	}
}

Package for Android dist-playstore

{
	"type": "titanium-package",
	"label": "Package - Android - PlayStore",
	"titaniumBuild": {
		"platform": "android",
		"target": "dist-playstore",
		"outputDirectory": "/Users/ewan/git/kitchensink-v2",
		"android": {
			"keystore": {
				"location": "/Users/ewan/git/kitchensink-v2/mykeystore",
				"alias": "analias"
			}
		}
	}
}

Orchestrating tasks

Visual Studio Code allows tasks to declare dependencies to create what is known as compound tasks. By using compound tasks we can run tasks such as linting before the Titanium build process to ensure that our code is valid or start a local development server before building the app. For example, with the following tasks.json file the lint task will run before the titanium-build task, which will take place only if the lint task passed.

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "titanium-build",
			"label": "Build - Android - Pixel 3a XL API 29",
			"titaniumBuild": {
				"platform": "android",
				"target": "emulator",
				"deviceId": "Pixel_3a_XL_API_29"
			},
			"dependsOn": ["lint"]
		},
		{
			"label": "lint",
			"type": "npm",
			"script": "lint",
			"problemMatcher": [
				"$eslint-stylish"
			]
		}
	]
}