I’m porting an app that was originally targeting iOS 3 to an iOS 7 support only. Almost three years later, so much have changed.
When I started programming it, iOS 4 was pretty new and not everyone upgraded to it. You know, there wasn’t over-the-air upgrades and you had to use iTunes for upgrades. No wonder only geeks were upgrading.
We decided to support iOS 3. Here are some stuff that weren’t available back then:
Blocks. Can you imagine programming without using blocks? I can’t, but that’s what we did back then.
GCD. There was no Grand Central Dispatch. Doing background work wasn’t easy as it is today.
ARC. No automatic reference counting meant worrying a lot about leaks, crashes and retain cycles. With ARC, you mainly have to consider retain-cycles and choosing between weak and strong references.
UIAppearance. There was no way to customize the basic UIKit controls. If you wanted a UISwitch with a different color, you had to build a complete custom switch control by yourself. It’s not just UIAppearance, it’s more that Apple understood that apps needs a unique look.
The list goes on and on. These are the things that I added to the app as time went by. When iOS 5 came around, we dropped iOS 3 support, introduced blocks, GCD and ARC into the app. When iOS 6 came out, iOS 4 support was abandoned and we could more easily customize the look and feel of the app.
Our current app is supporting iOS 6 and iOS 7 at the same time. This is horrible. We can’t leverage what iOS 7 has to offer and a lot of the UI is compromise. Going iOS 7 only is the only sane thing to do.
As we’re going for an iOS 7 only release here are some things I’m glad for:
Pull To Refresh. When we added pull to refresh to our app there weren’t many apps using this technique and it added a premium feel to our app. Our custom built pull to refresh control is no longer needed as Apple added UIRefreshControl a long time ago.
UIViewController Containment APIs. It’s so easy to keep sanity with UIViewControllers and the containment APIs allow creating a smart and scalable view hierarchy.
Custom Tab Bar. To customize it, we had to build our own UITabViewController subclass. Who needs it now. Deleted.
Custom Navigation bar. We wanted a background image for it, this wasn’t possible back then. Also gone.
HTML Strings. I remember that for adding an underline to some part of a UILabel, you had to split it into 3 parts. Not anymore, Attributes strings are so easy to create these days, you can even use HTML to create them.
@2x only. The era of retina only devices is here. Goodbye half of the images.
Flat out. A lot of retina images are also on their way out since most of the design gone flat. Almost no need for images
viewDidUnload. It’s not being called anymore by the OS. Wow, a lot of code is going to the trash!
AutoLayout. Not sure what I think of this yet. One thing I do know is if you’d like to achieve a html/css like rendering of UIViews then this is the way to go. Instead of calculating UILabel heights, let iOS do it for you.
UIDynamics. We’re surely not going to use this too much, but when physics are needed, we’ll surely use it.
Receding keyboard like the messages app. This was one feature we really wanted and implementing this was painful as hell. I can’t believe it’s now just a boolean value away.
There are so many options to make the app much better with iOS 7: Better handling of push notifications, background fetches, custom transitions, multipeer connectivity and so much more. iOS 7 also keeps us focused on the content and not the chrome, this is the ultimate key strength of iOS 7.
The iOS 3 app pushed what’s possible to the edge and beyond, I’m hoping to do the same for iOS 7.