Codestrong 2012 breakout session how to win bigger mobile deals
Codestrong 2012 breakout session exploring the new titanium command line interface (cli)
1. Exploring The New Titanium
Command Line Interface
Chris Barber
Sr. Platform Lead
Appcelerator
@cb1kenobi
cbarber@appcelerator.com
2. About Me
• Chris Barber
• JavaScript Team Lead
• Mobile Web, CLI
• @cb1kenobi
3. Why Create a New CLI?
If it ain’t broke, don’t fix it
4. Old School
• Python 2.7.x
• Poorly documented
• Difficult to maintain
• Inconsistent arguments
• Rigid plugin system
5. Building a New CLI
• Python 3? Node.js? Ruby? Java+Rhino?
• How comfortable are we with these
technologies?
• Compatible license?
• What libraries are available?
• XML/JSON parsing
• Code minification
• Image resizing
6. Appc Node.js
• JavaScript!
• MIT License
• Small size
• No native dependencies
• Package manager (npm)
• Tons of great community modules
11. Running The CLI
chris@yojimbo:~$ titanium
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Usage: titanium <command> [options]
Commands:
config get and set config options
help displays this help screen
info display development environment information
login logs into the Appcelerator network
logout logs out of the Appcelerator network
module manages installed Titanium Modules
plugin manages installed Titanium Plugins
sdk manages installed Titanium SDKs
setup run the setup wizard
status displays session information
Global Flags:
--banner, --no-banner displays Titanium version banner [default: true]
--colors, --no-colors use colors in the terminal [default: true]
-h, --help displays help
--prompt, --no-prompt prompt for missing options [default: true]
-q, --quiet suppress all output
-v, --version displays the current version
12. Help!
titanium <cmd> -h chris@yojimbo:~$ titanium help config
Titanium Command-Line Interface, version 3.0.7
titanium <cmd> --help Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
titanium help <cmd> Usage: titanium config [--remove] [--output <value>] [<key>] [<value>]
Gets and sets config options. If no key is specified, then all key/values are
returned.
The config file is located at: /Users/chris/.titanium/config.json
Config Arguments:
<key> the key to get or set
<value> the value to set the specified key
Config Flags:
-r, --remove remove the specified config key and all its descendants
Config Options:
-o, --output <value> output format [report, json]
Global Flags:
--banner, --no-banner displays Titanium version banner [default: true]
--colors, --no-colors use colors in the terminal [default: true]
-h, --help displays help
--prompt, --no-prompt prompt for missing options [default: true]
-q, --quiet suppress all output
-v, --version displays the current version
13. Setup Wizard
Basic Setup
titanium setup
Advanced Setup
• Initializes the CLI configuration
titanium setup -a
chris@yojimbo:~$ titanium setup
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Enter ctrl-c at any time to quit
What is your name? (this is used as the default for the "author" field in the tiapp.xml or module
manifest file when creating new projects) (Chris Barber)
What is your email address used for logging into the Appcelerator Network? (cbarber@appcelerator.com)
What would you like as your default locale? (examples: "en", "de", "fr") (en-us)
What Titanium SDK would you like to use by default? (2.1.3.GA)
Path to your workspace where your projects should be created: (~/appc/workspace)
Path to the Android SDK: (this is needed for building Android apps)
Configuration saved
15. Authentication
Logging In chris@yojimbo:~$ titanium login
titanium login Titanium Command-Line Interface, version 3.0.7
<username> Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Am I Logged In? Username: (cbarber@appcelerator.com)
titanium status Password:
Logging out Logged in successfully
titanium logout
chris@yojimbo:~$ titanium status
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
You are currently logged in as cbarber@appcelerator.com
chris@yojimbo:~$ titanium logout
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Logged out successfully
• Required for most commands
• Adds your app to my.appcelerator.com
• Username is your e-mail address
16. System Info
chris@yojimbo:~$ titanium info
Includes: Titanium Command-Line Interface, version 3.0.7
• OS info
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Operating System
• node.js & npm Name
Version
= Mac OS X
= 10.8.2
• Xcode versions Memory = 16.0GB
• iOS SDKs & node.js
node.js Version = v0.8.12
npm Version = 1.1.63
simulators
• iOS provisioning
Xcode
4.4.1 (build 4F1003)
Install Location = /Applications/Xcode44.app/Contents/Developer
profiles & iOS SDKs
iOS Simulators
= 5.1
= 5.0, 5.1
keychains 4.5 (build 4G182)
Install Location = /Applications/Xcode45.app/Contents/Developer
• Titanium SDKs iOS SDKs
iOS Simulators
= 6.0
= 5.0, 5.1, 6.0
• Android SDKs, iOS Certificates
Development = Chris Barber (XXXXXXXXXX)
addons, and AVDs Distribution = Appcelerator, Inc.
Apple WWDR = installed
Development iOS Provisioning Profiles
Get All Info My Provisioning Profile
UUID = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
titanium info App Prefix
App Id
= XXXXXXXXXX
= com.appcelerator.*
iOS Keychains
System Default = System Default
OS Info Only login.keychain = /Users/chris/Library/Keychains/login.keychain
Microsoft_Intermediate_Certificates = /Users/chris/Library/Keychains/Microsoft_Intermediate_Certificates
titanium info -t os System.keychain = /Library/Keychains/System.keychain
Titanium SDKs
2.1.3.GA
iOS Info Only Install Location
Platforms
= /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA
= android, iphone, mobileweb
git Hash = unknown
titanium info -t ios git Timestamp = unknown
Android Platforms
android-8
Android & Node.js Name
API Level
= Android 2.2
=8
Info Only Revision
Skins
=3
= HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
titanium info -t ABIs
Path
= armeabi
= /opt/android-sdk/platforms/android-8
android,nodejs Android Add-ons
Google Inc.:Google APIs:8
Name = Google APIs
Vendor = Google Inc.
Output as JSON Revision
Description
=2
= Android + Google APIs
titanium info -o json Skins
ABIs
= WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA
= armeabi
Path = /opt/android-sdk/add-ons/addon-google_apis-google-10
Based On = Android 2.2 (API level 8)
Libraries = com.google.android.maps: API for Google Maps (maps.jar)
17. Modules & Plugins
Get Installed Modules chris@yojimbo:~$ titanium module
Titanium Command-Line Interface, version 3.0.7
titanium module Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Global Modules
Get Installed Modules
Including a Project Android
ti.cloudpush
titanium module 2.0.5 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.5
–project-dir 2.0.7 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.7
/path/to/project CommonJS
ti.cloud
2.1.0 /Users/chris/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.1.0
Get Installed Plugins 2.2.0 /Users/chris/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.2.0
2.3.0 /Users/chris/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.3.0
titanium plugin 2.0.5 /Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.0.5
iPhone
Output as JSON ti.jira
1.0 /Users/chris/Library/Application Support/Titanium/modules/iphone/ti.jira/1.0
titanium plugin
-o json Mobile Web
ti.oldmodule
0.1 /Users/chris/Library/Application Support/Titanium/modules/mobileweb/ti.oldmodule/0.1
chris@yojimbo:~$ titanium plugin
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
User Path Plugins
No project plugins found
Global Plugins
another_plugin
1.0 /Users/chris/Library/Application Support/Titanium/plugins/another_plugin/1.0
test_plugin
1.0 /Users/chris/Library/Application Support/Titanium/plugins/test_plugin/1.0
ti.alloy
1.0 /Users/chris/Library/Application Support/Titanium/plugins/ti.alloy/1.0
19. Downloading An SDK
List Intalled SDKs chris@yojimbo:~$ titanium sdk
titanium sdk Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Install Latest 3.0
titanium sdk install Installed SDKs:
--branch 3_0_X 2.1.3.GA [default] /Users/chris/Library/ApplicationSupport/Titanium/mobilesdk/osx/2.1.3.GA
--default 2.1.2.GA /Users/chris/Library/ApplicationSupport/Titanium/mobilesdk/osx/2.1.2.GA
2.1.0.GA /Users/chris/Library/ApplicationSupport/Titanium/mobilesdk/osx/2.1.0.GA
Install Latest Stable 2.0.2.GA /Users/chris/Library/ApplicationSupport/Titanium/mobilesdk/osx/2.0.2.GA
titanium sdk install
chris@yojimbo:~$ titanium sdk install --branch 3_0_X --default
Install Latest Stable & Titanium Command-Line Interface, version 3.0.7
Set as Default SDK Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
titanium sdk install
--default Downloading http://builds.appcelerator.com.s3.amazonaws.com/mobile/3_0_X/mobilesdk-
3.0.0.v20121018214614-osx.zip
Install Bleeding Edge 100% [=================================================================] 0.0s
titanium sdk install
--branch master Extracting SDK...
Saving SDK 3.0.0.v20121018214614 as the default.
Titanium SDK 3.0.0.v20121018214614 successfully installed!
20. New Commands!
chris@yojimbo:~$ titanium
Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Usage: titanium <command> [options]
Commands:
build builds a project
clean removes previous build directories
config get and set config options
create creates a new mobile application or module
help displays this help screen
info display development environment information
login logs into the Appcelerator network
logout logs out of the Appcelerator network
module manages installed Titanium Modules
plugin manages installed Titanium Plugins
project get and set tiapp.xml settings
sdk manages installed Titanium SDKs
setup run the setup wizard
status displays session information
Global Flags:
--banner, --no-banner displays Titanium version banner [default: true]
--colors, --no-colors use colors in the terminal [default: true]
-h, --help displays help
--prompt, --no-prompt prompt for missing options [default: true]
-q, --quiet suppress all output
-v, --version displays the current version
23. Getting Project Info
Basic Info
titanium project
Copy Platform
• Tool for interacting with the tiapp.xml
Resource Files
titanium project
--deployment-targets chris@yojimbo:~/myapp$ titanium project
android,ios,mobileweb Titanium Command-Line Interface, version 3.0.7
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
Deployment Targets:
android = true
ipad = false
iphone = true
mobileweb = true
Project Properties:
sdk-version = 3.0.0
id = com.appcelerator.myapp
name = myapp
version = 1.0
publisher = not specified
url = not specified
description = not specified
copyright = not specified
icon = appicon.png
analytics = true
guid = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
24. Building a Project
Platforms: chris@yojimbo:~/myapp$ titanium build --platform ios
• iOS Titanium Command-Line Interface, version 3.0.6
• Mobile Web Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
• Android [DEBUG] No project level plugins to load
[DEBUG] Loaded plugin hooks:
Special Hooks: [DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/cli/hooks/plugins.js
• Run in Simulator [DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/iphone/cli/hooks/install.js
• Install on Device [DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/iphone/cli/hooks/package.js
[DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/iphone/cli/hooks/run.js
• Package for [INFO] Build type: development
Distribution [DEBUG] Titanium iOS SDK directory: /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/iphone
[INFO] Building for target: simulator
[INFO] Building using iOS SDK: 6.0
[INFO] Building for iOS Simulator: 6.0
[INFO] Building for device family: universal
[DEBUG] Setting Xcode target to Debug
[DEBUG] Setting Xcode build OS to iphonesimulator6.0
[DEBUG] Xcode installation: /Applications/Xcode45.app/Contents/Developer
[DEBUG] iOS WWDR certificate: installed
[INFO] Building for iOS 6.0; using 4.3 as minimum iOS version
[DEBUG] Minimum iOS version: 4.3
[INFO] Debugging disabled
[DEBUG] Building for the following architectures: armv7 armv7s i386
[DEBUG] Forcing rebuild: githash changed since last build
[DEBUG] Was: a50c927
[DEBUG] Now: ab2b280
[INFO] Cleaning old build directory
[DEBUG] Would be firing "compile" legacy plugin hook if it was supported
[INFO] Building Info.plist
[INFO] No Titanium Modules required, continuing
[INFO] Performing full rebuild
[INFO] Copying Xcode iOS files
...
25. Cleaning the Project
Nuke All Platform
Build Directories
titanium clean
• Completely removes the platform specific build
Nuke a Specific
Platform’s Build directories
Directory
titanium clean
–platform android
chris@yojimbo:~/myapp$ titanium clean
Titanium Command-Line Interface, version 3.0.6
Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.
[INFO] Project cleaned successfully in 1ms
27. Plugins
• Similar to Titanium Modules
• Legacy plugin.py not supported today
• CLI commands & hooks
• Installed globally or in project directory
• Enabled via the tiapp.xml <plugins>
28. Sample Command
myplugin/1.0/cli/commands/magic.js
exports.cliVersion = '>=3.X';
exports.desc = 'does magical things’;
exports.config = function (logger, config, cli) {
return {
flags: {
extra: {
abbr: 'e',
desc: 'adds more magic’
}
}
};
};
exports.validate = function (logger, config, cli) {
// nothing to validate
};
exports.run = function (logger, config, cli) {
var s = 'doing magical stuff!';
if (cli.argv.extra) {
s = s.replace(/./g, function (c, i) {
return i % 2 == 0 ? c.toUpperCase() : c.toLowerCase();
});
}
logger.log(s);
};
29. Sample Hook
myplugin/1.0/cli/hooks/buildhook.js
exports.cliVersion = '>=3.X';
exports.init = function (logger, config, cli) {
cli.addHook('build.pre.compile', function (data, finished) {
logger.log('modifying some code before build starts');
finished();
});
cli.addHook('build.post.compile', {
priority: 900,
post: function (data, finished) {
logger.log('packaging some extra files after the build');
finished();
}
});
cli.addHook('build.finalize', function (data, finished) {
logger.log('cleaning up my mess');
finished();
});
};
34. The New CLI Rocks
• Easy to install, easy to use
• Fast as shit
• Built-in documentation
• Extensible plugin architecture
• Consistent arguments
• Argument prompting
• Internationalization
• Colors!
35. Get It Today!
npm install -g titanium
titanium sdk install --branch 3_0_X --default
Note: may need to run npm as sudo
36. Chris Barber
@cb1kenobi
cbarber@appcelerator.com