116 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Titanium | ||
|  | author: Sander van der Burg | ||
|  | date: 2018-11-18 | ||
|  | --- | ||
|  | # Titanium
 | ||
|  | 
 | ||
|  | The Nixpkgs repository contains facilities to deploy a variety of versions of | ||
|  | the [Titanium SDK](https://www.appcelerator.com) versions, a cross-platform | ||
|  | mobile app development framework using JavaScript as an implementation language, | ||
|  | and includes a function abstraction making it possible to build Titanium | ||
|  | applications for Android and iOS devices from source code. | ||
|  | 
 | ||
|  | Not all Titanium features supported -- currently, it can only be used to build | ||
|  | Android and iOS apps. | ||
|  | 
 | ||
|  | Building a Titanium app | ||
|  | ----------------------- | ||
|  | We can build a Titanium app from source for Android or iOS and for debugging or | ||
|  | release purposes by invoking the `titaniumenv.buildApp {}` function: | ||
|  | 
 | ||
|  | ```nix | ||
|  | titaniumenv.buildApp { | ||
|  |   name = "myapp"; | ||
|  |   src = ./myappsource; | ||
|  | 
 | ||
|  |   preBuild = ""; | ||
|  |   target = "android"; # or 'iphone' | ||
|  |   tiVersion = "7.1.0.GA"; | ||
|  |   release = true; | ||
|  | 
 | ||
|  |   androidsdkArgs = { | ||
|  |     platformVersions = [ "25" "26" ]; | ||
|  |   }; | ||
|  |   androidKeyStore = ./keystore; | ||
|  |   androidKeyAlias = "myfirstapp"; | ||
|  |   androidKeyStorePassword = "secret"; | ||
|  | 
 | ||
|  |   xcodeBaseDir = "/Applications/Xcode.app"; | ||
|  |   xcodewrapperArgs = { | ||
|  |     version = "9.3"; | ||
|  |   }; | ||
|  |   iosMobileProvisioningProfile = ./myprovisioning.profile; | ||
|  |   iosCertificateName = "My Company"; | ||
|  |   iosCertificate = ./mycertificate.p12; | ||
|  |   iosCertificatePassword = "secret"; | ||
|  |   iosVersion = "11.3"; | ||
|  |   iosBuildStore = false; | ||
|  | 
 | ||
|  |   enableWirelessDistribution = true; | ||
|  |   installURL = "/installipa.php"; | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | The `titaniumenv.buildApp {}` function takes the following parameters: | ||
|  | 
 | ||
|  | * The `name` parameter refers to the name in the Nix store. | ||
|  | * The `src` parameter refers to the source code location of the app that needs | ||
|  |   to be built. | ||
|  | * `preRebuild` contains optional build instructions that are carried out before | ||
|  |   the build starts. | ||
|  | * `target` indicates for which device the app must be built. Currently only | ||
|  |   'android' and 'iphone' (for iOS) are supported. | ||
|  | * `tiVersion` can be used to optionally override the requested Titanium version | ||
|  |   in `tiapp.xml`. If not specified, it will use the version in `tiapp.xml`. | ||
|  | * `release` should be set to true when building an app for submission to the | ||
|  |   Google Playstore or Apple Appstore. Otherwise, it should be false. | ||
|  | 
 | ||
|  | When the `target` has been set to `android`, we can configure the following | ||
|  | parameters: | ||
|  | 
 | ||
|  | * The `androidSdkArgs` parameter refers to an attribute set that propagates all | ||
|  |   parameters to the `androidenv.composeAndroidPackages {}` function. This can | ||
|  |   be used to install all relevant Android plugins that may be needed to perform | ||
|  |   the Android build. If no parameters are given, it will deploy the platform | ||
|  |   SDKs for API-levels 25 and 26 by default. | ||
|  | 
 | ||
|  | When the `release` parameter has been set to true, you need to provide | ||
|  | parameters to sign the app: | ||
|  | 
 | ||
|  | * `androidKeyStore` is the path to the keystore file | ||
|  | * `androidKeyAlias` is the key alias | ||
|  | * `androidKeyStorePassword` refers to the password to open the keystore file. | ||
|  | 
 | ||
|  | When the `target` has been set to `iphone`, we can configure the following | ||
|  | parameters: | ||
|  | 
 | ||
|  | * The `xcodeBaseDir` parameter refers to the location where Xcode has been | ||
|  |   installed. When none value is given, the above value is the default. | ||
|  | * The `xcodewrapperArgs` parameter passes arbitrary parameters to the | ||
|  |   `xcodeenv.composeXcodeWrapper {}` function. This can, for example, be used | ||
|  |   to adjust the default version of Xcode. | ||
|  | 
 | ||
|  | When `release` has been set to true, you also need to provide the following | ||
|  | parameters: | ||
|  | 
 | ||
|  | * `iosMobileProvisioningProfile` refers to a mobile provisioning profile needed | ||
|  |   for signing. | ||
|  | * `iosCertificateName` refers to the company name in the P12 certificate. | ||
|  | * `iosCertificate` refers to the path to the P12 file. | ||
|  | * `iosCertificatePassword` contains the password to open the P12 file. | ||
|  | * `iosVersion` refers to the iOS SDK version to use. It defaults to the latest | ||
|  |   version. | ||
|  | * `iosBuildStore` should be set to `true` when building for the Apple Appstore | ||
|  |   submission. For enterprise or ad-hoc builds it should be set to `false`. | ||
|  | 
 | ||
|  | When `enableWirelessDistribution` has been enabled, you must also provide the | ||
|  | path of the PHP script (`installURL`) (that is included with the iOS build | ||
|  | environment) to enable wireless ad-hoc installations. | ||
|  | 
 | ||
|  | Emulating or simulating the app | ||
|  | ------------------------------- | ||
|  | It is also possible to simulate the correspond iOS simulator build by using | ||
|  | `xcodeenv.simulateApp {}` and emulate an Android APK by using | ||
|  | `androidenv.emulateApp {}`. |