Now that I’ve finished rewriting my technical book on how to write iOS apps (this time around, it got divided into two books, called “iOS 7 Programming Fundamentals” and “Programming iOS 7”), here are some of the major changes wrought by iOS 7, and how they are likely to influence developers — and hence, the interface and behaviors of the apps that those developers create.
Bars, Buttons, and Breakage — The most obvious effect of iOS 7 on any developer who rebuilds an app using the current version of Xcode is that it totally alters the look of the app. In part, this is because every built-in widget is drawn in a new way. I don’t need to belabor the details, as by now they are notoriously familiar to all users of iOS 7: switches are smaller, thermometers are thinner, buttons are borderless, and so on.
In addition, all apps are now full-screen apps. The status bar is transparent, and an app’s interface extends underneath it and is partly obscured by it — so there mustn’t be anything at the top of the interface that the user needs to read or tap, as both are impossible. Even more surprising, navigation bars and toolbars are translucent by default, and the system tries to extend the interface behind them as well. Thus it is quite probable that a developer who rebuilds an iOS 6 app under iOS 7 will find that parts of the interface have been shifted and hidden behind something else.
Here’s a screenshot showing what iOS 7 did to my Zotz app. On the left, how the app’s game screen looked under iOS 6; on the right, the very same project running under iOS 7. Note the thinner thermometer (at the top), the pale translucent tab bar (at the bottom), and the way the card layout has been stretched to extend behind the status bar and the tab bar.
Trying to untangle the resulting interface mess is so troublesome that many developers will probably find it not worth their time and effort to maintain compatibility with iOS 6 and before. It’s far simpler to drop iOS 6 support, or to publish two different apps (one for iOS 7 and one for pre–iOS 7), than to rejigger one app to look right on multiple systems. It took me several days to fix the way Zotz looked; by the time I was done, I had a decent iOS 7 interface, but there was no going back. On the left, what iOS 7 initially gave me (the same as the right image from the previous pair of screenshots); on the right, what I ended up with.
The settings screen of my Zotz app shows some of the adjustments I had to make in order to deal with changes in how widgets draw themselves. The problem with buttons was particularly acute; the system was no longer showing users that these were buttons — they looked like mere text. To clarify the interface, I ended up drawing my own rather unsatisfactory custom button-like borders. On the left, how it looked in iOS 6; on the right, how I managed to get it to look, eventually, in iOS 7.
Wild Animations and Fake Blurs — iOS 7 hands developers many new animation tools; for example, UIKit Dynamics provides an easy cartoony imitation of real-world physics. Even more important, iOS 7 lets developers use their own animations in new places — in particular, during the transitions between screens. You can see this in Apple’s Calendar app on the iPhone.
Those two screens are part of a standard navigation interface. Formerly, the passage between them would be animated by the new interface sliding in from one side; there was no other choice. Developers are now free to do whatever they like during that transition; the Calendar app performs a sort of vertical zoom. You can expect to see lots of other new and original navigation animations. In my Zotz app, I now animate the transition between the game screen and the settings screen; formerly, such animation in a tab bar interface was impossible.
For certain kinds of transition, iOS 7 also grants developers new freedom as to where the incoming view ends up. A presented (“modal”) view on the iPhone could formerly be only fullscreen; now, it is perfectly legal for such a view to cover only part of the screen. This means, for example, that developers can escape the tyranny of the alert view that pops up in the middle of the screen. Apple’s built-in alert view can contain only a title, a message, an optional text field, and a couple of buttons; now, however, any view can pop up in the middle of the screen, giving developers complete freedom to design their own alerts.
Apple also urges developers to use blurring to suggest that one view is covering another. I do this in my Zotz app, where the user taps a color in the settings screen to bring up a secondary color customization screen. The color customization screen seems to be covering and blurring the settings screen, thus emphasizing its temporary (“modal”) nature; that’s not really what’s happening, but iOS 7 provides tools that let me easily create the illusion.
Secret Sharing — An iOS 7 app that downloads updates to its content can now arrange with the system to be woken or launched periodically to perform such an update, without the app coming to the front, even when the screen is locked. The idea is that the user may no longer have to ask the app to refresh its content; by the time the user summons the app to the front, the app will already have refreshed its content. The user can prevent such background downloads in general or for individual apps, in Settings > General > Background App Refresh. The TidBITS News app (see “TidBITS News 1.5: A Revolution in a Nutshell,” 12 February 2013) is an excellent candidate for this feature.
iOS 7 brings other changes to the sorts of thing apps can do in the background, including new ways of uploading and downloading data over the network, and new ways of tracking the device’s location. Apple claims that these new forms of multitasking are intelligently applied by the system in such a way as to avoid straining the user’s hardware, but I suspect that they may cause reduced battery life. There are many lists of tips for mitigating iOS 7 battery issues, largely uninformed by experimental evidence or knowledge of the facts; it may be that iOS 7 is just a lot busier in the background than any previous system, and that the user can’t do much about it.
Tricky Text — iOS 7 introduces some new text tricks. Dynamic Text is Apple’s name for the user’s new ability to set overall interface text size. The name is misleading; there’s nothing “dynamic” here. Developers are urged to make their apps listen for changes to the user’s preferences in Settings > General > Text Size, and to respond by adjusting the interface. A standard set of fonts for various text “roles” is provided, but these thin, sans-serif fonts are not particularly legible (despite Apple’s claims to the contrary) and are unsuitable for anything beyond labels. The TidBITS News app, for example, will probably be Dynamic Text–savvy with regard to article headlines and blurbs, but for the actual content of an article, I intend to go right on using good old Georgia and letting the user adjust the size directly within the app.
iOS 7 also provides developers with full access to the Mac OS X text layout engine, Text Kit. How developers will use this new-found power is anybody’s guess, but drawing styled text in sophisticated ways will be vastly easier. Expect to see inline images, tab stops, text “decorations” of various sorts (such as special colored underlines or word backgrounds), and text arranged in interesting shapes. For example, I’m not sure whether or how I could have laid out an illustrated price list in columns in previous versions of iOS, but in iOS 7 it’s easy. (The missing “0” isn’t a mistake; it’s to prove that my tab stop aligns the prices on the decimal point.)
Similarly, text that flows from column to column is downright trivial to implement in iOS 7.
Swings and Roundabouts — We hope for bug fixes in any system update. Unfortunately, these are often balanced by new issues. A system-level problem that I ranted about in my article about the TidBITS News app is fixed in iOS 7: state saving and restoration now survives a restart of the device. But iOS 7 has blithely broken another TidBITS News app feature: you can no longer control playback of one of our podcasts from the Control Center or the lock screen, even though this worked fine under iOS 6, and even though TidBITS News is currently still an iOS 6 app (see “Four Problems with iOS 7: Crashing, Messages, Siri, and Audio,” 2 October 2013). Apple’s cavalier attitude toward backwards breakage is particularly evident in iOS 7, and many of my favorite apps have faltered because of this.
iOS 7 is also itself, by a long chalk, the buggiest major iOS system release ever. I filed more bugs on iOS 6 than on all previous systems combined; I filed twice as many bugs on iOS 7 as on all previous systems combined, including iOS 6. Many of those bugs are still sitting open. Many apps are likely to be peppered with workarounds, and some developers are even finding that they can’t upgrade their apps to iOS 7 at all, because fundamental functionality no longer operates correctly.
iOS 7.1 is currently in beta; we’ve had two releases of it to date. I don’t think I’m breaking NDA by saying that so far it’s still swings and roundabouts: some small bugs are fixed, but new ones are introduced. For example, in one of my apps I have an interface element that works fine on iOS 6 and iOS 7.0.3, but iOS 7.1 currently breaks it.
But small bugs are to be expected; larger trends are more disturbing. I pointed out on Apple’s developer forums that a key interface widget, CATiledLayer, worked fine in iOS 4, iOS 5, and iOS 6, but was broken in the very first iOS 7 alpha release back in July — and remains broken, along with a strong suggestion that this was unacceptable — and my message was deleted instantly by the forum monitors. (Luckily they can’t delete the same statement from my book.)
Also, iOS 7 does nothing to address a growing body of large architectural incoherencies in Cocoa Touch, which badly need resolution. I don’t want to bore you with the technicalities, but the mutual enmity between Auto Layout and animation is a prominent case in point.
Back in the iOS 3 and iOS 4 days, I loved the simplicity and elegance of Cocoa Touch. Nowadays, it seems to me to be growing like a clay sculpture created by a classroom of toddlers: people keep slapping bits onto it, and no adults are supervising the overall shape. The chief implication for you, the user, is that if some of your apps seem to be receiving a lot of updates, it may be because developers keep having to dance around Apple’s unpredictable inconsistencies.