SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Develop your first mobile App
    for iOS and Android!
    Ricardo Alcocer // Platform Evangelist!
                   March 12, 2013!
         Silicon Valley Titanium User Group!
!
Format of this talk!
Our objective for today!


      !
BUILD AN APP!
Base assumptions!

•  You are not a “hardcore coder”!
•  You know how to build websites with
   HTML and CSS!
•  You have seen at least a little bit of
   Javascript!
About Appcelerator Titanium!

         •  Not a language, but a high-level
            Javascript SDK!
         •  Allows you build Native Apps for
            iOS (iPhone, iPod Touch, iPad),
            Android (Phone and Tablet),
            Mobile Web, Blackberry 10 (beta),
            soon for Windows 8 and Tizen!
         •  Free/Open Source!!
         •  It’s Native, NOT web app !
The design of your App is

                            SUPER important!



                 If the users don't like how
                      your App LOOKS !
                               !
                      they will delete it!!


h"p://www.itexico.com/blog/bid/91499/Why-­‐your-­‐Mobile-­‐App-­‐s-­‐UX-­‐UI-­‐must-­‐be-­‐Awesome	
  
h"p://blog.planetargon.com/entries/2010/3/1/designer-­‐vs-­‐developer	
  
Harmony between design and functionalities!
The MVC Pattern!
                                                                         JS	
  
                                               Model	
  


                           XML	
                                        JS	
  

       View	
               TSS	
         Controller	
  



User	
  Interface	
  Components	
     Invisible	
  to	
  the	
  end-­‐user	
  
Designers and developers can now get along!




h"p://images.elephantjournal.com/wp-­‐content/uploads/2012/01/dog-­‐and-­‐cat-­‐sleeping-­‐together.jpg	
  
Download Titanium Studio!
Make sure you download Studio!
Configure platform SDKs!




SDKs	
  allow	
  you	
  to	
  compile	
  with	
  the	
  naRve	
  tools	
  and	
  provide	
  you	
  with	
  Phone	
  Simulators	
  for	
  tesRng	
  
Success!!
Now you can follow the “Quick Start
          Guide”, or….!
…you can try to fly!




h"p://amazingjpg.blogspot.com/2012/11/reckless-­‐abandon-­‐photo-­‐by-­‐peter-­‐brannon.html	
  
Titanium is very powerful, so better get
                   your training wheels on!




h"p://www.justsaypictures.com/images/training-­‐wheels-­‐01.jpg	
  
Let’s build a “Jokes” App!
Let’s create a new project!
Select Titanium Project!
Select Alloy as your Titanium Project
                 Type!
Configure your project!


                Name	
  for	
  your	
  App   	
  



                In	
  reverse	
  URL	
  format:	
  ie.	
  (com.mycompany.myapp)        	
  	
  

                Select	
  target	
  plaYorms	
  for	
  this	
  project   	
  



                Are	
  you	
  using	
  Appcelerator	
  Cloud	
  Services?       	
  
Titanium Studio!
These	
  one	
  implement	
  funcRonaliRes	
  	
  
                and	
  interacRvity	
  


                We	
  won’t	
  look	
  at	
  these	
  


                These	
  two	
  work	
  together	
  to	
  build	
  UI	
  




Remember?	
  
Running an App!


             You’ll	
  only	
  see	
  the	
  target	
  
             plaYorms	
  you	
  explicitly	
  	
  
             configured	
  
             	
  
             iPhone	
  is	
  only	
  available	
  on	
  Mac	
  
             Android	
  is	
  available	
  on	
  Win,	
  
             Mac	
  and	
  Linux	
  
Default App running on iPhone Simulator!
Default index.xml!



<Alloy>	
  
	
  	
  	
  <Window	
  class="container">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="label"	
  onClick="doClick">Hello,	
  World</Label>	
  
	
  	
  	
  </Window>	
  
</Alloy>	
  
Objects in index.xml!



<Alloy>	
  
	
  	
  	
  <Window	
  class="container">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="label"	
  onClick="doClick">Hello,	
  World</Label>	
  
	
  	
  	
  </Window>	
  
</Alloy>	
  
index.xml + index.tss working together!

XML	
  
<Alloy>	
  
	
  	
  	
  <Window	
  class="container">	
  
	
  	
  	
  	
  	
  	
  <Label	
  id="label"	
  onClick="doClick">Hello,	
  World</Label>	
  
	
  	
  	
  </Window>	
  
</Alloy>	
  




TSS	
  
  ".container":	
  {	
  
  	
  	
  	
  backgroundColor:"white"	
  
  },	
  
  "Label":	
  {	
  
  	
  	
  	
  width:	
  Ti.UI.SIZE,	
  
  	
  	
  	
  height:	
  Ti.UI.SIZE,	
  
  	
  	
  	
  color:	
  "#000"	
  
  }	
  
!
Enough of the basics.
  Let’s get started!!
Back to our “Jokes” App!
Thinking as a Web developer!

                                     PAGE	
  



                                      DIV	
  

                 DIV	
                 DIV	
  


                                      DIV	
  
                                       DIV	
  
                 DIV	
  
                           DIV	
          DIV	
  
Thinking as a Web developer!

                           PAGE	
  



                            DIV	
  

                 DIV	
       DIV	
  




                           DIV	
  
Native iOS and Andoroid UI Elements!




h"p://www.teehanlax.com/blog/ios-­‐6-­‐gui-­‐psd-­‐iphone-­‐5/	
  




                                                                     h"p://www.teehanlax.com/blog/android-­‐2-­‐3-­‐4-­‐gui-­‐psd-­‐high-­‐density/	
  
Titanium allows you to use native
                         platform elements!




h"p://docs.appcelerator.com/Rtanium/3.0/#!/api	
  
The vocabulary is well documented!




  h"p://docs.appcelerator.com/Rtanium/3.0/#!/api/Titanium.UI.Window	
  
In Titanium Terms!

                                    Window	
  

                                                VIEW	
  

                       VIEW	
                   VIEW	
  


                       TableView	
  

                                     VIEW	
  

            VIEW	
  
                                      VIEW	
  
                         VIEW	
          VIEW	
  
In Titanium Terms!

                       WINDOW	
  



                        VIEW	
  

            VIEW	
       VIEW	
  




                        VIEW	
  
Building the App Structure (XML)!
                                                                                                      Expected	
  Result	
  
<Alloy>	
  
	
  	
  <Window	
  class="container">	
  
	
  	
  	
  	
  <View	
  id="header">	
  
	
  	
  	
  	
  	
  	
  <View	
  id="appicon"></View>	
  
	
  	
  	
  	
  	
  	
  <Label	
  id="apptitle">Funny	
  Stuff</Label>	
  
	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  <TableView	
  id="mainlist">	
  
	
  	
  	
  	
  	
  	
  <TableViewRow	
  id="listrow">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowContainer">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowIcon"></View>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTitle">Some	
  Title</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowTypeContainer">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTypeCaption">Type:</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTypeData">Some	
  Type</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  	
  	
  </TableViewRow>	
  
	
  	
  	
  	
  </TableView>	
  
	
  	
  </Window>	
  
</Alloy>	
  
Building the App Structure (XML)!
                                                                                                      Expected	
  Result	
  
<Alloy>	
  
	
  	
  <Window	
  class="container">	
  
	
  	
  	
  	
  <View	
  id="header">	
  
	
  	
  	
  	
  	
  	
  <View	
  id="appicon"></View>	
  
	
  	
  	
  	
  	
  	
  <Label	
  id="apptitle">Funny	
  Stuff</Label>	
  
	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  <TableView	
  id="mainlist">	
  
	
  	
  	
  	
  	
  	
  <TableViewRow	
  id="listrow">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowContainer">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowIcon"></View>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTitle">Some	
  Title</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <View	
  id="rowTypeContainer">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTypeCaption">Type:</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <Label	
  id="rowTypeData">Some	
  Type</Label>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </View>	
  
	
  	
  	
  	
  	
  	
  </TableViewRow>	
  
	
  	
  	
  	
  </TableView>	
  
	
  	
  </Window>	
  
</Alloy>	
  
Hey! That’s not what I wanted!




We	
  need	
  to	
  apply	
  styling	
  to	
  the	
  elements.	
  	
  Let’s	
  start	
  with	
  container	
  and	
  header	
  
Styling the main “container” and
                         “header”!


".container":	
  {	
  
	
  	
  backgroundColor:"white",	
  
	
  	
  layout:	
  'vertical'	
  
},	
  
"#header":{	
  
	
  	
  height:	
  "50dp",	
  
	
  	
  backgroundColor:	
  "blue"	
  
}	
  




Next:	
  the	
  “appicon”	
  area	
  
Styling the “appicon”!



"#appicon":{	
  
	
  	
  width:	
  "50dp",	
  
	
  	
  height:	
  "50dp",	
  
	
  	
  left:	
  "0",	
  
	
  	
  backgroundColor:	
  "#fff"	
  
}	
  




Next:	
  let’s	
  specify	
  a	
  height	
  for	
  the	
  “rowContainer”	
  
The App so far!



     "#rowContainer":{	
  
           	
  height:	
  "60dp"	
  
     }	
  




Next:	
  the	
  “rowIcon”	
  area	
  
The App so far!



  "#rowIcon":{	
  
        	
  	
  lek:	
  “5dp”,	
  
        	
  	
  height:	
  "50dp",	
  
        	
  	
  width:	
  "50dp",	
  
        	
  	
  backgroundColor:	
  "red	
  "	
  
  }	
  


Next:	
  the	
  rest	
  of	
  the	
  elements	
  in	
  the	
  “rowContainer”	
  
The App so far!
 "#rowTitle":{	
  
 	
     	
  lek:	
  "60dp",	
  
        	
  	
  top:	
  "5dp",	
  
        	
  	
  width:	
  Ti.UI.SIZE,	
  
 },	
  
 "#rowTypeContainer":{	
  
        	
  	
  bo"om:	
  "5dp",	
  
        	
  	
  height:	
  "20dp",	
  
        	
  	
  width:	
  Ti.UI.SIZE,	
  
        	
  	
  layout:	
  "horizontal",	
  
        	
  	
  lek:	
  "60dp"	
  
 },	
  
 "#rowTypeCapRon":{	
  
        	
  	
  height:	
  Ti.UI.SIZE,	
  
        	
  	
  width:	
  Ti.UI.SIZE	
  
 },	
  
 "#rowTypeData":{	
  
        	
  	
  height:	
  Ti.UI.SIZE,	
  
        	
  	
  width:	
  Ti.UI.SIZE	
  
 }	
  


Next:	
  some	
  colors	
  on	
  the	
  row	
  elements	
  
The App so far!
"#rowTypeCapRon":{	
  
	
       	
  height:	
  Ti.UI.SIZE,	
  
	
       	
  width:	
  Ti.UI.SIZE,	
  
	
       	
  font:	
  {	
  
	
  	
   	
            	
  fontSize:	
  "12dp"	
  
         	
  	
  }	
  
},	
  
"#rowTypeData":{	
  
         	
  	
  height:	
  Ti.UI.SIZE,	
  
         	
  	
  width:	
  Ti.UI.SIZE,	
  
         	
  	
  font:	
  {	
  
	
  	
   	
            	
  fontSize:	
  "12dp"	
  
         	
  	
  }	
  
}	
  


Next:	
  some	
  colors	
  on	
  the	
  “header”	
  area	
  
The App so far!


 "#header":{	
  
 	
       	
  height:	
  "50dp",	
  
          	
  	
  backgroundColor:	
  "#4698D6"	
  
 },	
  
 "#appRtle":{	
  
 	
       	
  font:	
  {	
  
 	
  	
   	
             	
  fontSize:	
  "20dp",	
  
          	
             	
  fontWeight:	
  "bold"	
  
          	
  	
  },	
  
          	
  	
  color:	
  "#fff"	
  
 }	
  
 	
  


Next:	
  	
  more	
  styling	
  on	
  the	
  table	
  rows	
  
The App so far!


"#rowContainer":{	
  
	
    	
  height:	
  "60dp",	
  
      	
  top:	
  "5dp",	
  
	
    	
  right:	
  "5dp",	
  
	
    	
  bo"om:	
  "5dp",	
  
	
    	
  lek:	
  "5dp",	
  
	
    	
  borderWidth:	
  1,	
  
	
    	
  borderColor:	
  "#cacaca",	
  
	
    	
  borderRadius:	
  5	
  
}	
  
	
  



Next:	
  some	
  more	
  colors	
  on	
  the	
  table	
  row	
  	
  
The App so far!
 "#rowContainer":{	
  
 	
       	
  height:	
  "60dp",	
  
 	
       	
  top:	
  "5dp",	
  
          	
  right:	
  "5dp",	
  
 	
       	
  bo"om:	
  "5dp",	
  
 	
       	
  lek:	
  "5dp",	
  
 	
       	
  backgroundColor:	
  "#f9f9f9",	
  
 	
       	
  borderWidth:	
  1,	
  
 	
       	
  borderColor:	
  "#cacaca",	
  
 	
       	
  borderRadius:	
  5	
  
 },	
  
 "#rowTypeCapRon":{	
  
 	
       	
  height:	
  Ti.UI.SIZE,	
  
 	
       	
  width:	
  Ti.UI.SIZE,	
  
 	
       	
  font:	
  {	
  
 	
  	
   	
            	
  fontSize:	
  "12dp",	
  
 	
  	
   	
            	
  fontWeight:	
  "bold"	
  
 	
       	
  },	
  
 	
       	
  color:	
  "#B73B22"	
  
 }	
  
 	
  
Next:	
  the	
  icon	
  on	
  the	
  row	
  
The App so far!




   Images	
  live	
  inside	
  the	
  /assets	
  folder.	
  


 We’ll	
  make	
  this	
  change	
  on	
  the	
  XML,	
  so	
  we	
  can	
  
 assign	
  different	
  images	
  to	
  each	
  row:	
  

 <View	
  id="rowIcon"	
  backgroundImage="/happyface.png"></View>	
  




Next:	
  the	
  icon	
  on	
  the	
  “header”	
  
The App so far!



 "#appicon":{	
  
 	
    	
  width:	
  "50dp",	
  
 	
    	
  height:	
  "50dp",	
  
 	
    	
  lek:	
  "0",	
  
 	
    	
  backgroundImage:	
  "/topicon.png"	
  
 }	
  
 	
  




Finally:	
  some	
  real	
  data	
  on	
  the	
  table	
  row	
  
The App so far!
Go	
  to	
  your	
  index.xml	
  file	
  and	
  change	
  the	
  placeholder	
  data	
  

<TableViewRow	
  id="listrow">	
  
                         	
  <View	
  id="rowContainer">	
  
	
  	
  	
  	
   	
                           	
  <View	
  id="rowIcon"	
  backgroundImage="/happyface.png"></View>	
  
                         	
  	
  	
  	
  	
   	
  <Label	
  id="rowTitle">Why	
  did	
  the	
  turkey	
  cross	
  the	
  road?</Label>	
  
	
  	
  	
  	
   	
                           	
  <View	
  id="rowTypeContainer">	
  
	
  	
  	
  	
  	
  	
   	
                   	
       	
  <Label	
  id="rowTypeCapRon">Type:</Label>	
  
	
  	
  	
  	
  	
  	
   	
                   	
       	
  <Label	
  id="rowTypeData">Joke</Label>	
  
	
  	
  	
  	
   	
                           	
  </View>	
  
	
  	
                   	
  </View>	
  
</TableViewRow>	
  




   To	
  add	
  more	
  rows,	
  copy	
  and	
  paste	
  this	
  code	
  block!	
  
The finalized main screen!!
The App so far!
Use	
  the	
  same	
  procedure	
  to	
  create	
  the	
  template	
  for	
  
the	
  second	
  page.	
  	
  I’ll	
  leave	
  that	
  to	
  you	
  



TIPS:	
  	
  
	
  
1.  In	
  Studio,	
  right-­‐click	
  in	
  the	
  files	
  area,	
  select	
  New	
  >	
  
     Alloy	
  Controller	
  

2.  You	
  could	
  move	
  ALL	
  your	
  TSS	
  to	
  “app.tss”.	
  	
  This	
  is	
  
     a	
  global	
  file	
  that	
  holds	
  styling	
  that	
  will	
  be	
  shared	
  
     by	
  all	
  screens	
  
	
  
A little bit of code to link both files (1/4)!

The	
  index.xml	
  file	
  needs	
  to	
  know	
  what	
  to	
  do	
  when	
  you	
  click	
  on	
  the	
  rows	
  




     <TableView	
  id="mainlist"	
  onClick="onTableClick">	
  
         	
  <TableViewRow	
  id="listrow"	
  ezawin="turkeycrossing">	
  
         	
      	
  	
  


                                                             The	
  name	
  of	
  a	
  previously	
  created	
  XML	
  file	
  
A little bit of code to link both files (2/4)!

The	
  index.js	
  needs	
  to	
  define	
  the	
  acRon	
  for	
  onTableClick	
  


                              var	
  ezR=require('ezR');	
  
                              	
  
                              funcRon	
  onTableClick(e){	
  
                                      	
  ezR.openWinFromRow(e.rowData);                         	
  	
  
                              }	
  
                              	
  
                              $.index.open();	
  
                                      	
      	
  	
  




Remember:	
  every	
  screen	
  or	
  controller	
  is	
  a	
  combinaRon	
  of	
  3	
  files:	
  XML,	
  TSS,	
  JS	
  
A little bit of code to link both files (3/4)!

On	
  each	
  “joke”	
  page,	
  define	
  the	
  acRon	
  for	
  the	
  “back”	
  bu"on	
  




 <Bu"on	
  id="backbu"on"	
  plaYorm="ios"	
  onClick="closeme">Back</Bu"on> 	
  
    	
  	
  
A little bit of code to link both files (4/4)!

Define	
  the	
  acRon	
  for	
  the	
  closeme	
  



                     var	
  ezR=require('ezR');	
  
                     	
  
                     funcRon	
  closeme(e){	
  
                             	
  ezR.closeWin($.turkeycrossing); 	
  	
  
                     }	
  
                             	
  	
  
Startup images and App Icons!

Titanium	
  provides	
  templates	
  for	
  all	
  the	
  images	
  you	
  need.	
  	
  Simply	
  
replace	
  with	
  your	
  own.	
  
h"p://ratking.de/2012/10/06/mini-­‐ludum-­‐dare-­‐37-­‐a-­‐not-­‐game-­‐jam-­‐part-­‐2/	
  
The same code could be repurposed!
Some Apps built with Titanium!
Much more!

•  Command-line interface!
•  Modules, Widgets, Sync Adapters!
•  ACS – Appcelerator Cloud Services!
•  Gaming via Lanica.com!
•  Enterprise-ready!!
Code + Slides!

Code available at !
    http://github.com/ricardoalcocer!
!
Slides available at!
     http://speakerdeck.com/ricardoalcocer!
     http://slideshare.net/ralcocer!
                        !
                        !
Community Support!

!
                             !
                  Appcelerator Q&A !
    https://developer.appcelerator.com/questions/newest!
                           !
                         Twitter!
              https://twitter.com/appcelerator!
                               !
                               !
                               !
?	
  
Questions?

     

     !
Thank you!

ralcocer@appcelerator.com!
              !
  Twitter: @ricardoalcocer!
Develop your first mobile App for iOS and Android

Más contenido relacionado

La actualidad más candente

Assignment 4 Paparazzi1
Assignment 4 Paparazzi1Assignment 4 Paparazzi1
Assignment 4 Paparazzi1
Mahmoud
 
wexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentationwexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentation
tutorialsruby
 
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger KerseCoding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
European Innovation Academy
 

La actualidad más candente (9)

Face/Off: APEX Templates & Themes
Face/Off: APEX Templates & ThemesFace/Off: APEX Templates & Themes
Face/Off: APEX Templates & Themes
 
Assignment 4 Paparazzi1
Assignment 4 Paparazzi1Assignment 4 Paparazzi1
Assignment 4 Paparazzi1
 
wexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentationwexarts.org iPhone Project: Developer Documentation
wexarts.org iPhone Project: Developer Documentation
 
Web app
Web appWeb app
Web app
 
Web app
Web appWeb app
Web app
 
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger KerseCoding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
Coding Lesson (iOS for non-developers) by Zakery Kline and Roger Kerse
 
DOSUG Java FX Script From Takeoff To Cruising Altitude
DOSUG Java FX Script From Takeoff To Cruising AltitudeDOSUG Java FX Script From Takeoff To Cruising Altitude
DOSUG Java FX Script From Takeoff To Cruising Altitude
 
Creating a Component Library
Creating a Component LibraryCreating a Component Library
Creating a Component Library
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flex
 

Similar a Develop your first mobile App for iOS and Android

&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
tutorialsruby
 
Cross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual StudioCross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual Studio
Mizanur Sarker
 

Similar a Develop your first mobile App for iOS and Android (20)

Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
 
Real World ionic Development
Real World ionic DevelopmentReal World ionic Development
Real World ionic Development
 
Building Better Web Apps with Angular.js (SXSW 2014)
Building Better Web Apps with Angular.js (SXSW 2014)Building Better Web Apps with Angular.js (SXSW 2014)
Building Better Web Apps with Angular.js (SXSW 2014)
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJS
 
Titanium Studio [Updated - 18/12/2011]
Titanium Studio [Updated - 18/12/2011]Titanium Studio [Updated - 18/12/2011]
Titanium Studio [Updated - 18/12/2011]
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UI
 
Beyond Responsive Web Design - Moving your web agency to mobile development (...
Beyond Responsive Web Design - Moving your web agency to mobile development (...Beyond Responsive Web Design - Moving your web agency to mobile development (...
Beyond Responsive Web Design - Moving your web agency to mobile development (...
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
 
Getting started with Appcelerator Titanium
Getting started with Appcelerator TitaniumGetting started with Appcelerator Titanium
Getting started with Appcelerator Titanium
 
&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />&lt;img src="../i/r_14.png" />
&lt;img src="../i/r_14.png" />
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile designDreamweaver CS6, jQuery, PhoneGap, mobile design
Dreamweaver CS6, jQuery, PhoneGap, mobile design
 
Intro to appcelerator
Intro to appceleratorIntro to appcelerator
Intro to appcelerator
 
Cross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual StudioCross-Platform Development using Angulr JS in Visual Studio
Cross-Platform Development using Angulr JS in Visual Studio
 
Hybrid app development with ionic
Hybrid app development with ionicHybrid app development with ionic
Hybrid app development with ionic
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applications
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Getting started with titanium
Getting started with titaniumGetting started with titanium
Getting started with titanium
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginners
 
Building Mobile Applications with Ionic
Building Mobile Applications with IonicBuilding Mobile Applications with Ionic
Building Mobile Applications with Ionic
 

Más de ralcocer

Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese version
ralcocer
 

Más de ralcocer (15)

Multi platform development using titanium + alloy
Multi platform development using titanium + alloyMulti platform development using titanium + alloy
Multi platform development using titanium + alloy
 
Building websites with Node.ACS
Building websites with Node.ACSBuilding websites with Node.ACS
Building websites with Node.ACS
 
Slides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese versionSlides for tiTokyo 2013 - Japanese version
Slides for tiTokyo 2013 - Japanese version
 
Appcelerator Alloy Deep Dive - tiTokyo 2013
Appcelerator Alloy Deep Dive - tiTokyo 2013Appcelerator Alloy Deep Dive - tiTokyo 2013
Appcelerator Alloy Deep Dive - tiTokyo 2013
 
Learning Appcelerator® Alloy™
Learning Appcelerator® Alloy™Learning Appcelerator® Alloy™
Learning Appcelerator® Alloy™
 
De Wordpress.com a Wordpress.org
De Wordpress.com a Wordpress.orgDe Wordpress.com a Wordpress.org
De Wordpress.com a Wordpress.org
 
Barcamp Mayaguez 2012
Barcamp Mayaguez 2012Barcamp Mayaguez 2012
Barcamp Mayaguez 2012
 
Cómo crear plugins para Wordpress
Cómo crear plugins para WordpressCómo crear plugins para Wordpress
Cómo crear plugins para Wordpress
 
Open Source, estándares y arquitecturas Web 2.0
Open Source, estándares y arquitecturas Web 2.0Open Source, estándares y arquitecturas Web 2.0
Open Source, estándares y arquitecturas Web 2.0
 
El pensamiento crítico y el uso de tecnología
El pensamiento crítico y el uso de tecnologíaEl pensamiento crítico y el uso de tecnología
El pensamiento crítico y el uso de tecnología
 
El OpenSource en la educación
El OpenSource en la educaciónEl OpenSource en la educación
El OpenSource en la educación
 
El valor educativo del Open Source
El valor educativo del Open SourceEl valor educativo del Open Source
El valor educativo del Open Source
 
Presentación APH
Presentación APHPresentación APH
Presentación APH
 
Educapr Oct2010
Educapr Oct2010Educapr Oct2010
Educapr Oct2010
 
The Future is Open - Pechakucha@SeriouslyCreative - August 26, 2010
The Future is Open - Pechakucha@SeriouslyCreative - August 26, 2010The Future is Open - Pechakucha@SeriouslyCreative - August 26, 2010
The Future is Open - Pechakucha@SeriouslyCreative - August 26, 2010
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 

Develop your first mobile App for iOS and Android

  • 1.
  • 2. Develop your first mobile App for iOS and Android! Ricardo Alcocer // Platform Evangelist! March 12, 2013! Silicon Valley Titanium User Group!
  • 4. Our objective for today! ! BUILD AN APP!
  • 5. Base assumptions! •  You are not a “hardcore coder”! •  You know how to build websites with HTML and CSS! •  You have seen at least a little bit of Javascript!
  • 6. About Appcelerator Titanium! •  Not a language, but a high-level Javascript SDK! •  Allows you build Native Apps for iOS (iPhone, iPod Touch, iPad), Android (Phone and Tablet), Mobile Web, Blackberry 10 (beta), soon for Windows 8 and Tizen! •  Free/Open Source!! •  It’s Native, NOT web app !
  • 7. The design of your App is
 SUPER important! If the users don't like how your App LOOKS ! ! they will delete it!! h"p://www.itexico.com/blog/bid/91499/Why-­‐your-­‐Mobile-­‐App-­‐s-­‐UX-­‐UI-­‐must-­‐be-­‐Awesome  
  • 9. Harmony between design and functionalities!
  • 10. The MVC Pattern! JS   Model   XML   JS   View   TSS   Controller   User  Interface  Components   Invisible  to  the  end-­‐user  
  • 11. Designers and developers can now get along! h"p://images.elephantjournal.com/wp-­‐content/uploads/2012/01/dog-­‐and-­‐cat-­‐sleeping-­‐together.jpg  
  • 13. Make sure you download Studio!
  • 14. Configure platform SDKs! SDKs  allow  you  to  compile  with  the  naRve  tools  and  provide  you  with  Phone  Simulators  for  tesRng  
  • 16. Now you can follow the “Quick Start Guide”, or….!
  • 17. …you can try to fly! h"p://amazingjpg.blogspot.com/2012/11/reckless-­‐abandon-­‐photo-­‐by-­‐peter-­‐brannon.html  
  • 18. Titanium is very powerful, so better get your training wheels on! h"p://www.justsaypictures.com/images/training-­‐wheels-­‐01.jpg  
  • 19. Let’s build a “Jokes” App!
  • 20. Let’s create a new project!
  • 22. Select Alloy as your Titanium Project Type!
  • 23. Configure your project! Name  for  your  App   In  reverse  URL  format:  ie.  (com.mycompany.myapp)     Select  target  plaYorms  for  this  project   Are  you  using  Appcelerator  Cloud  Services?  
  • 25. These  one  implement  funcRonaliRes     and  interacRvity   We  won’t  look  at  these   These  two  work  together  to  build  UI   Remember?  
  • 26. Running an App! You’ll  only  see  the  target   plaYorms  you  explicitly     configured     iPhone  is  only  available  on  Mac   Android  is  available  on  Win,   Mac  and  Linux  
  • 27. Default App running on iPhone Simulator!
  • 28. Default index.xml! <Alloy>        <Window  class="container">                            <Label  id="label"  onClick="doClick">Hello,  World</Label>        </Window>   </Alloy>  
  • 29. Objects in index.xml! <Alloy>        <Window  class="container">                            <Label  id="label"  onClick="doClick">Hello,  World</Label>        </Window>   </Alloy>  
  • 30. index.xml + index.tss working together! XML   <Alloy>        <Window  class="container">              <Label  id="label"  onClick="doClick">Hello,  World</Label>        </Window>   </Alloy>   TSS   ".container":  {        backgroundColor:"white"   },   "Label":  {        width:  Ti.UI.SIZE,        height:  Ti.UI.SIZE,        color:  "#000"   }  
  • 31. ! Enough of the basics. Let’s get started!!
  • 32. Back to our “Jokes” App!
  • 33. Thinking as a Web developer! PAGE   DIV   DIV   DIV   DIV   DIV   DIV   DIV   DIV  
  • 34. Thinking as a Web developer! PAGE   DIV   DIV   DIV   DIV  
  • 35. Native iOS and Andoroid UI Elements! h"p://www.teehanlax.com/blog/ios-­‐6-­‐gui-­‐psd-­‐iphone-­‐5/   h"p://www.teehanlax.com/blog/android-­‐2-­‐3-­‐4-­‐gui-­‐psd-­‐high-­‐density/  
  • 36. Titanium allows you to use native platform elements! h"p://docs.appcelerator.com/Rtanium/3.0/#!/api  
  • 37. The vocabulary is well documented! h"p://docs.appcelerator.com/Rtanium/3.0/#!/api/Titanium.UI.Window  
  • 38. In Titanium Terms! Window   VIEW   VIEW   VIEW   TableView   VIEW   VIEW   VIEW   VIEW   VIEW  
  • 39. In Titanium Terms! WINDOW   VIEW   VIEW   VIEW   VIEW  
  • 40. Building the App Structure (XML)! Expected  Result   <Alloy>      <Window  class="container">          <View  id="header">              <View  id="appicon"></View>              <Label  id="apptitle">Funny  Stuff</Label>          </View>          <TableView  id="mainlist">              <TableViewRow  id="listrow">                  <View  id="rowContainer">                      <View  id="rowIcon"></View>                      <Label  id="rowTitle">Some  Title</Label>                      <View  id="rowTypeContainer">                          <Label  id="rowTypeCaption">Type:</Label>                          <Label  id="rowTypeData">Some  Type</Label>                      </View>                  </View>              </TableViewRow>          </TableView>      </Window>   </Alloy>  
  • 41. Building the App Structure (XML)! Expected  Result   <Alloy>      <Window  class="container">          <View  id="header">              <View  id="appicon"></View>              <Label  id="apptitle">Funny  Stuff</Label>          </View>          <TableView  id="mainlist">              <TableViewRow  id="listrow">                  <View  id="rowContainer">                      <View  id="rowIcon"></View>                      <Label  id="rowTitle">Some  Title</Label>                      <View  id="rowTypeContainer">                          <Label  id="rowTypeCaption">Type:</Label>                          <Label  id="rowTypeData">Some  Type</Label>                      </View>                  </View>              </TableViewRow>          </TableView>      </Window>   </Alloy>  
  • 42. Hey! That’s not what I wanted! We  need  to  apply  styling  to  the  elements.    Let’s  start  with  container  and  header  
  • 43. Styling the main “container” and “header”! ".container":  {      backgroundColor:"white",      layout:  'vertical'   },   "#header":{      height:  "50dp",      backgroundColor:  "blue"   }   Next:  the  “appicon”  area  
  • 44. Styling the “appicon”! "#appicon":{      width:  "50dp",      height:  "50dp",      left:  "0",      backgroundColor:  "#fff"   }   Next:  let’s  specify  a  height  for  the  “rowContainer”  
  • 45. The App so far! "#rowContainer":{    height:  "60dp"   }   Next:  the  “rowIcon”  area  
  • 46. The App so far! "#rowIcon":{      lek:  “5dp”,      height:  "50dp",      width:  "50dp",      backgroundColor:  "red  "   }   Next:  the  rest  of  the  elements  in  the  “rowContainer”  
  • 47. The App so far! "#rowTitle":{      lek:  "60dp",      top:  "5dp",      width:  Ti.UI.SIZE,   },   "#rowTypeContainer":{      bo"om:  "5dp",      height:  "20dp",      width:  Ti.UI.SIZE,      layout:  "horizontal",      lek:  "60dp"   },   "#rowTypeCapRon":{      height:  Ti.UI.SIZE,      width:  Ti.UI.SIZE   },   "#rowTypeData":{      height:  Ti.UI.SIZE,      width:  Ti.UI.SIZE   }   Next:  some  colors  on  the  row  elements  
  • 48. The App so far! "#rowTypeCapRon":{      height:  Ti.UI.SIZE,      width:  Ti.UI.SIZE,      font:  {          fontSize:  "12dp"      }   },   "#rowTypeData":{      height:  Ti.UI.SIZE,      width:  Ti.UI.SIZE,      font:  {          fontSize:  "12dp"      }   }   Next:  some  colors  on  the  “header”  area  
  • 49. The App so far! "#header":{      height:  "50dp",      backgroundColor:  "#4698D6"   },   "#appRtle":{      font:  {          fontSize:  "20dp",      fontWeight:  "bold"      },      color:  "#fff"   }     Next:    more  styling  on  the  table  rows  
  • 50. The App so far! "#rowContainer":{      height:  "60dp",    top:  "5dp",      right:  "5dp",      bo"om:  "5dp",      lek:  "5dp",      borderWidth:  1,      borderColor:  "#cacaca",      borderRadius:  5   }     Next:  some  more  colors  on  the  table  row    
  • 51. The App so far! "#rowContainer":{      height:  "60dp",      top:  "5dp",    right:  "5dp",      bo"om:  "5dp",      lek:  "5dp",      backgroundColor:  "#f9f9f9",      borderWidth:  1,      borderColor:  "#cacaca",      borderRadius:  5   },   "#rowTypeCapRon":{      height:  Ti.UI.SIZE,      width:  Ti.UI.SIZE,      font:  {          fontSize:  "12dp",          fontWeight:  "bold"      },      color:  "#B73B22"   }     Next:  the  icon  on  the  row  
  • 52. The App so far! Images  live  inside  the  /assets  folder.   We’ll  make  this  change  on  the  XML,  so  we  can   assign  different  images  to  each  row:   <View  id="rowIcon"  backgroundImage="/happyface.png"></View>   Next:  the  icon  on  the  “header”  
  • 53. The App so far! "#appicon":{      width:  "50dp",      height:  "50dp",      lek:  "0",      backgroundImage:  "/topicon.png"   }     Finally:  some  real  data  on  the  table  row  
  • 54. The App so far! Go  to  your  index.xml  file  and  change  the  placeholder  data   <TableViewRow  id="listrow">    <View  id="rowContainer">              <View  id="rowIcon"  backgroundImage="/happyface.png"></View>              <Label  id="rowTitle">Why  did  the  turkey  cross  the  road?</Label>              <View  id="rowTypeContainer">                    <Label  id="rowTypeCapRon">Type:</Label>                    <Label  id="rowTypeData">Joke</Label>              </View>        </View>   </TableViewRow>   To  add  more  rows,  copy  and  paste  this  code  block!  
  • 56. The App so far! Use  the  same  procedure  to  create  the  template  for   the  second  page.    I’ll  leave  that  to  you   TIPS:       1.  In  Studio,  right-­‐click  in  the  files  area,  select  New  >   Alloy  Controller   2.  You  could  move  ALL  your  TSS  to  “app.tss”.    This  is   a  global  file  that  holds  styling  that  will  be  shared   by  all  screens    
  • 57. A little bit of code to link both files (1/4)! The  index.xml  file  needs  to  know  what  to  do  when  you  click  on  the  rows   <TableView  id="mainlist"  onClick="onTableClick">    <TableViewRow  id="listrow"  ezawin="turkeycrossing">         The  name  of  a  previously  created  XML  file  
  • 58. A little bit of code to link both files (2/4)! The  index.js  needs  to  define  the  acRon  for  onTableClick   var  ezR=require('ezR');     funcRon  onTableClick(e){    ezR.openWinFromRow(e.rowData);     }     $.index.open();         Remember:  every  screen  or  controller  is  a  combinaRon  of  3  files:  XML,  TSS,  JS  
  • 59. A little bit of code to link both files (3/4)! On  each  “joke”  page,  define  the  acRon  for  the  “back”  bu"on   <Bu"on  id="backbu"on"  plaYorm="ios"  onClick="closeme">Back</Bu"on>      
  • 60. A little bit of code to link both files (4/4)! Define  the  acRon  for  the  closeme   var  ezR=require('ezR');     funcRon  closeme(e){    ezR.closeWin($.turkeycrossing);     }      
  • 61. Startup images and App Icons! Titanium  provides  templates  for  all  the  images  you  need.    Simply   replace  with  your  own.  
  • 63. The same code could be repurposed!
  • 64. Some Apps built with Titanium!
  • 65. Much more! •  Command-line interface! •  Modules, Widgets, Sync Adapters! •  ACS – Appcelerator Cloud Services! •  Gaming via Lanica.com! •  Enterprise-ready!!
  • 66. Code + Slides! Code available at ! http://github.com/ricardoalcocer! ! Slides available at! http://speakerdeck.com/ricardoalcocer! http://slideshare.net/ralcocer! ! !
  • 67. Community Support! ! ! Appcelerator Q&A ! https://developer.appcelerator.com/questions/newest! ! Twitter! https://twitter.com/appcelerator! ! ! !
  • 69. Thank you! ralcocer@appcelerator.com! ! Twitter: @ricardoalcocer!