Exploring the Titanium CLI - Codestrong 2012
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Exploring the Titanium CLI - Codestrong 2012

on

  • 7,231 views

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

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

Statistics

Views

Total Views
7,231
Views on SlideShare
6,459
Embed Views
772

Actions

Likes
13
Downloads
58
Comments
1

7 Embeds 772

http://www.ambientreality.com 746
https://twitter.com 19
https://si0.twimg.com 2
https://www.google.com 2
http://prlog.ru 1
http://translate.googleusercontent.com 1
http://news.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • for some reasons when i install it, i didnt get the version 3, and when i try to do anything like ' titanium skd ' i got ' unkown command sdk ' am using windows 7 with node 0.8.12 ..
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Who’s actually used the Python build scripts?
  • Who’s actually used the Python build scripts?
  • Just like ti studio

Exploring the Titanium CLI - Codestrong 2012 Presentation Transcript

  • 1. Exploring The New Titanium Command Line Interface Chris Barber Sr. Platform Lead Appcelerator @cb1kenobi cbarber@appcelerator.com
  • 2. Meet Chris • Chris Barber • JavaScript Team Lead • Mobile Web, CLI • @cb1kenobi
  • 3. Why Create a New CLI?
  • 4. Titanium 2.X CLI • Python 2.7 • Inconsistent • Poorly documented • Difficult to use • Even more difficult to maintain
  • 5. 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
  • 6. 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
  • 7. 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>]]]
  • 8. OK, We Need A New CLI
  • 9. 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
  • 10. Appc Node.js • JavaScript! • MIT License • Small size • No native dependencies • Package manager (npm) • Tons of great community modules
  • 11. Getting StartedInstalling the Titanium CLI
  • 12. First Things First • Node.js • 0.8 or newer • NPM
  • 13. Installation npm install -g titanium Note: may need to run as npm sudo
  • 14. Touring the CLIBuilt-in Commands
  • 15. Running The CLI chris@yojimbo:~$ titanium Titanium Command-Line Interface, version 3.0.10 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
  • 16. Help!titanium <cmd> -h chris@yojimbo:~$ titanium help config Titanium Command-Line Interface, version 3.0.10titanium <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
  • 17. Setup WizardBasic Setuptitanium setupAdvanced Setup • Initializes the CLI configurationtitanium setup -a chris@yojimbo:~$ titanium setup Titanium Command-Line Interface, version 3.0.10 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
  • 18. Manual ConfigurationGet All Valuestitanium configGet All User.* • Get and set config settingsSettingstitanium config user chris@yojimbo:~$ titanium configSet Android SDK Pathtitanium config android.ndkPath = "/opt/android-ndk" android.sdkPath android.sdkPath = "" “/path/to/sdk” app.idprefix = "com.appcelerator" app.publisher = "Appcelerator" app.sdk = "2.1.3.GA" app.url = "" app.workspace = "~/appc/workspace" cli.colors = true cli.failOnWrongSDK = false cli.logLevel = "trace" cli.prompt = true cli.quiet = false ios.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"
  • 19. AuthenticationLogging In chris@yojimbo:~$ titanium logintitanium login Titanium Command-Line Interface, version 3.0.10 <username> Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.Am I Logged In?titanium status Username: (cbarber@appcelerator.com) Password:Logging outtitanium logout Logged in successfully chris@yojimbo:~$ titanium status Titanium Command-Line Interface, version 3.0.10 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.10 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
  • 20. System Info chris@yojimbo:~$ titanium infoIncludes: Titanium Command-Line Interface, version 3.0.10• 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 ProfilesGet All Info My Provisioning Profile UUID = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXtitanium info App Prefix App Id = XXXXXXXXXX = com.appcelerator.* iOS Keychains System Default = System DefaultOS Info Only login.keychain = /Users/chris/Library/Keychains/login.keychain Microsoft_Intermediate_Certificates = /Users/chris/Library/Keychains/Microsoft_Intermediate_Certificatestitanium info -t os System.keychain = /Library/Keychains/System.keychain Titanium SDKs 2.1.3.GAiOS Info Only Install Location Platforms = /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.3.GA = android, iphone, mobileweb git Hash = unknowntitanium info -t ios git Timestamp = unknown Android Platforms android-8Android & Node.js Name API Level = Android 2.2 =8Info Only Revision Skins =3 = HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854titanium info -t ABIs Path = armeabi = /opt/android-sdk/platforms/android-8android,nodejs Android Add-ons Google Inc.:Google APIs:8 Name = Google APIs Vendor = Google Inc.Output as JSON Revision Description =2 = Android + Google APIstitanium 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)
  • 21. Modules & PluginsGet Installed Modules chris@yojimbo:~$ titanium moduletitanium module Titanium Command-Line Interface, version 3.0.10 Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.Get Installed ModulesIncluding a Projecttitanium module Global Modules –project-dir /path/to/project Android ti.cloudpush 2.0.7 /Users/chris/Library/Application Support/Titanium/modules/android/ti.cloudpush/2.0.7 CommonJS ti.cloud 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
  • 22. Modules & PluginsGet Installed Pluginstitanium pluginOutput as JSONtitanium plugin chris@yojimbo:~$ titanium plugin -o json Titanium Command-Line Interface, version 3.0.10 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
  • 23. Wait a sec…Where’s the create and build commands?
  • 24. Downloading An SDKList Intalled SDKs chris@yojimbo:~$ titanium sdktitanium sdk Titanium Command-Line Interface, version 3.0.10 Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.Install Latest 3.0titanium sdk install --branch 3_0_X Installed SDKs: --default 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.GAInstall Latest Stable 2.1.0.GA /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.1.0.GAtitanium sdk install 2.0.2.GA /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/2.0.2.GAInstall Latest Stable &Set as Default SDKtitanium sdk install --defaultInstall Bleeding Edge chris@yojimbo:~$ titanium sdk install --branch 3_0_X --defaulttitanium sdk install Titanium Command-Line Interface, version 3.0.10 --branch master Copyright (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!
  • 25. New Commands! chris@yojimbo:~$ titanium Titanium Command-Line Interface, version 3.0.10 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
  • 26. SDK Commandscreate, project, build, clean
  • 27. Creating a ProjectCreate a Project chris@yojimbo:~$ titanium createtitanium create Titanium Command-Line Interface, version 3.0.10 Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved.Create Project WithAll Argumentstitanium sdk create Target platforms: (android,ios,ipad,iphone,mobileweb) --id com.appc.myapp App ID: com.appcelerator.myapp --name myapp Project name: myapp --platformsandroid,iphone,ipad, [INFO] Creating Titanium Mobile application projectmobileweb [DEBUG] Copying /Users/chris/Library/Application --workspace-dir Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default => /path/to/workspace /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/a ndroid => /Users/chris/myapp/Resources/android [DEBUG] Copying /Users/chris/Library/Application Support/Titanium/mobilesdk/osx/3.0.0.v20121018214614/android/templates/app/default/Resources/a ndroid/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/a ndroid/images/res-notlong-port-mdpi => /Users/chris/myapp/Resources/android/images/res- notlong-port-mdpi [INFO] Project myapp created successfully in 32ms
  • 28. Getting Project InfoBasic Infotitanium projectCopy Platform • Tool for interacting with the tiapp.xmlResource Filestitanium project chris@yojimbo:~/myapp$ titanium project --deployment-targets Titanium Command-Line Interface, version 3.0.10 android,ios,mobileweb 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
  • 29. Building a ProjectPlatforms: chris@yojimbo:~/myapp$ titanium build --platform ios• iOS Titanium Command-Line Interface, version 3.0.10• 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 ...
  • 30. Cleaning the ProjectNuke All PlatformBuild Directoriestitanium clean • Completely removes the platform specific buildNuke a SpecificPlatform’s Build directoriesDirectorytitanium clean –platform android chris@yojimbo:~/myapp$ titanium clean Titanium Command-Line Interface, version 3.0.10 Copyright (c) 2012, Appcelerator, Inc. All Rights Reserved. [INFO] Project cleaned successfully in 1ms
  • 31. Extending the CLIPlugins, commands, and hooks
  • 32. 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>
  • 33. Sample Commandmyplugin/1.0/cli/com exports.cliVersion = >=3.X;mands/magic.js 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); };
  • 34. Sample Hookmyplugin/1.0/cli/hooks/my_build_hook.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(); }); };
  • 35. DemoKick the tires & light the fires
  • 36. What’s Next?
  • 37. // 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?
  • 38. SummaryJust in case you were sleeping
  • 39. 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!
  • 40. Get It Today! npm install -g titanium titanium sdk install --branch 3_0_X --default Note: may need to run npm as sudo
  • 41. Chris Barber @cb1kenobicbarber@appcelerator.com