Ray Yamamoto Hilton
Freelance Mobile Architect & iOS Developer in Melbourne, Australia
~

Yellow Pages Australia for iPad

Yellow Pages App Icon

I worked at Sensis as the development lead on the Yellow Pages iPad application. This native app brought print content to a digital device for the first time. Download it from the iTunes App Store.

Yellow Pages iPad Home View Search Results in List View Search Results in Book View Business Profile View

This item is no longer available in the app store

My AppStore apps are currently all reporting that “This item is no longer available in the App Store” or “This item is temporarily unavailable” as of couple of days ago. I have received no notification from Apple and apparently nothing wrong in iTunes connect. After a bit of googling I stumbled across this blog post where it seemed that at least one other person had experienced something similar.

I followed the post’s suggestions and updated my availability date and suddenly the app was marked as “Pending Contract”. However, all my apps are currently freebies and so there are no contracts in place, nor should there be. I filled out as much of them as I could (bar registering for GST), but to no avail.

I seem to be at the whim of Apple’s famously distant customer service right now.

Update: I eventually solved this by releasing a new version of the app, the process seemed to fix the existing app as it immediately reappeared in the app store while the new version was awaiting approval. Go figure!

Block-Based Observations with KVO

Blocks in Objective-C have been a life-saver and allowed our code to become terser and more understandable. Although some of the main parts of the iOS SDK have block-based alternatives (animations, etc), KVO is still based on defining a method with a well-known signature in your observer (not even defined by a @protocol and doesn’t allow the use of arbitrary @selector). I felt there should be a way to be able to achieve this and the result is this project on github.

In order to encapsulate the observation, a new instance of an object that implements the callback method signature is created for each observation and passed back to the caller. It is expected that this object is retained by the caller until the caller wants the observation to end. I’m not totally convinced that this is the best pattern, but it is at least concise and uses the existing language semantics. So, on to a simple example:

1
2
3
4
5
6
7
// To add observation
self.label1Binding = [self.model addObserverForKeyPath:@"exampleValue1" block:^(NSDictionary *change) {
  label1.text = [NSString stringWithFormat:@"%d", self.model.exampleValue1];
}];

// To remove observation
self.label1Binding = nil;

As you can see, this is very terse and means that all the code to react to changing properties can be encapsulated in the one place. The returned value is being set to a retained property so that the binding does not get dealloc’d. This observation will remain in effect until you release the returned object by setting the property to nil (as in the example) or, indeed, set the property to any other binding.

I would be very interested in feedback about whether this works for you.

Honda Sydney Motorshow

Working with jTribe & DT Digital for Honda to build a bespoke iPad-based interactive brochure for the Sydney Motor Show. Around 50 devices were mounted in custom made stands around the various car models.

  • Use of Quartz and CoreGraphics to provide a intuitively interactive and highly dynamic image gallery. Utilising pinch, drag and rotation gestures to manipulate images and basic physics to add momentum.
  • Extensive testing, bug-hunting and memory-leak plugging in order to allow the app to run constantly for 12+ hours on over 50 devices for every day of the motor show
  • Implemented a continuous integration system using Hudson, xcodebuild and various shell scripts to provide continuous build feedback and versioned artifacts.
  • Implemented an Agile process to manage and make visible the outstanding tasks. I also started to measure velocity to better estimate upcoming work.

PBS Radio

I designed and built the PBS Radio iPhone App that streams the AAC+ stream and provides interactive programme guide from Pulse. It is available from on the iTunes App Store

The app pulls interactive programme guide from Pulse. Pulse is the programme information service for PBS 106.7FM that manages the schedule information for the station and whose job it is, essentially, to know what is on when with as great a detail as is possible. Pulse is a RESTful web service written in Ruby/Sinatra and the UI is pure HTML/jQuery/CSS and uses the same API.