iPhone 2.2.1 to 3.0 Transition Best Practices - iphone

Apple is now requiring app developers to submit apps that target 2.2.1 but also build for 3.0. I (and I imagine a large majority of small/part-time developers) only have one iPhone and since the upgrade to 3.0 is irreversible, I wanted to get some thoughts out there as to what are some best practices for minimizing risk during the transition.
I understand there is no foolproof way of doing full regression testing on both OSes, but any thoughts on how one might minimize regressions would be helpful.
Here's Apple's exact text:
Millions of iPhone and iPod touch
customers will move to iPhone OS 3.0
this summer. Beginning today, all
submissions to the App Store will be
reviewed on the latest beta of iPhone
OS 3.0. If your app submission is not
compatible with iPhone OS 3.0, it will
not be approved.
Existing apps in the App Store should
already run on iPhone OS 3.0 without
modification, but you should test your
existing apps with iPhone OS 3.0 to
ensure there are no compatibility
issues. After iPhone OS 3.0 becomes
available to customers, any app that
is incompatible with iPhone OS 3.0 may
be removed from the App Store.

You really can't test on a device against both 2.21 and 3.0 unless you have two devices. If that's really important, you can think about an iPod Touch (assuming your app doesn't require an iPhone).
As far as the simulator, once you install the 3.0 sdk you won't be able to build targeting 2.2.1 any longer. The old 2.2.1 build target gets replaced by a 3.0 target. To support both, you should think about building a virtual machine that retains the 2.2.1 sdk.
However, I agree with Alex... not much need to think about supporting both platforms. 3.0 is solid, and it's clear from today's Apple mail that it's now the major focus, as far as testing & compatibility.
Edit 5/17/09: One thing I learned after this post is that on the Mac, you can't virtualize the Leopard client OS. Apple only allows you to run the server version of OS X in a virtual machine. IMHO, this really limits software developers as a group, among others, and I hope this is changed eventually.

What is your concern about upgrading your phone from 2.2.1 to 3.0? The latest revision seems more or less solid.

I came across this doc on the iPhone Dev Central that might be useful: Technical Note TN2246

Related

iPhone App Run Different iOS

I am getting a fat binary when I go to upload, and I want to make sure that my application can run across 3.0, well even 2.0. Is there a specific way to make sure that this will show when I go to upload. I am not using any specific iOS 4 features, and I only have iOS 4 in my xCode. How can I test different iOS version?
The only way as I could think of is test your app on real old OS version devices. Since Apple prefers its users to upgrade to new OS version as soon as possible, they don't actually provide an official way for developers to test such backward compatibility.
Another relevant questions would be, "can I downgrade my device OS version to an old one, so that I can test my app on them?" I once did a research on SO and other Apple forums, and the result I got was NO, we developers don't have a way to "officially" downgrade our device OS version. Yes there are exceptions, you can try jail-breaking and then downgrading.
For jail-breaking / downgrading your OS version, check this post, A TimeMachine taking my iDevice back to 3.1.2? .
Edited: It's actually pretty easy to make sure that users with old OS versions can downloaded and install your app. All you need to do is set the Deployment Target in Xcode to the lowest OS version you want (iOS 3.0 would be the lowest in Xcode 3.2.5).
However, you need to bear in mind that such Deployment Target only ensures that your app can be downloaded and installed on such old version OS devices. They don't ensure compatibility during runtime. You still need to test your app on real old OS devices to ensure compatibility.
I dont think u need to worry about app version 3.0 below because it is not supported anymore. but how to test on different version, make sure change the iOS deployment target as Thomas refered.
There is no currently supported way to do this.
No current Simulator or Xcode tool will ensure that an app is completely compatible with an OS version older than the SDK used. The 2.0 SDK is not compatible with the current development tools. There is no officially supported way to downgrade a device.
Furthermore, Apple no longer even accepts app submissions that have a deployment target lower than 3.0.
Even most old 1st gen devices, if you can find one on eBay, have been upgraded to iOS 3.1.3. But if you have access to an old device running iOS 3.1.3, you can use that for testing. Many developers keep an old used iPod Touch around for just his purpose.
People with devices running something older than 3.1.3 are not only a really tiny percentage of the installed base, but are very unlikely to be still buying apps for that device. Even large developers with staff and legacy hardware available for this testing rarely waste the time on this market.
Look into Project -> Edit Project Settings -> iOS Deployment Target: 3.13. And then build?
Edit according to comment: You still need to ENSURE your code is within the runtime scope, i.e. do checks like 'respondstoselector' before calling methods in question.

supporting iPhone 2.2.1

I wonder how many users still have not upgraded their phones from version 2.2.1. I'm asking because my iphone application still supports it! Does it make sense to support 2.2.1 when 3.1 is out?
In general it is good to support as wide a selection of devices as possible because it's a bigger potential user base. What is more, for iPod Touch users it is not a free upgrade from 2.x to 3.x, which can be a put-off for them to upgrade. From observations I still see about 20% of my user base running OS 2.2.1 or earlier.
If you find features in later versions of the OS that you'd like to leverage and still keep backwards compatibility as an option, there are techniques for that.

Getting a iPhone OS 2.2.1 app approved after the OS 3.0 release

I’m writing a new iPhone app which doesn’t depend on any of the 3.0 APIs. 2.2.1 should work fine and has a substantially larger user base currently and in the near future as last I checked Apple was expecting iPod Touch owners to cough up $10 to upgrade to 3.0. That leaves a nontrivial number of cheap users who will stay with 2.2.1 as long as they can.
So my goal is to build and release this app using 2.2.1. I know that all app store submissions must run on 3.0, and I plan to do plenty of testing on 3.0. The language on the iPhone OS 3.0 Readiness Checklist leaves me optimistic, but will Apple continue to accept 2.2.1 app submissions (and for how long?), or will they laugh manically and reject any 2.2.1 apps simply to force 3.0?
The main question:
Has anyone on SO released a 2.2.1 compatible app after 3.0 was released and had it accepted (or explicitly rejected with 3.0 being the reason)?
You must test it against both 2.2.1 and 3.0 then I can't see any problems - but I wouldn't assume it will work with both - you must test!
My own app (Task Coach) was built for 2.2.1 (on the 3.0 SDK, but that's irrelevant) and was approved last week, so go for it.
They won't reject a 2.2.1 app unless it fails during 3.0 testing. You should be all set.
Why would they ever stop supporting apps that run in 2.2.1, provided they run in 3.0? You are just not taking advantage of new features, not building a fundamentally different app.
well now it has changed a little. New apps usually come only for iphone OS 3.0 as well as other iphone OS 3.0 approved apps that now longer support 2.2.1 so like for my reson i need the iphone 3.0 software update for ipod touch as for almost every app i want to get doesn't support 2.2.1

Is it worth it to start using iPhone SDK 3.0 features?

I am an iPhone newbie just starting to develop a new iPhone app, and I am wondering if it is better to stick with the 2.2.1 SDK right now or should I actively use features of the 3.0 SDK to build the app? Of course it needs to eventually run on both 3.0 and 2.2.1 devices, so I need to test it on both. But the question is whether there are cool new things in the 3.0 SDK (Xcode and Interface Builder features) that makes it worth using even if I am targeting 2.2.1. For example, I would need to avoid using anything that relies on new 3.0 APIs, but maybe there are still cool new widgets or something that work fine with the 2.2.1 APIs. Is that the case or not? I'm just trying to figure out where I put my focus... 3.0 or 2.2.1.
All apps submitted to the AppStore now have to be 3.0 capable. Luckily the iPhone market is pretty cutting edge and will get the updates. If they are downloading apps, they are probably updating their OS.
If you are planning to launch your app immediately I would say go with 2.2.1 but if you are looking out greater than 3-6 months then go with 3.0 stuff. There are lots of great things in 3.0 such as virtual goods, apis to control itunes music and other benefits. If you app requires features of 3.0 just start developing for it now. 1.0-2.0 seemed to take about 3-6 months for people to update.
Start using the new features but you can't release an app yet for 3.0.
In short, do both. There is plenty of power in 2.2.1 to get your app out the door. Then you can add enhanced features that will improve the experience as 3.0 is officially launched.
I would focus on 2.2.1 for now because that is the most important currently. Make sure it works on OS 3.0 though.
You should use 3.0 - it will be released in one week, and practically everyone will upgrade straight away.
iPhone 3G owners get the OS update for free via iTunes and will probably upgrade almost immediately. iPod Touch users have to pay and the improvements aren't very compelling for iPod users. So there is likely to be a split in the audience for your app if you target 3.0 for a while at least. Eventually so many apps will come out needing 3.0 that Touch users will be forced to upgrade and then it's not such an issue.
Of course, if the 3.0 feature makes your app that much more compelling, go for it, but a lot of app concepts don't of course.
Actually apps submitted to the store need to be 3.0 capable, but that doesn't mean they have to use 3.0 features not available in older versions.
I would actually suggest that you stick to features that will add to your application regardless of them being new to 3.0 or not, and not just add the "new 3.0" features because they are cool or new. Add what your application needs to be successful and nothing more. the less requirements your application has, the more potential customers you have.

iPhone 3.0 beta - what effects does it have on the iPhone?

I am currently developing applications on the 2.2.1 sdk, and considering to upgrading my iphone to sdk 3.0. Can my phone still be used to run old version programs (2.1, 2.2 etc), call, send sms and so on? Or will it be restricted to only be used to test 3.0 developed programs?
Thanks, Hans Espen
The part about "built ... on v3.0" is wrong. Your application does not need to "compilable on v3.0". Apple has never said anything about applications compiled on 2.x not being accepted now, or at any future date. In fact, if you submit an application built against the v3.0 SDK, it will be rejected. v3.0 is still in beta, you are not to build applications destined for the App Store with it. Apple says as much in the email that was referenced, and in the "Getting Ready" doc: "Do not submit applications to iTunes Connect that have
been built using the iPhone OS 3.0 beta SDK."
What you are to do is test your 2.x application running on v3.0. Apple has explicit instructions on what you are to do here: http://adcdownload.apple.com/iphone/important_information_about_iphone_os_3.0_compatibility/important_information_about_iphone_os_3.0_compatibility_1.pdf
As to Hans question, what you are wanting to do is exactly what Apple wants you to do: build your 2.x applications, and test them on your v3.0 phone, following the instructions linked above.
As for your phone's functionality on v3.0, all I can say is that mine works fine, if a little slow at times. 2.x apps work (those that are compatible, anyway), and all functionality is there.
Apple has frozen iPhone development on v2.2 for the past few weeks. All new apps submitted to the App Store have to be on v3 of the OS.
Your phone will still be able to run all your existing apps, and all core services will function. Beware that the OS will be considered Beta and will expire after 30 days. The expiration will require you to download the latest SDK and refresh your device. Not a problem, just an annoyance.
The v3 of the OS is likely to go from beta to generally available during WWDC on Monday (06.08.09), so it may be easier to just wait till then if you do not want to deal with some of the beta hassles.
If you download the 3.0 SDK beta, install it on your device, then you are restricted to only 3.0 SDK development on that device. As far as I know if you have a device with SDK 2.2 and SDK 3.0 you should be able to test your application on both, but as MystikSpiral mentioned Apple has frozen submissions and they are requiring them to be compilable on the 3.0 SDK.
At this point with WWDC next week you should be testing any applications you have on a 3.0 device. It looks like the final build of 3.0 will be released next week alongside a new iteration of the hardware (all signs point to it).