March 19, 2012 11 Comments
A little while back we introduced a technology called Sencha Command. Command got a big overhaul for 2.0 and today it can generate all of the files your application needs for you. To get Sencha Command you’ll need to install the SDK Tools and then open up your terminal. To run the app generator you’ll need to make sure you’ve got a copy of the Sencha Touch 2 SDK, cd into it in your terminal and run the app generate command:
sencha generate app MyApp ../MyApp
This creates an application called MyApp with all of the files and folders you’ll need to get started generated for you. You end up with a folder structure that looks like this:
This looks like a fair number of files and folders because I’ve expanded the app folder in the image above but really there are only 4 files and 3 folders at the top level. Let’s look at the files first:
- index.html: simplest HTML file ever, just includes the app JS and CSS, plus a loading spinner
- app.js: this is the heart of your app, sets up app name, dependencies and a launch function
- app.json: used by the microloader to cache your app files in localStorage so it boots up faster
- packager.json: configuration file used to package your app for native app stores
To begin with you’ll only really need to edit app.js – the others come in useful later on. Now let’s take a look at the folders:
- app: contains all of your application’s source files – models, views, controllers etc
- resources: contains the images and CSS used by your app, including the source SASS files
- sdk: contains the important parts of the Touch SDK, including Sencha Command
The app folder
You’ll spend 90%+ of your time inside the app folder, so let’s drill down and take a look at what’s inside that. We’ve got 5 subfolders, all of which are empty except one – the view folder. This just contains a template view file that renders a tab panel when you first boot the app up. Let’s look at each:
- controller: will contain all of your Controller files (learn about Controllers)
- model: will contain all of your Model files (learn about Models)
- profile: will contain all of your Profile classes (learn about Device Profiles)
- store: will contain all of your Store classes (learn about Stores)
- view: will contain all of your View classes (learn about creating Views)
The resources folder
Moving on, let’s take a look at the resources folder:
Five folders this time – in turn:
- icons: the set of icons used when your app is added to the home screen. We create some nice default ones for you
- loading: the loading/startup screen images to use when your app’s on a home screen or natively packaged
- images: this is where you should put any app images that are not icons or loading images
- sass: the source SASS files for your app. This is the place to alter the theming for your app, remove any CSS you’re not using and add your own styles
- css: the compiled SASS files – these are the CSS files your app will use in production and are automatically minified for you
There are quite a few icon and loading images needed to cover all of the different sizes and resolutions of the devices that Sencha Touch 2 supports. We’ve included all of the different formats with the conventional file names as a guide – you can just replace the contents of resources/icons and resources/loading with your own images.
The sdk folder
Finally there’s the SDK directory, which contains the SDK’s source code and all of the dependencies used by Sencha Command. This includes Node.js, Phantom JS and others so it can start to add up. Of course, none of this goes into your production builds, which we keep as tiny and fast-loading as possible, but if you’re not going to use the SDK Tools (bad move, but your call!) you can remove the sdk/command directory to keep things leaner.
By vendoring all third-party dependencies like Node.js into your application directory we can be confident that there are no system-specific dependencies required, so you can zip up your app, send it to a friend and so long as she has the SDK Tools installed, everything should just work.
Hopefully that lays out the large-scale structure of what goes where and why – feel free to ask questions!