How to make iPhone Apps and Influence People Musings on the iPhone development process

19Aug/116

Realestate.com.au iPad app goes live!

It's been a number of months and some incredibly late nights in the making but the Realestate.com.au iPad App finally went live in the iTunes store last Friday, August 12. I was lucky enough to be able to give a demo of the app the night before release at the Melbourne Cocoaheads meeting at the Intunity offices in Cremorne and the response from probably the largest (70+) crowd ever to attend a cocoaheads was really exciting.

I joined the REA Mobile team back in March 2011 to help with the contenting development of their iPhone app, and after a UI uplift release for the iPhone we started working on the universal iPad app. After some hiccups along the way, we managed to deliver a brilliant looking, stable app that I'm really proud to have worked on. I'd say it's reset the bar for iOS property apps, and is streets above its competition.

The REA Mobile team is lead by Kevin O'Neill (@kevinoneill), second chaired by Luke Cunningham (@icaruswings) and backed up by Steve Hollaway, Ben Thomas, Mike Rowe, Myles Abbot, Mujtaba Hussain and myself.

Some awesome technical bits / features of the app include:

  • Custom forms (IBAForms) for advanced property searches.
  • A gorgeous custom UI including the little bits that are really hard to customise.
  • Custom map callouts are really hard to customise.
  • It's a true universal app it has a shared underlying code base and consistent behaviour, look and feel.
  • It rotates, and it rotates like a boss. Rotate it, and see it resize itself without any of that crappy UI flickering you see elsewhere.
  • Swishy tap, pan and swipe gesture recognisers all over the place make interactions really fluid.
  • It's damn fast (it has it's own purpose built back end).
  • It's stable. We tested the f*ck out of this app... and the competitors...
  • It caches images and searches and other things;  it also behaves nicely when errors occur.
  • It's using the latest iOS 4+ technology and minimal amounts of old legacy code (there's always some right?)
  • It leverages/wrangles a handful of awesome open source frameworks.
  • It sets the bar for it's category in mobile property apps.

The realestate.com.au iPad app "Money Shot" as we call it

Custom callouts are one of the hard things to customise

So yeah ! If you haven't already - check it out on iTunes -> Realestate.com.au in iTunes

24Jun/111

WWDC 2011 Video recommendations (Updated)

Update 26/6/11 : I've fixed a couple of errors, and updated the formatting of the post below.

WWDC Videos are out this morning! Here's my very quick 'Hit List' based on the sessions I attended and the sessions I stared in the WWDC 2011 app on my iPad.

Monday - Kickoff Sessions

601 - Apple Platforms Kickoff

300 - Developer Tools Kickoff

400 - Graphics, Media and Games Kickoff

Tuesday

100 - What's New in Cocoa Touch

102 - Implementing UIViewController Containment ** This is probably the most interesting thing in iOS 5 from my point of view.

101 - What's new in Cocoa

500 - What's new in Core Location ** Presented by a friend of mine, lots of people were excited by the new stuff here

104 - Advanced ScrollView Techniques ** The ScrollView talks are always great

501 - iCloud Storage Overview **

105 - Polishing your App: Tips and Tricks to Improve Responsiveness and Performance

303 - What's New in Core Data on iOS ** There was some cool stuff in here.

203 - Introducing App Sandbox  (Lion)

323 - Introducing Automatic Reference Counting (ARC) **

Wednesday

111 - Visualising Information Geographically with MapKit

306 - Maximising Productivity in Xcode 4

308 - Blocks and Grand Central Dispatch in Practice ** The line for this was the longest all week

307 - Moving to Apple LLVM compiler

310 - What's new in Instruments

116 - Storing Documents in iCloud using iOS 5 ** Not exciting for me, but people like the concept

Thursday

208 - Securing Application Data

313 - Mastering Schemes in Xcode 4

210 - Mastering Grand Central Dispatch

121 - Understanding UIKit Rendering

124 - Twitter Integration125 - UITableView Changes, Tips & Tricks

316 - LLVM Technologies in Depth

422 - Using Core Image on iOS & Mac OS X **

129 - Practical Drawing for iOS Developers **

318 - iOS Performance in Depth

Friday

134 - Writing Easy-To-Change Code: Your second most important goal as a developer

322 - Objective C Advancements In-Depth

22Feb/112

A simple bash script to automatically create your iOS Icon.png files

Various iOS Icons Sizes The other week at my weekly co-working catchup in the city I was made aware of the very handy sips(1) command line tool. Sips is short for Scriptable Image Processing system and is more or less a command line front end to Apple's image processing abilities.

My problem that day was "How can I automatically resize my Icon.png artwork" and all of a sudden with the knowledge of sips' existence it was easy to write this small bash script to rename and resize my large 512x512 pixel artwork down to the various names and sizes required by iOS. (Thanks Mark!)

The script is simple; give it an input PNG image at least 512x512 pixels (multiple of 512 will work too) and it will create your iTunesArtwork, Icon.png, Icon@2x.png, Icon-Small.png, Icon-Small@2x.png, Icon-Small-50.png and Icon-72.png file nicely. These sizes are all outlined in the "Application Icons" section of the iOS Application Programming Guide, and adding more when necessary is obvious.

This script should save you at least a dollar on the similar GUI apps on the app store that do the same thing...

I've made a gist on github too.

10Dec/100

12 Months on the App Store

It was December 9, 2009 that Seoul City Metro 1.0 was approved for sale on the App Store after almost the full 14 days waiting in the approval queue. (See original blog post here)

The last twelve months have gone so fast, and I can't say I've managed to get as many apps published, or do as much marketing or promotion as I thought I could - but what I have managed to achieve has been a lot of fun and something I'm really proud of.

Here's some statistics from December 9 2009 - December 9  2010

Apps: 5

Sales: 36,965 (including free apps)

Upgrades : 20,522

Revenue (USD approx) : $ 4500

Coming up in 2011 I'm introducing iAds/AdMob ads into the mix, and hoping to expand to more cities, explore some marketing options and upgrade the citymetroapps.com website.

11Nov/100

Presenting at Melbourne Cocoaheads Tonight

I'm presenting a talk tonight at Melbourne Cocoaheads (Google Group).

The topic is Apple's iAd framework, including how to add them to your project, a handful of things to remember about using iAds and an overview my first hand experiences with Seoul City Metro as an iAd supported app on the App Store.

You can find the source code for the demo I'm presenting over at git hub and the slides are below. The demo code (JCAdSupportedNavController) is an open source project I plan on updating in coming weeks with more advertising providers.

20Oct/100

The Commonwealth Games experement

One of the original catalysts for creating Delhi City Metro was the up coming Commonwealth Games. Prior to the opening ceremony I released a substancial update to the app that included all the competition venues and allowed you to use the route calculating mechanism to find your way to each venue using the metro.

CWG Venues on the metro map

It was a programmers attempt at marketing. I changed the app's name, all the iTunes screenshots and key words and spent a considerable amount of time wrangling the train stations and train lines code to fit around commonwealth games venues. I created a neat little count down at the top of the app and a few new views to handle the slightly different content and added the venues in their approximate position on the metro map.

Did it all pay off? Well it didn't sell a million extra copies leading up to the games, but the app did see a sales spike and a considerable usage spike.

Delhi City Metro also moved back into the top 100 over all apps, and back to #1 in Navigation over the period.

There's also been a number of favorable reviews posted since the 1.1 update, and I've been trying to follow up user comments through twitter (@delhimetroapp) and via email.

App Usage

If you look at the usage over the past few weeks, you can see the spike in usage for the Commonwealth Games. It's also interesting that the usage appears to be maintaining a higher level than prior to the games, but it might change in the coming weeks.

Delhi City Metro usage statistics since the Commonwealth Games

20Oct/100

Lessons in Centralising CityMetro Development With git

City Metro's new git repo

Note to readers of this post: I actually would not recommend this method of organising multiple apps. The better way is to develop off a 'master' branch within GIT, and using XCode targets to dedifferentiate the assets and source code for each app.


When I came up with the idea for the CityMetro Apps around October last year, I knew I wanted to develop a platform I could use over and over to streamline the development of multiple similar apps.

I originally started with an Xcode project and a git repository. When Seoul City Metro 1.0 was released I cloned the repository for Seoul City Metro Lite, made some changes and released it. I also cloned Seoul City Metro 1.0 for Busan City Metro and Delhi City Metro 1.0 was a messy clone of SCM 1.1.2. At each stage I was renaming the XCode project file and committing changes and bug fixes to each app as required.

After about 9 months of development it was getting very difficult to track patches and updates I'd made to different apps. If I found a bug while working on Delhi, it was difficult to push it back to Seoul and back out to Busan or vice versa. Often I just did it manually to save a headache. Having different XCode projects and different repositories diverging all over the place was just not how I had envisioned the City Metro platform moving forward.

So I just started again.

So on the September 12, I started a new XCode project named CityMetro.xcodeproj and manually imported all the latest editions of the core files from each repository.

Rather than re-create the Seoul or Delhi apps with this fresh repository, I created a 'City Metro Base' app on the master branch that would be a stock app that compiles with a standard look and feel. I spent a day or so building this app up; testing for leaks and ironing out handfuls of bugs I'd been meaning to fix for weeks. I treated it like a proper release. (even making Icons and Default images!)

City Metro 'Base'

When I was happy with the core code base I could create a branch for each city and make the changes needed in a couple of commits. When I continued to find bugs and problems as I continued to test the apps I toyed with git-merge, but I really wanted to keep the tree looking clean (at least initially) so I started playing with git-rebase. All I can say about git-rebase is "hold your breath", but it's so cool how it lets you squash, and re order commits.  If you tread very carefully around the XCode project file changes, and learn to handle merge conflicts then it's all a lot of fun.

As you can see in the image above, all the most recent versions of the City Metro apps are branches of the base app on the master branch. Seoul City Metro Lite is even a direct decedent of Seoul City Metro!

Going forward I'm not sure if I'll keep rebasing each app after every bug I fix in the base app, but the stage is set for the next couple of City Metro apps.

6Aug/100

iPhone 4 has arrived!

It's been a week and two hours since I got hold of the iPhone 4 here in Australia. Just like every other Apple fan who wanted an outright iPhone 4, I lined up at the Chadstone Apple retail store; a 15 minute bike ride from my house at 5am. It was my first line up for an Apple product, not sure if it will be my last.

The iPhone 4 is that it's a great update, and the new display, camera and processor make the iOS experience just that much more awesome. I've spent this past week updating Seoul City Metro, and Delhi City Metro with new double resolution graphics -  Lots to come.

iPhone4

iPhone4 from the 3GS's perspective

1Jul/103

Adding the ‘pull down to refresh’ effect to UITableView

Today I was tooling around with some interface concepts and playing with apps like foursquare and Twitter (previously Tweetie) and I wondered if I could implement something similar to the now famous 'pull down to refresh' method of initialising a refresh of the content within a UITableView.

As it turns out it wasn't as difficult as I thought; There were already a couple of elegant solutions out and about. The first example I found was by Oliver Dropnik, which talked about altering an existing solution posted on git hub by user devindoty called EGOTablePullViewRefresh.

Oliver's code looked like it was a good addition to devindoty's because he had decided to subclass UITableViewController which leads to a much more complete solution that's easier to move between projects. My only issue with Oliver's code was that it refactored a lot of the underlying implementation, where I didn't see too much wrong with it.

I decided to come up with a half way measure; I moved the majority of the grunt work into a subclass of UITableViewController, cleaned up the XCode Demo project included with the source code and pushed it all back up to git hub. If you're at at all interested in this, I'd suggest checking out my fork of the EGOTablePullViewRefresh project on Git Hub.

Get a pull-to-refresh effect like Tweetie 2 and foursuare

Update: Another pull to refresh implementation is now in the three20 library by Facebook, but I'm not sure where exactly it's buried.

18Mar/100

Seoul City Metro, and Seoul City Metro Lite are up to date again!

It had been grating on me over the last couple of weeks knowing that Seoul City Metro and Seoul City Metro Lite were not up to date with the new train stations opened on Line 1 (Dangjeong Station and Seodongtan Station) and Line 3 ( Garak Market, National Police Hospital and Ogeum). I held off an immediate update when the stations opened because I wanted to wait for the SMRT.co.kr maps to be updated properly and I wanted to include a few tweaks to the route detail interface.

New Train Stations added to the Metro Map, March 2010

New stations on line 3

As weeks moved on I was feeling increasingly  like my apps were out of date, and the SMRT maps still hadn't been updated to reflect the new stations. So yesterday I just had had enough and pushed new stations, updated timetables and a manually modified map to both Seoul City Metro, and Seoul City Metro Lite. I was reluctant to manually update the maps because I don't have them in vector format but I was quite happy with the end result. Both updates were approved for sale in under 11 hours - and are available for download das you read this. (iTunes link)

I also managed to include one minor tweak to the route interface, allowing easier access to the timetables for a particular route. Although the timetables are far from where I want them, this is a step in the right direction. Also, the door side is now shown for the destination station the same as it is with transfers. (See screen shot below)

New Route Detail Interface element, click to see the applicable timetable

You can click the blue disclosure button on route start and transfers to see the next trains departing.

In other news:

Custom Seoul City Metro map in early stages

Custom Map to scale in early stages

I've been building my own custom subway map for Seoul that will appear in upcoming versions of Seoul City Metro that will release me from the constraints of the SMRT map. It's well on it's way, you can see images of it's progress via @seoulmetroapp and here.

Busan City Metro is on sale this week too, I've reduced it to $0 as more of a test of the waters. (iTunes Link)

Oh, and I'm back in Melbourne for the time being.

Switch to our mobile site