First off, let me just say that I may be way off base here. I’ve only just begun moving into the brave, not so new anymore, world of working on iOS apps that don’t always terminate when you hit the home button. My side projects have sat idle since iOS 3.0 was in beta, and for the most part, the projects I’ve been on at work haven’t needed backgrounding. But, after more than a year running iOS 4, and now over a month running iOS 5, I don’t think I am all that far off here.
I fully admit, I saw a bit of a performance hit when I installed iOS 4 over a year ago on my 3GS. But it really wasn’t much. If I hadn’t been looking for it, I may not have even noticed it. Then the iOS 4 enabled apps started coming out, and OH. MY. GOD. I was killing apps like it was my job just to make my 3GS usable again. But it got better. Between a combination of iOS updates, and app updates, I didn’t have to constantly kill apps. From what I could tell, outside of the iOS updates, it was a combination of app developers both better managing what their apps did when backgrounded, and often just deciding their apps didn’t need to be backgrounded.
Then, shortly before iOS 5 was released, it started all over again. Only this time it was worse. App updates started coming out that looked like the only hardware they were being tested on were iPhone 4s and iPad 2s (I’m looking at you Facebook). Apps would hang for seconds, or sometimes even minutes while they tried to do something.
But wait, it gets even worse. iOS 5 came out. Which by itself wasn’t so bad for the 3GS. If you’re careful about which new features you turn on, the 3GS runs iOS 5 pretty well. Until you fire up an app like Facebook. Or, I should say, after you close the Facebook app. Should I forget to manually open the app switcher, and kill Facebook after I use it, my 3GS will very shortly become damn near unusable. Other apps will do this to a lesser degree, but Facebook is the worst offender that I use with any amount of regularity. Or at least I used to. If I don’t kill that damn app, it can take several seconds to actually see my home screen after I slide the unlock control over.
Now, don’t get me wrong, I’m not just bitching here, I actually have at least a shred of a point. And my point is this: Why, in the world, does the Facebook app need to run in the background? Or a lot of these apps? I’ve never had to kill Tweetbot for any reason, but why does it NEED to run in the background? Just because the default Xcode projects all come set to run in the background, doesn’t mean you have to leave it that way. Even the most well written app will still be sitting there taking up some amount of resources until the system decides to kill it.
So my point? The 3GS is going to be around for a while. And it’s being given away for free now with a two year contract. That means that in all likely hood, they’re going to be around for at least another two years. And even if the next major revision of iOS doesn’t support the 3GS, I’d be willing to bet a lot of money that still means the 3GS will be a first class citizen for at least another year.
So please, for the love of whatever you hold dear and/or holy, test your apps on a 3GS. Look at how it runs while it’s being used. And just as important, if not more, look at what it does to overall system perfomance while in the background. Especially on a 3GS.
And yes, this post was all prompted by the fact that one of the projects I work on will soon need to be ready to run in the background. And while I thought it was relatively well put together, when I did the simplest background test possible, and just turned on that flag, well, let’s just say I wasn’t proud of what it did to the performance of my 3GS, and I have some work to do to fix that.

