41
Exploring The New Titanium Command Line Interface Chris Barber Sr. Platform Lead Appcelerator @cb1kenobi [email protected]

Exploring the Titanium CLI - Codestrong 2012

Embed Size (px)

DESCRIPTION

I gave this presentation on Oct 23, 2012 at Appcelerator's annual Codestrong conference.

Citation preview

Page 1: Exploring the Titanium CLI - Codestrong 2012

Exploring The New Titanium Command Line Interface

Chris BarberSr. Platform Lead

Appcelerator@cb1kenobi

[email protected]

Page 2: Exploring the Titanium CLI - Codestrong 2012

Meet Chris

• Chris Barber

• JavaScript Team Lead

• Mobile Web, CLI

• @cb1kenobi

Page 3: Exploring the Titanium CLI - Codestrong 2012

Why Create a New CLI?

Page 4: Exploring the Titanium CLI - Codestrong 2012

Titanium 2.X CLI

• Python 2.7

• Inconsistent

• Poorly documented

• Difficult to use

• Even more difficult to maintain

Page 5: Exploring the Titanium CLI - Codestrong 2012

Project Creation

chris@yojimbo:~$ python /Users/chris/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/project.py

Usage: project.py <name> <id> <directory> [iphone,android,mobileweb] [android_sdk] [--update-platforms]

Options: -h, --help show this help message and exit -u, --update-platforms Initialize project for any missing platforms. Use this to add a platform to the project without overwriting tiapp.xml and app.js.

chris@yojimbo:~$ python /Users/chris/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/project.py myapp com.mycompany.myapp . foo

Page 6: Exploring the Titanium CLI - Codestrong 2012

Build iOS App

chris@yojimbo:~$ python /Users/chris/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/iphone/builder.py

builder.py <command> <version> <project_dir> <appid> <name> [options]

available commands:

install install the app to itunes for testing on iphone simulator build and run on the iphone simulator adhoc build for adhoc distribution distribute build final distribution bundle xcode build from within xcode run build and run app from project folder

Page 7: Exploring the Titanium CLI - Codestrong 2012

Build iOS App

chris@yojimbo:~$ python /Users/chris/Library/Application\ Support/Titanium/mobilesdk/osx/2.1.3.GA/iphone/builder.py simulator

[INFO] One moment, building ...Traceback (most recent call last): File "/Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA/iphone/builder.py", line 1594, in <module> main(sys.argv) File "/Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA/iphone/builder.py", line 608, in main iphone_version = dequote(args[2].decode("utf-8"))IndexError: list index out of range

builder.py simulator <ios-version> <project-dir> <id> <name> [<device-family> [<sim-type> [<debug-host>]]]

Page 8: Exploring the Titanium CLI - Codestrong 2012

OK, We Need A New CLI

Page 9: Exploring the Titanium CLI - Codestrong 2012

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

Page 10: Exploring the Titanium CLI - Codestrong 2012

Appc ♥ Node.js

• JavaScript!

• MIT License

• Small size

• No native dependencies

• Package manager (npm)

• Tons of great community modules

Page 11: Exploring the Titanium CLI - Codestrong 2012

Getting Started

Installing the Titanium CLI

Page 12: Exploring the Titanium CLI - Codestrong 2012

First Things First

• Node.js• 0.8 or newer

• NPM

Page 13: Exploring the Titanium CLI - Codestrong 2012

Installation

Note: may need to run as npm sudo

npm install -g titanium

Page 14: Exploring the Titanium CLI - Codestrong 2012

Touring the CLI

Built-in Commands

Page 15: Exploring the Titanium CLI - Codestrong 2012

Running The CLI

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

Page 16: Exploring the Titanium CLI - Codestrong 2012

Help!

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

Page 17: Exploring the Titanium CLI - Codestrong 2012

Setup Wizard

• Initializes the CLI configuration

chris@yojimbo:~$ titanium setupTitanium Command-Line Interface, version 3.0.10Copyright (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? ([email protected]) 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

Page 18: Exploring the Titanium CLI - Codestrong 2012

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 = "[email protected]"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”

Page 19: Exploring the Titanium CLI - Codestrong 2012

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.10Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

Username: ([email protected]) 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.10Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.

You are currently logged in as [email protected]

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

Logged out successfully

Page 20: Exploring the Titanium CLI - Codestrong 2012

System Info

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

Page 21: Exploring the Titanium CLI - Codestrong 2012

Modules & Plugins

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

Global Modules

Android ti.cloudpush 2.0.7 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.7 CommonJS ti.cloudcommonjs/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

Page 22: Exploring the Titanium CLI - Codestrong 2012

Modules & Plugins

Get Installed Pluginstitanium plugin

Output as JSONtitanium plugin -o json

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

Page 23: Exploring the Titanium CLI - Codestrong 2012

Wait a sec…

Where’s the create and build commands?

Page 24: Exploring the Titanium CLI - Codestrong 2012

Downloading An SDK

chris@yojimbo:~$ titanium sdkTitanium Command-Line Interface, version 3.0.10Copyright (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.10Copyright (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!

Page 25: Exploring the Titanium CLI - Codestrong 2012

New Commands!

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

Page 26: Exploring the Titanium CLI - Codestrong 2012

SDK Commands

create, project, build, clean

Page 27: Exploring the Titanium CLI - Codestrong 2012

Creating a Project

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

Page 28: Exploring the Titanium CLI - Codestrong 2012

Getting Project Info

• Tool for interacting with the tiapp.xml

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

Page 29: Exploring the Titanium CLI - Codestrong 2012

Building a Project

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

Page 30: Exploring the Titanium CLI - Codestrong 2012

Cleaning the Project

• Completely removes the platform specific build directories

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

Page 31: Exploring the Titanium CLI - Codestrong 2012

Extending the CLI

Plugins, commands, and hooks

Page 32: Exploring the Titanium CLI - Codestrong 2012

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>

Page 33: Exploring the Titanium CLI - Codestrong 2012

Sample Command

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

myplugin/1.0/cli/commands/magic.js

Page 34: Exploring the Titanium CLI - Codestrong 2012

Sample Hook

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

myplugin/1.0/cli/hooks/my_build_hook.js

Page 35: Exploring the Titanium CLI - Codestrong 2012

Demo

Kick the tires & light the fires

Page 36: Exploring the Titanium CLI - Codestrong 2012

What’s Next?

Page 37: Exploring the Titanium CLI - Codestrong 2012

// TODO:

• More plugin hooks• Project creation, chaging project settings, etc

• Project exporting & migration tools

• Better support for multiple Titanium SDKs

• What would you like to see?

Page 38: Exploring the Titanium CLI - Codestrong 2012

Summary

Just in case you were sleeping

Page 39: Exploring the Titanium CLI - Codestrong 2012

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!

Page 40: Exploring the Titanium CLI - Codestrong 2012

Get It Today!

Note: may need to run npm as sudo

npm install -g titanium

titanium sdk install --branch 3_0_X --default

Page 41: Exploring the Titanium CLI - Codestrong 2012

Chris Barber@cb1kenobi

[email protected]