How the iPad Mini integrates with Human Interface Guidelines

The iPad Mini is going to be an odd device. It is, after all, effectively a ‘concentration’ of an iPad 2. The fact that it has iPad 2 internals would suggest that the 2010/2011 generation devices (iPad 2, iPhone 4 and, based on internals, the iPad Mini) will probably be continued to get updated to the latest version of iOS up until iOS 9. I assume this is based on the fact that the iPhone 3GS was released with iOS 3 and but it still received the following three updates. Because the iPad Mini was released with an iOS version two versions newer it would suggest that the iPhone 4 or iPad 2 may receive as many as five version updates.

When the iPad Mini was announced a lot of people trashed Apple because they were effectively back tracking on what Steve Jobs had said about 7-inch tablets. A problem that Steve had cited was that developers would either develop scaled up phone apps or scaled down tablet apps and either way they would be hard to be use. Turns out he was wrong.

Apple’s Human Interface Guidelines for iOS are a collection of lots of long documents that basically just encourage developers to make beautiful, easy to use apps. There is one explicit requirement that apps should use touch targets at least 44 by 44 points. A point on a non-retina device is one pixel, on a retina device it is 2 pixels wide. This means that the actual size for touch targets on different Apple devices are the following:

Basically Apple has sized the iPad Mini at incredibly convenient size for developers because it means that touch targets on full size iPad apps on an iPad Mini will still be above (exactly) the minimum iPhone requirement. The major benefit for developers is that they don’t have to effectively scale up their touch targets so that they are big enough for the guidelines on the iPad Mini. In theory targets will remain their current size on the full size iPad too. An alternative way of looking at it is that there is no way that the iPad Mini could have been smaller without it breaking Apple’s own guidelines.

Given that the touch targets are phone size it also suggests that Apple reckons you’ll be using the iPad Mini in your hands more. It is reasonable to sit a full size iPad on a desk or your lap, but that probably won’t be happening with the iPad Mini because you don’t do that with your iPhone.


Keep Calm Creator updated to version 1.2 on the App Store


This afternoon Apple approved my latest update to Keep Calm Creator for iOS which introduces some bug fixes and also includes an icon pack which you can optionally purchase to access over 1000 (rather than the default 150) icons. I’ve also added in a search feature as well.

Keep Calm Creator v1.2 available for free on the App Store


Keep Calm v1.1 iOS 6 iPad bug

In the reviews of Keep Calm for the last week or so people have been complaining that they can see the text ‘Tap add to create a new poster’ but they cannot see the Add button. I tried different strategies to get the app to ‘not display the add button’ but I could not work out what the problem was. As far as I was concerned it worked fine in the simulator and a real device running iOS 5.1 and 6.0. But then I noticed a problem.

Basically the ‘bug’ only seems to occur when the user launches the latest version (1.1 – v1.2, which is in production, clears up the bug) of the app on an iPad running iOS 6 in landscape mode. Ironically it can be resolved by launching the app in portrait mode or rotating the iPad to an alternative orientation after the app has launched.

Another ‘bug/user error’ that is occurring is not being able to save posters on iOS 6. You must go into Settings > Privacy > Photos and ensure that Keep Calm is allowed to access your photos otherwise it cannot save your posters.

Developer bit on why the orientation bug has appeared

The fundamental element of the app is a UIViewController. When the app loads all my code in viewDidLoad gets run as if the app is in portrait mode regardless of device and actual orientation. Previously I had a lot of generic code that set up the UI based on screen dimensions; I needed universal code that would run on iPhone/iPad/(iPad Mini?) and in iOS 5 so I couldn’t – and didn’t really want to – use auto layout.

On iOS 5 willAnimateRotationToInterfaceOrientation:duration: then gets called if the app is running in landscape mode so that orientation configuration code can be run. The code in here all works quite nicely and configures the UI but the problem occurred because iOS 6 no longer calls this function on launch (but does still call it when the device is rotated, hence why rotating the device resolves the issue).

It turns out that iOS 6 will now call viewWillLayoutSubviews after viewDidLoad. This also gets called for other reasons as well so I resolved the issue by adding a boolean property and only calling willAnimateRotationToInterfaceOrientation:duration: on the first call of viewWillLayoutSubviews. This resolved the issue on iOS 6 and maintained backwards compatibility with iOS 5.