codestrong 2012 breakout session exploring the new titanium command line interface (cli)

Post on 09-May-2015

894 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Exploring The New Titanium Command Line Interface

Chris BarberSr. Platform Lead

Appcelerator@cb1kenobi

cbarber@appcelerator.com

About Me

• Chris Barber

• JavaScript Team Lead

• Mobile Web, CLI

• @cb1kenobi

Why Create a New CLI?

If it ain’t broke, don’t fix it

Old School

• Python 2.7.x

• Poorly documented

• Difficult to maintain

• Inconsistent arguments

• Rigid plugin system

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

Appc ♥ Node.js

• JavaScript!

• MIT License

• Small size

• No native dependencies

• Package manager (npm)

• Tons of great community modules

Getting Started

Installing the Titanium CLI

First Things First

• Node.js• 0.8 or newer

• NPM

Installation

Note: may need to run as npm sudo

npm install -g titanium

Touring the CLI

Built-in Commands

Running The CLI

chris@yojimbo:~$ titaniumTitanium Command-Line Interface, version 3.0.7Copyright (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

Help!

chris@yojimbo:~$ titanium help configTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

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

titanium <cmd> -h

titanium <cmd> --help

titanium help <cmd>

Setup Wizard

• Initializes the CLI configuration

chris@yojimbo:~$ titanium setupTitanium Command-Line Interface, version 3.0.7Copyright (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

Basic Setuptitanium setup

Advanced Setuptitanium setup -a

Manual Configuration

• Get and set config settings

chris@yojimbo:~$ titanium configandroid.ndkPath = "/opt/android-ndk"android.sdkPath = ""app.idprefix = "com.appcelerator"app.publisher = "Appcelerator"app.sdk = "2.1.3.GA"app.url = ""app.workspace = "~/appc/workspace"cli.colors = truecli.failOnWrongSDK = falsecli.logLevel = "trace"cli.prompt = truecli.quiet = falseios.developerName = "Chris Barber"ios.distributionName = "Appcelerator, Inc."paths.commands = []paths.hooks = []paths.plugins = ["~/appc/ti.alloy"]user.email = "cbarber@appcelerator.com"user.locale = "en-us"user.name = "Chris Barber"

Get All Valuestitanium config

Get All User.* Settingstitanium config user

Set Android SDK Pathtitanium config android.sdkPath “/path/to/sdk”

Authentication

• Required for most commands

• Adds your app to my.appcelerator.com

• Username is your e-mail address

chris@yojimbo:~$ titanium loginTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Username: (cbarber@appcelerator.com) Password:

Logged in successfully

Logging Intitanium login <username>

Am I Logged In?titanium status

Logging outtitanium logout

chris@yojimbo:~$ titanium statusTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

You are currently logged in as cbarber@appcelerator.com

chris@yojimbo:~$ titanium logoutTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Logged out successfully

System Info

chris@yojimbo:~$ titanium infoTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Operating System Name = Mac OS X Version = 10.8.2 Memory = 16.0GB node.js node.js Version = v0.8.12 npm Version = 1.1.63 Xcode4.4.1 (build 4F1003) Install Location = /Applications/Xcode44.app/Contents/Developer iOS SDKs = 5.1 iOS Simulators = 5.0, 5.14.5 (build 4G182) Install Location = /Applications/Xcode45.app/Contents/Developer iOS SDKs = 6.0 iOS Simulators = 5.0, 5.1, 6.0 iOS Certificates Development = Chris Barber (XXXXXXXXXX) Distribution = Appcelerator, Inc. Apple WWDR = installed Development iOS Provisioning ProfilesMy Provisioning Profile UUID = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX App Prefix = XXXXXXXXXX App Id = com.appcelerator.*

iOS Keychains System Default = System Default login.keychain = /Users/chris/Library/Keychains/login.keychain Microsoft_Intermediate_Certificates = /Users/chris/Library/Keychains/Microsoft_Intermediate_Certificates System.keychain = /Library/Keychains/System.keychain Titanium SDKs2.1.3.GA Install Location = /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA Platforms = android, iphone, mobileweb git Hash = unknown git Timestamp = unknown

Android Platformsandroid-8 Name = Android 2.2 API Level = 8 Revision = 3 Skins = HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854 ABIs = armeabi Path = /opt/android-sdk/platforms/android-8

Android Add-onsGoogle Inc.:Google APIs:8 Name = Google APIs Vendor = Google Inc. Revision = 2 Description = Android + Google APIs Skins = WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800 (default), QVGA ABIs = 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)

Includes:• OS info• node.js & npm• Xcode versions• iOS SDKs &

simulators• iOS provisioning

profiles & keychains

• Titanium SDKs• Android SDKs,

addons, and AVDs

Get All Infotitanium info

OS Info Onlytitanium info -t os

iOS Info Onlytitanium info -t ios

Android & Node.js Info Onlytitanium info -t android,nodejs

Output as JSONtitanium info -o json

Modules & Plugins

chris@yojimbo:~$ titanium moduleTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Global Modules

Android ti.cloudpush 2.0.5 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.5 2.0.7 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.7 CommonJS ti.cloud 2.1.0 /Users/chris/Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.1.0 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 2.0.5 /Library/Application Support/Titanium/modules/commonjs/ti.cloud/2.0.5 iPhone ti.jira 1.0 /Users/chris/Library/Application Support/Titanium/modules/iphone/ti.jira/1.0 Mobile Web ti.oldmodule 0.1 /Users/chris/Library/Application Support/Titanium/modules/mobileweb/ti.oldmodule/0.1

Get Installed Modulestitanium module

Get Installed Modules Including a Projecttitanium module –project-dir /path/to/project

Get Installed Pluginstitanium plugin

Output as JSONtitanium plugin -o json

chris@yojimbo:~$ titanium pluginTitanium Command-Line Interface, version 3.0.7Copyright (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

Wait!

Where’s the create and build commands?

Downloading An SDK

chris@yojimbo:~$ titanium sdkTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Installed SDKs: 2.1.3.GA [default] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA 2.1.2.GA /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.2.GA 2.1.0.GA /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.0.GA 2.0.2.GA /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.0.2.GA

List Intalled SDKstitanium sdk

Install Latest 3.0titanium sdk install --branch 3_0_X --default

Install Latest Stabletitanium sdk install

Install Latest Stable & Set as Default SDKtitanium sdk install --default

Install Bleeding Edgetitanium sdk install --branch master

chris@yojimbo:~$ titanium sdk install --branch 3_0_X --defaultTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Downloading http://builds.appcelerator.com.s3.amazonaws.com/mobile/3_0_X/mobilesdk-3.0.0.v20121018214614-osx.zip 100% [=================================================================] 0.0s

Extracting SDK...

Saving SDK 3.0.0.v20121018214614 as the default.Titanium SDK 3.0.0.v20121018214614 successfully installed!

New Commands!

chris@yojimbo:~$ titaniumTitanium Command-Line Interface, version 3.0.7Copyright (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

SDK Commands

create, project, build, clean

Creating a Project

chris@yojimbo:~$ titanium createTitanium Command-Line Interface, version 3.0.7Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Target platforms: (android,ios,ipad,iphone,mobileweb) App ID: com.appcelerator.myappProject name: myapp

[INFO] Creating Titanium Mobile application project[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default => /Users/chris/myapp[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources => /Users/chris/myapp/Resources[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android => /Users/chris/myapp/Resources/android[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images => /Users/chris/myapp/Resources/android/images[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-long-land-hdpi => /Users/chris/myapp/Resources/android/images/res-long-land-hdpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-long-land-ldpi => /Users/chris/myapp/Resources/android/images/res-long-land-ldpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-long-port-hdpi => /Users/chris/myapp/Resources/android/images/res-long-port-hdpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-long-port-ldpi => /Users/chris/myapp/Resources/android/images/res-long-port-ldpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-land-hdpi => /Users/chris/myapp/Resources/android/images/res-notlong-land-hdpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-land-ldpi => /Users/chris/myapp/Resources/android/images/res-notlong-land-ldpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-land-mdpi => /Users/chris/myapp/Resources/android/images/res-notlong-land-mdpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-port-hdpi => /Users/chris/myapp/Resources/android/images/res-notlong-port-hdpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-port-ldpi => /Users/chris/myapp/Resources/android/images/res-notlong-port-ldpi[DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/android/images/res-notlong-port-mdpi => /Users/chris/myapp/Resources/android/images/res-notlong-port-mdpi[INFO] Project 'myapp' created successfully in 32ms

Create a Projecttitanium create

Create Project With All Argumentstitanium sdk create --id com.appc.myapp --name myapp --platforms android,iphone,ipad,mobileweb --workspace-dir /path/to/workspace

Getting Project Info

• Tool for interacting with the tiapp.xml

chris@yojimbo:~/myapp$ titanium projectTitanium Command-Line Interface, version 3.0.7Copyright (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

Basic Infotitanium project

Copy Platform Resource Filestitanium project --deployment-targets android,ios,mobileweb

Building a Project

chris@yojimbo:~/myapp$ titanium build --platform iosTitanium Command-Line Interface, version 3.0.6Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

[DEBUG] No project level plugins to load[DEBUG] Loaded plugin hooks:[DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/cli/hooks/plugins.js[DEBUG] /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.1.0/iphone/cli/hooks/install.js[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[INFO] Build type: development[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

...

Platforms:• iOS• Mobile Web• Android

Special Hooks:• Run in Simulator• Install on Device• Package for

Distribution

Cleaning the Project

• Completely removes the platform specific build directories

chris@yojimbo:~/myapp$ titanium cleanTitanium Command-Line Interface, version 3.0.6Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

[INFO] Project cleaned successfully in 1ms

Nuke All Platform Build Directoriestitanium clean

Nuke a Specific Platform’s Build Directorytitanium clean –platform android

Extending the CLI

Plugins, commands, and hooks

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>

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);};

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(); });};

Demo

Kick the tires & light the fires

What’s Next?

// TODO:

• More plugin hooks

• Project exporting & migration tools

• Better support for multiple Titanium SDKs

• What would you like to see?

Summary

Just in case you were sleeping

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!

Get It Today!

Note: may need to run npm as sudo

npm install -g titanium

titanium sdk install --branch 3_0_X --default

Chris Barber@cb1kenobi

cbarber@appcelerator.com

top related