8 Quick tips to speed up Titanium app development now and in the future
There are always things that you need to do while developing apps. Things that keep coming back, or things you don’t do often enough. This article should cover some cases, so you can spend more time on actually developing.
1. iOS & Encryption
Every build, Apple asks you wether or not you use encryption technology. Record the answer in your tiapp.xml
file and you’ll never get the question again. (in this example, the answer is “no”.
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
2. NavigationWindow and cross-platform
So want to use NavigationWindow, but want to use the same code for iOS and Android? Use XP.UI
<NavigationWindow module="xp.ui">
Now, it works on Android and iOS. You can even call the openWindow
method. Of course, there is no actual NavigationWindow
on Android, but it wraps it in such a way you don’t have to think about it while developing.
3. HTTP calls
HTTP calls is something most apps need, but why rewrite your logic all the time? There are a couple modules/libraries out there that help you immensely with setting it up & standardising it. Don’t be afraid of using it! Which one you choose is up to you, they both have their pros and cons.
4. Hiding ActionBar on Android
Sometimes you need to hide the ActionBar
in certain pages. When you need this, just set a theme
on the Window in the tss
.
"Window[platform=android]": {
theme: 'Theme.AppCompat.NoTitleBar'
}
5. Styling the Window
If you style every window the same, you might want to unify your styling. Too often I see the same style over and over again in every controller tss
file. So, create a class in app.tss
and apply that in every controller where it needs to be applied.
".generalWindowStyle": {
barColor: "#333333",
backgroundColor: "#ffffff",
titleAttributes: {
color: '#ffffff',
font: "OpenSans"
}
}
Then in every view:
<Window class="generalWindowStyle">
Why not just style using the "Window": {"
logic? Well, at one point you’ll want to style a certain window differently, then you’ll either need to change every window everywhere to add a class at that point, or else you’ll be trying to override properties you don’t even need. I always add a class, so you don’t have any “magic” in your app, you always know what you’re doing.
6. Unifying further styling in the app
As with #5, you probably have labels styled the same throughout the app. Use a class in app.tss
for this and apply that to the label in every controller. Keep in mind, just like with css
you can apply multiple classes to a label, so don’t make them too specific, but apply naming in such a way they make sense.
Good example: #defaultLabelStyling
Bad example: #label14ptWhite
Why is the second bad? What if you change the font, which is slightly bigger, so you want to change all 14pt font sizes to 13pt? Then you’ll either have to rename the class, or have a class called 14pt
while the font is actually size 13.
7. Unifying fonts
So you’re going to apply a redesign in the app, and the designer decided to make the main font something else. Now you’ve got to change all the files you’ve used the fonts and colors in. Which is, a lot of places. Even if you used tip #6, you’ll still have like 20 classes to adjust. It can easily be done, but its better to configure it right so you’ll be finished with the redesign in a second.
In the app
root folder there is a config.json
file you can use for this. Usually I structure it like this
{
"global": {
"design": {
"fonts": {
"regular": "Montserrat-Regular",
"bold":"Montserrat-Bold",
"italic":"Montserrat-Italic"
}
}
}
As you can see, I specify the font names right there. So now when going to, following #6, app.tss
, I can apply the font right there:
".defaultLabelStyling": {
font: {
fontFamily: Alloy.CFG.design.fonts.regular,
fontSize: 14
}
}
Now, when the font needs to change to “Comic Sans” (god forbid) then you can actually just change it in the config, and it works right out of the box everywhere you’ve used it.
8. Unifying colors
For colors you could do something like this too, but it is trickier. You need to do the naming and implementation right.
Good example: genericLabelColor
or windowBackgroundColor
or windowBarColor
.
Bad example: white
or yellowLabelColor
Also bad, re-using the configured color for other elements. Lets say you have the windowBarColor
and you want to have a label with the same color, don’t use the property for it! Make a new property, because you’ll hit your head against the wall if things start changing colors that you didn’t intent to change by altering the config.
Conclusion
The main takeaways from this article is prevent doing double work, and make your app maintenance faster and easier. Even if you don’t intend on changing colors or fonts later, some future developer that will take over the project after not changing for 3 years will be really happy you implemented it right.