Monthly Archives: December 2012

Google’s Maps App

Google Set to Release iOS Maps App Tonight

Google plans to release its much-awaited iOS Maps app tonight, according to sources familiar with the matter.
The app should be a welcome addition for many iPhone users, who have been unhappy with an Apple-made replacement.

The thing people seem to be forgetting is that Apple made the original Maps app. This new app is going to be a Google app, and they have a notoriously bad track record for making nice iOS apps. Google has the data, but Apple has the style.

Supporting armv6 and iPhone 5

When I was building Static, one of the things I really wanted to do was support old devices. This goal goes against everything Apple and most Mac/iOS developers will tell you: support the very newest stuff possible. The reality is, however, that people have old devices sitting around, and what better way to breathe new life into them than by installing a noise generator!

So, the goal was to support the devices that were the first mainstream units: iPhone 3G and iPod touch 2nd gen.

Technically, this was very easy to accomplish. Static is pretty simple, and all of the APIs I wanted to use have been available since 4.0 (including background audio, even on the old devices). Yay! I quickly built the app, ran some betas, and got ready to submit. All along the way, I was testing on my personal array of devices, as well as beta testers (including iPhone 5 users). Everything went swimmingly.

Then I tried to submit.

“Trying to fathom why building with iOS 5.0 SDK but including an iPhone 5 launch image would be a problem. Tested on device and it works great, but binary is rejected.” –https://alpha.app.net/thaddeus/post/1766801

Apple had begun rejecting apps built with an older SDK that also included iPhone 5 launch images. Um, what? As it turns out, there are known issues with some UI elements in the OS with these combinations, so Apple quit supporting it. 1

So I started Googling for some answers. I found some crazy hacks,2 and a few good pointers. 3

Here was my simple solution:

  1. Build with Xcode 4.4.1 It supports armv6+armv7 and has reasonable SDK support
  2. Use PlistBuddy to modify Info.plist before signing

The bundle’s Info.plist contains details about how the app was built, including the SDK and tools versions. I grokked these values from an Xcode 4.5 + iOS 6 SDK build, and then dropped them into the script. One of the other ideas I turned up on Google 4 suggested keeping a proper plist around and simply copying during this stage, but that means merging real plist changes back to the copy as well. My approach is easier to maintain in the long term. 5

That’s it. Here’s what my build step looks like:

Build phases for supporting armv6 and iPhone 5

Feel free to reply on Twitter or post back on App.net with any questions or comments.

  1. Hat tip to Peter Steinberger for catching me up on those details.
  2. How to support both armv6 and armv7s for release build in xcode 4.5 – Don’t do this. Seriously.
  3. Building for armv6 in Xcode 4.5 – Interesting, but I didn’t feel like having to maintain a hacked-together version of Xcode
  4. Submit to App Store Using XCode 4.4.1 With iPhone 5 Supported – My approach is based heavily on this, but without maintaining a copy of the plist that has to be merged
  5. The longevity of any of these hacks is admittedly questionable, at best

Shipping Is Hard

Almost two months ago, my wife and I were discussing a noise generator app we’d used while our first child was very young. As we recalled the app and remembered how ugly and simple it was, I decided that it wouldn’t be very difficult to improve upon. A few minutes after our discussion, I tweeted:

Wife: “that’s a cool idea.” Me: “CHALLENGE ACCEPTED”

The first proof-of-concept for the app took me just over eight hours. I was able to loop static noises, and had some very basic remote control support in place. It worked, but was hideous. So I spent the next week or so considering some ideas and implementing a few of them. I collected some new beta testers, and started showing people what I was working on.

About a week before I planned to submit the app to Apple, I realized the design was still hideous. I scrapped the UI, and started fresh. The result was something much more satisfying, and I’ve sworn the beta testers who saw the first stuff to never reveal how awful it was.

Static 1.0, connected to a remote device

Static is a noise generator that can be remotely controlled from other instances of the app.

In the end, this weekend app took almost two months to build. Even after writing software professionally for years, it still amazes me how hard the last 20% of a project is.

Static is currently submitted for review with Apple. Once available, I hope you’ll check it out. The app is free to try, with unlimited use of one sound (including full remote control capabilities). Additional sounds and future features can be unlocked with an in-app-purchase.