Codestrong 2012 breakout session hacking titanium

  • 493 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
493
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
11
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Hacking Titanium David Bankier Director YY Digital @davidbankier david@yydigital.com
  • 2. Code is (mostly)evaluated at runtime
  • 3. TiHighlight tabGroup.setActiveTab(1); try { if(current && current.close !== undefined) { current.close(); } current = eval(message.code); if(current && current.open !== undefined) { tabGroup.activeTab.open(current); } } catch (e) { if(Ti.Platform.osname === android) { alert(e.toString()); } else { //iOS Error alert("Line: " + e.line + "n" + e.message); } }
  • 4. TiShadow websockets (socket.io) tishadow app tishadow TiSDK (partial) server node.js express socket.io Ace
  • 5. TiShadow try { if(current && current.close !== undefined) { current.close(); } current = eval(message.code); if(current && current.open !== undefined) { current.open(); } log.info("Deployed"); } catch (e) { log.error(utils.extractExceptionData(e)); } For More: Forging Titanium - Episode 23
  • 6. Code in Transit
  • 7. Cornwall $(#native).click(function() { Cornwall.execute(function() { Titanium.Contacts.showContacts({}); }); }); var start = new Date(); $(#variables).click(function() { var text = Hello World; Cornwall.execute(function(start, text) { alert("Started: " + start + "nText: " + text); },start, text); });
  • 8. Cornwallvar web_popup = function(a) { alert("Returned a from Native: " + a.a);};$(#bounce).click(function() { Cornwall.execute(function() { alert("Hello From Native"); Cornwall.callback(web_popup)({a: "A"}); });});
  • 9. CornwallCornwall.execute = function (fn, arg) { try { var args = []; for (var i = 1, length = arguments.length; i< length; i++) { args.push(arguments[i]); } Ti.App.fireEvent("cornwall:" + Cornwall.id, { fn: fn.toString(), args: args }); } catch (e) { alert(e); }}
  • 10. Cornwallfunction evalFn(o) { try{ eval("(" + o.fn.replace(/Cornwall.callback(([^)]*))/g, "(function(o) {__web.evalJS($1( + JSON.stringify(o) + ););})") + ")("+JSON.stringify(o.args).substring(1).replace("]","") +")"); } catch (e) { alert(e); }};
  • 11. Cornwallvar web_popup = function(a) { alert("Returned a from Native: " + a.a);};$(#bounce).click(function() { Cornwall.execute(function() { alert("Hello From Native"); Cornwall.callback(web_popup)({a: "A"}); });});
  • 12. Cornwall (function() { alert("Hello From Native"); Cornwall.callback(web_popup)({a: "A"}); })()
  • 13. Cornwallfunction evalFn(o) { try{ eval("(" + o.fn.replace(/Cornwall.callback(([^)]*))/g, "(function(o) {__web.evalJS($1( + JSON.stringify(o) + ););})") + ")("+JSON.stringify(o.args).substring(1).replace("]","") +")"); } catch (e) { alert(e); }};
  • 14. Cornwall (function() { alert("Hello From Native"); Cornwall.callback(web_popup)({a: "A"}); })()
  • 15. Cornwall (function() { alert("Hello From Native"); (function(o) { __web.evalJS(web_popup(+ JSON.stringify(o) + );); })({a: "A"}); })()
  • 16. Apps in Transit
  • 17. TiShadow • Bundles source and assets • Send bundle to device/s • Unpack • Execute
  • 18. Tweaking TiSDK • Allow require from the applicationDataDirectory • Do not cache CommonJS modules loaded from applicationDataDirectory For More: Commit: Allows CommonJS from applicationDataDirectory
  • 19. TiShadow websockets (socket.io) tishadow app TiSDK (partial) tishadow cli Built with Custom rewrites, bundles Titanium SDK and sends off your code.
  • 20. TiShadow 16 + fs.readFileSync(src).toString() 17.replace(/Ti(tanium)?.Filesystem.(resourcesDirectory|getResourcesDirectory())/g, "Ti.Filesystem.applicationDataDirectory + "+app_name.replace(//g,"_")+"/") Redirect Resources
  • 21. TiShadow18 .replace(/require(/g, "__p.require(") Redirect Require Function
  • 22. TiShadow20 .replace(/([ :=(])(["])/(.*?)(["])/g, "$1__p.file($2$3$4)") Redirect Assets
  • 23. TiShadow21 .replace(/Ti(tanium)?.API/g, "__log"); Redirect Logs
  • 24. TiShadow15 var src_text = "try { var __p = require(/api/PlatformRequire), __log =require(/api/Log), assert = require(/api/Assert), L =require(/api/Localisation).fetchString;n"//...26 src_text += } catch(e) { e.file=" + src + ";__log.error(require("/api/Utils").extractExceptionData(e)); }; Better Error Handling
  • 25. TiShadow19 .replace(/Ti.Locale.getString/g, "L”) Dynamic Localisation
  • 26. TiShadow 22 if (src.match("_spec.js$")) { 23 src_text = "var jasmine = require(/lib/jasmine-1.2.0);var methods =[spyOn,it,xit,expect,runs,waits,waitsFor,beforeEach,afterEach,describe,xdescribe];methods.forEach(function(method) {this[method] =jasmine[method];});" 24 +src_text; 25 } Fast(er) Testing Iterations
  • 27. #TiLondon websockets (socket.io) tishadow app TiSDK (partial) tishadow cli Built with Custom rewrites, bundles Titanium SDK and sends off your code.
  • 28. @TiLondon
  • 29. @Codestrong Coding on ANY device
  • 30. David Bankier @davidbankierdavid@yydigital.com
  • 31. Section Title SlidePrelude to nextsection
  • 32. Lorem Ipsum• Item 1 Lorem ipsum dolor sit• Item 2 amet, consectetur adipiscing elit. Morbi pretium scelerisque nisl, sit• Item 3 amet viverra mauris mollis nec.• Item 4 Aliquam sem sem, rutrum non• Item 5 pellentesque id, tempus sit amet nibh. Morbi nisi ante, elementum vel facilisis a, gravida eu libero. In eget porttitor.
  • 33. Lorem Ipsum • Item 1 • Item 2 • Item 3 • Item 4 • Item 5
  • 34. Lorem Ipsum • Item 1 • Item 2 • Item 3 • Item 4 • Highlight Item
  • 35. Lorem Ipsum • Item 1 • Item 2 • Item 3 • Item 4 • Item 5
  • 36. Lorem Ipsum • Item 1 • Item 2 • Item 3 • Item 4 • Item 5
  • 37. Lorem Ipsum Jeff Haynie “Appcelerator Titanium is the first CEO & Co-founder Appcelerator mobile platform to combine the flexibility of open source development technologies with the power of cloud services.”