Archive for May, 2010



Yes, it’s that time again, time for another chef-d’œuvre from the troll kitchen; and today the main course is something a little different, a step into the world of politics. Specifically, the upcoming Toronto mayoral election. No, seriously, the upcoming Toronto mayoral election. Presenting … iRocco!


Now, just in case anybody happened to miss this before, Galactic Troll HQ is in downtown Vancouver, and that is a long ways from Toronto. We have absolutely no idea what the issues are in the Toronto mayoral race, nor do we have any idea of how Messr. Rossi stacks up against his competitors …

… other than that quite obviously his campaign has the most discerning taste in iPhone developers compared to whomever that competition is! And since we can’t think of any other way other than choice of iPhone developer in which the office of Toronto mayor could possibly affect us, well that’s quite enough to merit The Official Troll Endorsement, isn’t it now?

(If, on the other hand, you need some other proof than “has a troll produce their iPhone app” of the manifest suitability for high office of a political candidate — although we certainly can’t imagine why! — then here is the campaign website for you to figure it out for yourself.)

And we do have a warning for anyone planning something along these lines, specifically that includes a “Donate” page: You know that bit in the agreement, section 3.3.21 to be exact, where it says

Your Application may include a direct link to a page on Your web site where you include the ability for an end user to make a charitable contribution, provided that You comply with any applicable laws…

Now, it says “a direct link to a page on Your web site”. Is it not reasonable, we ask rhetorically, that to take a URL and load it into a UIWebView should qualify as “a direct link to a page on Your web site?” Well …. not so much, it turns out:

Donations are not permitted to be taken within the application, however it is possible to provide a donation link to your web site. This link is required to open Safari to collect the donation. We encourage you to make the necessary changes to your application and resubmit it for review.

Begosh and begorrah! What, we ask, WHAT is the significant difference between “load it up in a UIWebView” and “required to open Safari”? Mutter, grumble. Well, now we know. And hey, at least it wasn’t rejected for anything actually wrong with the code.

So there you go. Should you have any interest in the Toronto mayoral race, Dear Reader, you know what to do!



C99 Tricks

So you think you know the C programming language? Well, we’ll just betcha that you’ll find out something new by checking out

Fun with C99 Syntax

The C99 language added some pretty neat features to the ANSI C we know and love (now known as C89). I used a construct called compound literals in my iPad Dev Camp presentation, and it seemed new to a lot of people. Here’s a summary of some lesser known features about C99 that are worth knowing. And, since Objective-C is a strict superset of C, all this applies to Objective-C, as well. Best of all, as of recent Xcode (3.0? 3.1?), C99 is the default C dialect for new projects, so you don’t need to do anything to start taking advantage of these…


Sparrow Framework

Here’s a new open source iPhone game programming library for you: Sparrow!


Sparrow is a pure Objective C library targeted on making game development as easy and hassle-free as possible. Sparrow makes it possible to write fast OpenGL applications without having to touch OpenGL or pure C (but easily allowing to do so, for those who wish). It uses a tried and tested API that is easy to use and hard to misuse…

“But wait!” you think no doubt, “aren’t you a big fan of cocos2d in your game projects?”

Why, yes, yes indeed we are; but there’s a clue in the above as to why this Sparrow thing is worth knowing about anyways. That clue is “a tried and tested API.” What does that mean? Well, it is explained more clearly here:

… But the killer feature of Sparrow is the following:

Many of you will already be familiar with it.

How come? It’s very similar to the Flash API. Anyone who has made a Flash game will feel at home instantly. You have got all the classes you are familiar with: DisplayObject, Sprite, TextField, etc. You can use the same event model, including bubbling events, etc. We only made some minor changes where we thought it made sense to do so. (E.g.: instead of the class couple “Bitmap” and “BitmapData”, you have got “Image” and “Texture”)…

So since due to the Steve Jobs Objective-C Developer Full Employment Act (aka Section 3.3.1) you may find yourself in the position of considering a Flash project port to a native application, this looks like it could indeed be an appropriate tool for that task. If so, here’s a tutorial to get you started!


And here’s another: Animations In The Sparrow Framework Game Engine Explained!



There’s a new version out of AQGridView — which, hmmm, doesn’t look like we’ve actually mentioned before, although the thought had crossed our minds when we saw news a little while back of its Best Developer Tool win at iPad Dev Camp. So what is this award-winning piece of spiffiness, you ask?

AQGridView is an attempt to create something similar to NSCollectionView on the iPhone. If CALayoutManager were available on the iPhone, specifically the CAConstraintLayoutManager, then this would be relatively easy to put together. However, since none of those exist, there’s a lot of work to be done.

AQGridView is based around the programming model of UITableView and its associated classes. To create this class I looked long and hard at how UITableView does what it does, and attempted to replicate it as closely as possible. This means that if you are familiar with table view programming on the iPhone or iPad, you will find AQGridView simple to pick up…

Originally written for the Kobo ebook app — free to check out!



If you want to pass your Objective-C objects across a network connection, this may be worth looking into:

There’s a few problems with Distributed Objects that bug me:

1. Uses exceptions for errors, which just feels unnatural and cumbersome in Cocoa

2. Claims to be capable of more than it really is, such as sending any single ObjC message call over the net (see mikeash’s example regarding -getObjects:range:), and acting like a normal Cocoa object

3. Defaults to synchronous message calls, potentially over the internet(!)

4. It’s guts are not interchangeable, meaning you cannot fiddle with the lower level parts at all

The framework SocketObjC is very similar to Distributed Objects, with a few major differences:

1. All messages are sent asynchronously

2. The underlying message passing system simply uses TCP via AsyncSocket

3. Instead of exceptions, problems are simply ignored (this could easily be fixed by anyone)

4. Messages with return values can handle those returned values using block callbacks, making use of what I later learned is called “Continuation Passing Style”

5. Limited to passing and returning objects that conform to NSCoding

6. Possible to add support for secure TCP message sending (via CFStream/CFSocket, via AsyncSocket)

As you can see there are some trade-offs, for better or worse. But all in all I think this is more useful than DO for passing messages across the internet.

h/t: !



Got a need to integrate Flickr support into your iPhone or desktop app? Well, here’s the open source project for you:

ObjectiveFlickr is a Flickr API framework designed for Mac and iPhone apps.

Yes, straightforward enough and you’d probably have googled it yourself if you need it, but we’d like to draw your attention to this interesting idea that might not have occurred to you about how to integrate web pages and iPhone apps:

…iPhone and iPod Touch posed a challenge to the auth model above: Opening up Mobile Safari then ask the forgetful user to come back is a bad idea.

So many iPhone developers have come up with this brilliant idea: Use URL scheme to launch your app. It turns out that Flickr’s web app auth serves the idea well. Here is how it works:

   1. The app prompts user that it’s going to open up browser to ask for permission.

   2. The user taps some “Open” button, and the app closes, Mobile Safari pops up with Flickr’s login (and then app auth) page.

   3. Then magically, Mobile Safari closes, and the app is launched again.

   4. There’s no Step 4.

What’s behind the scene is that the iPhone app in question has registered a URL scheme, for example someapp:// in its Info.plist and the app developer has configured their Flickr API key, so that when the user grants the app permission, Flickr will redirect the web page to that URL the app developer has previously designated. Mobile Safari opens that URL, and then the app is launched…

Well yippee, perhaps you are thinking, now when would I ever care to jump out to Safari and back when I’m writing an app?

Ah, let me tell you when you would care to jump out to Safari and back when you’re writing an app.

You could care to do that if you write an app that loads up a web page to make a donation in a UIWebView, and when you send your shiny new app off to Apple, BRRRRAAAANNGGG it bounces back with

Thank you for submitting [REDACTED] to the App Store. We’ve reviewed [REDACTED] and determined that we cannot post this version of your application to the App Store because it does not adhere to the charitable requirements outlined in the iPhone Developer Program License Agreement …

… Donations are not permitted to be taken within the application, however it is possible to provide a donation link to your web site. This link is required to open Safari to collect the donation. We encourage you to make the necessary changes to your application and resubmit it for review.

Well, the license doesn’t say it has to open in Safari, it just says “a direct link to a page on Your web site”. And that’s exactly what was in the UIWebView, @#([email protected]^#$^!!! it. So we duly complied and resubmitted, but it makes the experience significantly more annoying. But if this clever stratagem had occurred to us, we could have had the opened-in-Safari page open back up the triggering application. That would have made for a happier client!


Placing Settings

Here’s an excellent article dissecting, with scads of backing opinions, the pros and cons of putting your settings in as opposed to in your application.

Personally, from observing actual users it seems pretty clear that on the order of 98% of them have absolutely no idea whatsoever that they should look anywhere other than in your app for settings that control your app. Understandably enough. Which makes that decision pretty easy. Still, the reasoning and discussion of appropriate UI here is worth a read.

Bonus: Vector and bitmap icon package for the commonly used “cog” and “info” settings tab bar/toolbar icons!

h/t: NotTooBad!


HTML5 Roundup

Here’s a collection of iPhone-targeted HTML5 links we stumbled across recently, for whenever it is you decide to get into writing cross-platform or non-AppStore apps:

Tutorial: Your First Mobile HTML5 App – The Basics, Forms, and Geolocation (Part 1)

Tutorial: Your First Mobile HTML5 App – Offline Storage (Part 2)

Nice and easy introduction.

HTML fullscreen apps for the iPad

Some handy formatting tips.

Create offline Web applications on mobile devices with HTML5

From IBM developerWorks, no less; provides a sample inventory management application, tested on an iPhone 3GS and a Palm Pre.

Opensourcing Golingo

Source of a word puzzle game published in the App Store, created with Titanium Mobile and Web code.


Sprite library using the canvas tag, targeted at retro pixelated games; several playable demos.

Japstore – The free Javascript application store

Bookmarkable Javascript applications and a downloadable SDK to create them.

Parcycle: A Particle System with HTML5 canvas

Oh, we just love those particle systems, yes we do. Browser and offline webapp demos for your hypnotic pleasure. And dig around on the site for other links to various webapp examples.


Learn HTML5: 10 Must Read Lessons has a bunch of good stuff.


Tip: Shipping App Size

Just in case you ever need to know in detail:

How to calculate the final size of an iPhone App before approval

but briefly, since your executable is encrypted for the store it’s not going to compress well; so for a rough guess, try

  1. open the .app bundle via right-click -> Show Package Contents (on Mac)
  2. locate the executable file and remember its (uncompressed) size (Size “A”)
  3. delete the executable from the bundle
  4. zip the bundle and remember the bundle’s compressed size (Size “B”)

Size “C” are the 100 KB from the additional files added to the bundle by Apple. The final calculation for the maximum size of your App is as follows:

A + B + C = maximum size of your App after approval

The calculation put in words:

(uncompressed executable size) + (app bundle compressed but without executable) + 0,1 MB = maximum size of your App after approval

Handy to know if you’re butting up against the over the air download limit!


5 Ways to Draw a Shape

Unless you’re a really serious CoreGraphics expert, there is almost certainly something to be learned here:

5 ways to draw a 2D shape with a hole in CoreGraphics

In this post, I look at 5 different ways that you can draw a very simple shape: a square with a triangular hole cut out of the center. In a drawing environment like CoreGraphics which offers double buffering, winding count path filling, even-odd path filling and clipping regions, there’s no single answer. An iPhone sample project is provided containing the code but all drawing functions are identical on the Mac…