Saturday, July 3, 2010

[toLiveInThePAST:yes] || [toLiveOnTheEDGE:yes]

Originally this post was meant to be a discussion about should we still support iDevices running iOS 2.x or leave them in the cold and move to newer pasture such as iOS 3.x and beyond.  The original title was even supposed to be : "To 2.x or not to 2.x", but then something happened on June 29, 2010, "a date which will live in infamy" as iPhone developers around the world were told the following : "In addition, the App Store will no longer support applications that target iOS 2.x.".


But this doesn't come as a big surprise to most iPhone Developers as the writing was on the wall for a long time, first with each newer SDK part of the 2.x era was being removed (2.x iPhone simulator, 2.x earlier target, etc...).  And each time Apple was requiring developers to use the latest SDK to submit an apps to the AppStore via iTunes Connect.  Now the latest guidelines is asking us to use the official SDK 4 with the addition of not targetting 2.x based iDevices.

If it wasn't of this announcement I would have probably continue to support 2.x... really???  Well almost, but then again a few weeks ago another big announcement from Apple during the presentation of the iPhone 4 catch my eyes...

iOS 4 upgrade will be FREE to all iDevices (except the none supported one which are iPhone 1st gen and iPod touch 1st gen).

With this change of policy it would mean that almost every iDevices will be able to upgrade freely, so they wont be much reasons for end users to not jump on the latest iOS (unless maybe people jail breaking?).  I remember to have seen the AdMob metrics and also other devs that published them last year that they were always a large population of iDevices that weren't upgrading, more precisely iPod touch which had to pay 10$ to be able to use iOS 3.x.  Some people might argue that those people not upgrading are probably not buying apps anymore, but I beg to differ.  I saw other devs giving their statistics of customers based on iOS versions and saw they were still a dedicated base of customers, it wasn't big but it was there.  Even myself until recently I was still using 2.x on my iPod touch even though I could have upgrade it ages ago and did bought many games (but I know I am not representative of the population in general ;-)).  I am eager to see with this new policy what will be the ratio of iOS 3.x vs iOS 4.x in a few months.

Now it is very clear that I am resigned to leave the support of 2.x behind, but the topic of should we live in the past by supporting legacy systems or live more close to edge by supporting the newest technologies will still be relevant.  But before I delve more deeper into this topic, ill share some background about myself that will share some insight about why I am taking some of those decisions.

They always has been a duality inside my heart/minds about the past and the future (edge), on one side I feel comfortable surrounded with old thing that I know and that I can try to push to new unexplored area.  Which has led me to continue to code on the C=64 until the early '90 even though it had past its time.  Did the same on the Amiga, kept coding on it for several years after C= went bankrupt.  Then on another side I am also attracted by everything that's new and on the bleeding edge that's totally unexplored.  I was one of the first few geeks in Canada to enroll in the Be Inc. dev program and got my first BeBox and started to do BeOS development.  Then later on get into the Tapwave Zodiac handheld development program.  And a few years ago I got into GP2X development, just before starting iPhone development.  As you can see I have followed the path in both directions.

Now we are reaching an important crossroad and they are several paths which you can decide to take.  Will you decide to follow the path of the past on the left side?  Follow the path of the present in the middle?  Or follow the path of the future that is on the edge?  And remember they are no right or wrong answer to that question (as you can see per my title its an OR condition, so you can set the value to yes to any of them or both).

How can you decide which path to choose?  Well they are a few questions you should ask yourself before starting a new project that will help you make a more enlighten decisions.

- Do you want your apps/games to reach the largest customer base as possible?
- Do you want your apps/games to support the newest features if available?
- Does your apps/games is design exclusively for using the newest features?

If you go for the largest customer base, then you will need to think more carefully about what is the lowest denominator of your target, either for the iOS (eg 3.x) and/or hardware features (eg. compass, camera, etc...).  Since if your design requires certain features only available in iOS 4.x or newer generation iDevices then this mean you may restrict the potential users of your apps/games.  You can check the following link on Wikipedia that give a very details comparison of the all the different iDevices characteristics. 

But if your apps/games is neither using newer iOS features or iDevice features, then you may as well target the lowest one, which I would recommend.  This is what I've been doing for my current project code named iQBR1, since its a relatively simple puzzle game it doesn't need the latest GPU nor require some of newer API in recent iOS.  Its 100% based on UIKit for the graphics and use AVAudioPlayer for both music & sound/fx.  No fancy OpenGL ES, In App Purchase, etc... that's why for me previously iOS 2.x was good enough to set as my base target (now this going to be change to 3.x due to the new Apple policy).  And its relatively simple to do so, you first need to set the base SDK that you want to work with and then specify iOS deployment target you want (ill probably make another blog post about those technical details).  IMPORTANT NOTE : Make sure you do have an iDevice with the version of the iOS you're targeting if not you will most probably get into serious trouble.  I offered my help to several developers in the past in tracking some nasty bugs that was occurring only with iOS 2.2.1 while their iDevices running 3.x had no problem.  TIPS : Try to keep a back up of previous SDK as Apple have tendency once they release a newer SDK to take offline the previous one.  Also its better if you can use the same base SDK as your deployment target, as they have been problem in the past with newer SDK targetting older iOS.

Then maybe you decided that you wanted to have the best of both world by getting the largest customer base but then providing extra features for people running the latest iOS and/or using next generation iDevices.  Similar to what was mentioned earlier you still design your apps/games so that it does work on the lower denominator, but then add extra features if you detect a newer iOS and/or iDevices.  But this add a degree of complexity as you  have to make sure to check properly which iOS and/or iDevice is running your apps/games and they are also some other issue.  TIPS : Their was a very informative article written by Noel Llopis (@snappytouch) titled : Targeting 2.x With 3.0 Features. Trouble Ahead which was explaining in great details how to support 2.x and 3.x at the same time.  Hopefully they will be an updated version of this article explaining how to target 3.x with 4.0 features.  But he did post another excellent article titled : Going The iPad Way: All You Wanted to Know About Creating Universal Apps which will be very useful if you decided to target both iPhone/iPod touch & iPad.

But then again, maybe you decided to leave the past behind and live on the edge, indeed the future is looking bright.  By doing so, you don't have to worry too much about previous iOS and/or iDevices as your 100% targetting all iDevices running the latest iOS and/or using the latest hardware.  You can design your apps/games to fully utilize all the latest features and be on the cutting edge (currently Apple is promoting apps/games that are targetting iOS 4.x so this is a great opportunity and incentive to release an apps/games using iOS 4.x newest features).  Also the AppStore already have some mechanism in place to block users that don't meet the minimum requirements of your apps/games.  This reduce considerably the potential complaint of users that would  have tried to your run your apps/games on their outdated iOS and/or iDevices.  IMPORTANT NOTE : Beware their is a flaw, this functionality only work if the user is browsing the AppStore thru the iPhone/iPod touch/iPad, if they are using iTunes they are no such restriction, so make sure to clearly specified in your description what are the minimum requirements.  TIPS : If you aren't specifically targeting the latest iOS and/or iDevices I would highly recommend that you set your deployment target lower (by default in Xcode its set to target the latest one).  Many times I saw some games that could be as simple as tic-tac-toe or sudoku and could only be installed on the latest iOS.  This is in my opinion greatly reduced your potential market for nothing, don't be lazy ;-).  But remember to always test your apps/games on iDevices running iOS you decided to target (unless of course its not possible like what happen with the launch of the iPad where people had to test on the simulator).

Now the choice of choosing path is yours, whichever one you choose they all lead to customers.  Its up to you to decide on how you want to reach your customers and who you want to reach.  As for myself I was previously only following the path of the past, but I will definitely try the other paths in my next projects (I already have several ideas that would require iOS 4.x, some others that are iPad specific, etc...).  Especially now with iOS 4.x being freely available to everyone, I even start to ponder if they will be many iDevices stuck in the past...

I will end this article by asking you the reader, the same question that has been in my head since a few days : Are you gonna still support iOS 3.x or embrace the future of 4.x and don't look back (feel free to give your opinion and answer the quick poll on the right side)?


  1. I just spent the weekend building all 7 of my apps under sdk4.0 and targeting 3.0. I'm worried about the experience for my 2.x users. I thought I had heard 2.x to 3.x upgrade was now going to be free for devices that can't go to 4.0, but I can't confirm. I hope as you said that the app store blocks the installation or update if the minimum requirement is not met.

  2. I was the same as you, supporting 2.x until they basically made me stop. A couple of my devices are still running 2.x too, I just never had a good enough reason to upgrade. I'll definitely be supporting 3.x for a LONG time, there really aren't that many(any?) killer features in iOS4 for me to even consider dropping 3.x support.

    I think a large part of the reason that users don't upgrade to the newest OS has less to do with price, and more to do with the fact that they don't sync their devices to their computers! I usually sync my devices(including my iPhone) only once per month or so at most. It's a painful process and usually takes a couple hours for some reason. I could see a lot of users just never syncing their phones with their computer, which is why they wouldn't upgrade.

  3. @Doug

    Hopefully your 2.x users shouldn't get a bad experience (unless the update is done via iTunes), since in theory only users with the correct iOS version will be able to install the new update. This need to be verified to make sure this what happen for update, but for sure a new installation of apps if you try to install it from the iDevices that doen't meet the minimum requirement will be block. I was also thinking that the iOS update from 2.x to 3.x would have been FREE since the announcement of iOS 4.0 being FREE, but some peoples have report that isn't so :-( (well Apple in their presentation just mentionned that iOS 4.0 was a FREE upgrade).


    Like my article said, I think its up to each developer to see if they need the latest iOS features or not. If I feels I have nothing to gain from targeting specifically 4.x then ill most probably continue to target 3.x.

    Interesting point of view, for the people not upgrading. This could be definitely the case for some less savy people, that just use their iDevices without connecting it to a computer. They probably download all their apps via wifi and/or cellular network. Me I often sync it, so its relatively quick, but that's true that when it has been a while without sync it could be terribly slow (especially if I install many large apps).