Archive for October, 2011

Updated: Mobile SDK 1.7.4 No Longer Available, 1.7.5 Coming Soon

Monday, October 31st, 2011

Update: 1.7.4 Release pulled from build servers – update no longer available

The 1.7.4 release has been pulled from our download servers at this time – we are currently tracking two critical issues that are preventing us from making 1.7.4 generally available:



If you have not yet upgraded to 1.7.4, no further action is necessary. If you have upgraded to 1.7.4 while the update was available yesterday, we recommend that you revert your project back to the 1.7.3 release. The properties API issue has been fixed in the 1.7.x release branch, and is available from our continuous integration server if required.

We plan to make a 1.7.5 release in the coming days once the necessary testing is complete, which will contain fixes for the critical issues mentioned above. Thank you for your patience, and we apologize for any inconvenience.

Original Post

Today, we are making the 1.7.4 release of the Titanium Mobile SDK generally available to the community. The 1.7.4 release contains several important bug fixes, summarized below. The official release notes for 1.7.4 are located here.

Thank you as always to all our users, and let us know what you think!  Titanium Studio should prompt you to update automatically, but you can check for the 1.7.4 update by selecting “Check For Titanium SDK Updates…” in the “Help” menu of Titanium Studio.

Bugs Squashed

  • [TIMOB-1419] – Update Titanium.Facebook to use Facebook's New OAuth 2.0 Authentication
  • [TIMOB-2849] – Android: Set-Cookie Response Headers Only Returns Max of One Cookie
  • [TIMOB-4482] – Android: Tabgroup.animate not working on Android 2.2 with Ti sdk 1.7.0
  • [TIMOB-4696] – iOS: Cannot retrieve property value set in tiapp.xml using Ti.App.Properties API
  • [TIMOB-4741] – iOS: Percentage-based views need to be re-drawn on device rotation
  • [TIMOB-4747] – Android: passwordMask and keyboardType
  • [TIMOB-4888] – iOS: app does not rotate to landscape if it is launched while the device is in landscape
  • [TIMOB-4947] – Android: Window close event not fired for heavyweight window
  • [TIMOB-5123] – CommonJS Modules not included/functional in distribution build
  • [TIMOB-5331] – iOS: Launching in landscape and then rotating to portrait causes popover button to disappear
  • [TIMOB-5332] – iOS: Rotating a popover causes the content to be removed from popover but the popover stays
  • [TIMOB-5405] – iOS5: Intermittent Running Countdown picker and letting it go to the background crashed
  • [TIMOB-5434] – Android: require() in a non-root context breaks any include() statements below it.
  • [TIMOB-5748] – Android: Debugger in Android does not stop at the breakpoints that are required by (require(file.js) )
  • [TIMOB-5752] – Android: Ti.Platform.id not unique
  • [TIMOB-5755] – iOS: xcode 4.1+ cannot compile to armv6, application crashes on launch
  • [TIMOB-5804] – iOS: Cannot launch app on device.
  • [TIMOB-5805] – Reintegrate uniqueIdentifier value into id property and add PB caching support.
  • [TIMOB-5819] – Android: Percentage-based views need to be re-drawn on device rotation
  • [TIMOB-5827] – iOS: Opening window in full screen does not cover the nav bar
  • [TIMOB-5828] – Kitchensink: Navbar does not change size when rotating to landscape on main windows.
  • [TIMOB-5834] – Kitchen Sink crash on launch in iPad 1 (os version 3.2.2) in landscape orientation

How-To: Create a JavaScript module for CommonJS, Ti.include, or the browser

Monday, October 31st, 2011

A common question we get is around techniques for code re-use between projects that use different types of JavaScript evaluation mechanisms, like the CommonJS module spec, Ti.include, or just in the browser. I thought I’d share a quick technique for creating a JavaScript module that will work in all three of these environments. Here’s the template for a simple module, before we dive into the usage:

In a CommonJS environment, we’ll add our public interface to the exports object as usual. But in environments that don’t provide the exports object and an automatic sandbox, we need to be conscious of polluting the global JavaScript object by adding lots of global properties and functions. We can achieve this using a self-calling function to encapsulate the logic of our module, and only expose a single variable to the global scope, which we called globalNamspace above. This variable will become the public interface to our module in a Ti.include-style usage or in a standard script tag in the browser. To use the module in a CommonJS environment, your usage would look like this:

Using Ti.include, it would look like:

And in the browser, it would look like:

Hope that helps you create JavaScript modules that can be re-used in any environment.

Web Directions South 2011

Monday, October 31st, 2011

It’s been two weeks since Web Directions South 2011 in Sydney, Australia, and we thought it was about time to write a quick wrap up about our trip down under. First off, we’d like to thank everyone at Web Directions for putting together such an wonderful conference, and for being so hospitable. We were a long way from home and everyone from Web Directions as well as those from the venue were extremely accommodating.

Web Directions South 2011 was simply quite amazing. The two day event attracted over 700 web professionals in a single venue to discuss the future of the web, it’s mediums, and technologies. Here is a quick overview of how we fit into this incredible event.

WebDirections_AppceleratorLunchtimePres_0422.jpg

Day 1

The highlight of day 1 was definitely the Lightning Talk. With very little stage time, I decided to do something a little bit crazy and try and complete a live code demo. The goal was to build an extremely simple todo application in the 10 minutes that I had on stage. Now, while this sounds a bit out there, I had actually completed something similar earlier in the day in 13 minutes. Unfortunately, I failed to take into account one very important factor during that dry run. I was supposed to be interacting with my audience. In the end however, even though my talk ran just a few minutes long, it was a huge success and attracted a whole lot of attention afterwards. For anyone interested, the resulting code can be found on Github at the link below.

Day 2

After the Lightning talk on day 1, our booth was flooded with interest from developers to teachers and I spent a majority of the day traveling as far down the rabbit hole as they wanted to go. However, during one of the hour long sessions before lunch, I noticed that the Sensis booth next to ours was promoting a new developer API that they called SAPI. I thought this would be a wonderful time to do some business networking and show off a bit of what Titanium can do at the same time. I registered for their developer program, skimmed the first page of their documentation, and proceeded to build a cross-platform application using their new api. Done in under 30 minutes, I had their complete attention and a valuable business contact in Australia. If you’re interested in Sensis, or the sample application that was put together for them check out the links below.

Everything In Between

The trip to Australia encompassed more than just the conference. We were lucky enough to meet with the Titanium User Groups in both Sydney and Melbourne, as well as a few members of related groups in each area. We’d like to thank Nick du Preez(@Nick_duPreez) of the Sydney TUG as well as Amit Kothari(@amitkothari) and Jeff Bonnes(@jeffbonnes) of the Melbourne TUG for their help in getting things ready for us prior to our arrival in Australia. If you are in either area, please join their respective Meetup groups.



All in all, the trip was very successful and we hope to be invited back again next year. Maybe we’ll see you there.

Join Us for a Developer Meetup at HQ in Mountain View

Friday, October 28th, 2011

If you’re a Titanium developer in the San Francisco bay area, we’d love to see you at the Silicon Valley Titanium User Group (SV-TUG) meeting, the first ever to be held at Appcelerator World Headquarters in Mountain View, CA. RSVP and check out the event page here for details and directions. While all who attend will leave having had their fill of drinks and appetizers, one lucky developer will also walk out the door with an iPad 2! (The one we give you please, not one out of Jeff’s office).

Our agenda for the evening will be as follows:

6:30pm: Food, drink, and community lightning talks (open mic, 5 minutes or less – tell us what you’ve been up to!)

7:00pm: Presentations and Demos from Appcelerator employees, including…

  • Alan Duboff on language modules in Titanium Desktop
  • Ronen Botzer on what’s new in Titanium Analytics
  • Kevin Whinnery on extending Titanium Studio with custom app templates
  • and, drumroll please…
  • Marshall Culpepper with a world premier look at the new Android V8 runtime – so fast, if you blink you might miss it.
  • All presentations followed by a Q&A Panel with all Appcelerator folks on hand



8:00pm: Drinks and socializing, and more information on the positions we’re recruiting for at Appcelerator.

8:30pm: iPad prize drawing

Hopefully we’ll get to see many of you there!

Forging Titanium Episode 12: Titanium & Date.js

Friday, October 28th, 2011

To keep the ball rolling on integrating existing Javascript libraries with Titanium, this week’s episode shows off the Date.js library in a cross-platform mobile app. We’ll include this powerful date and time processing library, in a modular manner, to enhance the native Javascript Date object. Ideally, you’ll let Date.js do all the grunt work of parsing disparately formatted dates while you spend your valuable time adding much more interesting features to your Titanium apps.

Episode Highlights

  • Introduction to the Date.js workhorse function, Date.parse()
  • Including existing Javascript libraries with CommonJS, even when they don’t export a module
  • Using the Titanium.UI.Picker to display a native picker component as each platform’s users would expect

Episode Resources: