Present.app

December 30th, 2012
Spencer Nielsen Follow snielsen42 on Twitter

Both my own siblings and my wife’s siblings have had a Christmas present exchange for the past couple of years and although the gifts are never extravagant, we always try to make them thoughtful. This year we thought it might be fun to give our siblings a choice of which present they wanted. We thought of making a card with the various options printed on it but then I came up with the idea of making a custom app that could serve the same purpose.

But I didn’t want it to simply be a card analog. It would have to take advantage of some of the unique features of iOS and do things that a normal card could not. Maybe we could somehow sneak it on to their iPads without them even knowing and surprise them with it! I was really excited about the idea and so I immediately sat down and started cranking it out. Thus, Present.app was born.

The User Experience

We decided to call the app simply “Present”. After toying around with various ideas for what the app experience should be like, we settled on this:

  • A local notification goes off at 9:00AM PST December 25th, 2012. The message comes up as “Present. To: (sibling + spouse names)“.
  • Opening the notification launches the app and the recipient is presented with an image of a present and a message that reads “Shake to Open“.
  • As they shake the iPad they hear noises of something rustling around inside like a real box. Curiously though, nothing else happens.
  • They continue to shake the iPad and after a little while they hear a crashing sound and glass shattering. Further shaking produces sounds of broken glass jostling around.
  • The message “Oops… I meant ‘Touch to Open’” is displayed and they are then allowed to proceed to the present choice screen.
  • The recipiant is allowed to pick one of the four displayed presents. They can come back to this screen and examine any of the four choices anytime they want.
  • Touching one of the choices brings them to a screen with a funny internet video related to the present they selected and a little quip from us.

Development

Development of Present.app was very quick and dirty. Almost everything hard-coded, nothing modular, no error handling and we only authored it for iPads. The app would only run on iOS 6 devices and also was developed with ARC turned on. To get things done I basically picked the technologies that minimized development time. I used Audio Services to play the sounds, MPMoviePlayer to play the videos and looked for the UIEventSubtypeMotionShake event to detect shaking (which isn’t a very reliable event by the way, but it was good enough). I was able to reuse the app and give it to both to a sibling and sibling-in-law by just changing the name of who the present was for in two places. All told, I spent about 8 hours developing the app (most of which was creating the art and rummaging through Soundtrack Pro looking for sound effects). One of these days it might be neat to productize this idea somehow and publish it in the App Store but that will have to wait for the time being.

Deployment

Making the app itself was enjoyable, but getting it installed on the target iPads without the recipients knowing and making sure it remained undiscovered was probably the most fun. This specific app is never going to see a public release and so using the App Store as a distribution method is out of the question. Apple is notorious for making it really difficult to get apps onto iOS devices without using the App Store (and for security reasons, rightly so). I was going to have to get some alone time with the iPads hooked up to my laptop, mark them for ‘Development Use‘, add their UUIDs to my provisioning profile and build/sign/run the app on their device. This would get it to install on their device and upon first launch, the Christmas morning local notification would register. I then needed to kill the app, disconnect the iPad from my laptop, hide the app somewhere in their Springboard where they wouldn’t notice and get it returned to them none the wiser.

I enlisted my dad and my father-in-law to help with the social engineering required to get a hold of the devices and was able to nonchalantly install the app right in front of them without tipping anybody off as to what I was doing. After prepping my development environment, the actual technical process of getting the app installed only took about 2 minutes. What took significant time was waiting for the right moment to go for it. People’s attention needed to be in just the right places at just the right times.

Execution

I knew from the beginning that in all likelihood the recipients would not be near their iPads at the exact moment that the notification went off. I still thought it would be a fun experience to try for it though. I was able to get one sibling to actually use their iPad when it went off but they weren’t watching at the moment and it got lost with all the other messages in notification center. We eventually just told them to check notification center and then they discovered it and were able to enjoy the gift.

I actually think the most fun was earlier in the morning when we told them that their present was going to “go off” at 9:00AM. That produced all kinds of fun guesses and searches around the house for the mystery present. Both the recipients loved it and both of them ended up picking the iTunes credit option. It was a lot of fun to come up with the idea for Present.app and execute it. I had better start brainstorming now what I can do to one-up it next year 😉

Leave a Reply

Entries (RSS) and Comments (RSS).