Codestrong 2012 breakout session hacking titanium

  • View
    573

  • Download
    2

Embed Size (px)

Text of Codestrong 2012 breakout session hacking titanium

  • 1.Hacking Titanium David BankierDirector YY Digital @davidbankier david@yydigital.com

2. Code is (mostly)evaluated at runtime 3. TiHighlighttabGroup.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 expresssocket.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 theapplicationDataDirectory Do not cache CommonJSmodules loaded fromapplicationDataDirectory For More: Commit: Allows CommonJS from applicationDataDirectory 19. TiShadowwebsockets(socket.io)tishadow app TiSDK (partial)tishadow cliBuilt with Custom rewrites, bundlesTitanium SDKand 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) TestingIterations 27. #TiLondonwebsockets(socket.io)tishadow app TiSDK (partial)tishadow cliBuilt with Custom rewrites, bundlesTitanium SDKand sends off your code. 28. @TiLondon 29. @CodestrongCoding on ANYdevice 30. David Bankier@davidbankierdavid@yydigital.com 31. Section Title SlidePrelude to nextsection 32. Lorem Ipsum Item 1Lorem ipsum dolor sit Item 2amet, consectetur adipiscing elit.Morbi pretium scelerisque nisl, sit Item 3amet viverra mauris mollis nec. Item 4Aliquam sem sem, rutrum non Item 5pellentesque id, tempus sit ametnibh. Morbi nisi ante, elementum velfacilisis a, gravida eu libero. In egetporttitor. 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 firstCEO & Co-founderAppcelerator mobile platform to combine the flexibility of open source development technologies with the power of cloud services.