supporting iPhone 2.2.1 - iphone

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.

Related

How can I decide the oldest iOS version to support in my app?

How can I decide the oldest iOS version to support in my app?
Are there any kind of usage / installation statistics to make this decision easier?
Not officially, but a few of the big developers release statistics on their blogs. Instapaper is a good example. I'm sure there are more if you google around, but for me, its once a version hits 5% or less users, its ok to scrap support for it. (I recently stopped supporting iOS 3.x).
You could also check in your app and send it to a server or something to log and check your own statistics.
A tip from the other perspective. A lot of new features were introduced in iOS 3.2, even a lot of stuff that's not whiz-bang, but you might want to make use of, like gesture recognizers. You're probably likely to accidentally use a few minor features that didn't exist prior to 3.2 when coding, and then when you test on an old device you'll discover you need to rewrite that code. So I would say target at least 3.2.
Some developers are constrained by the oldest OS for which they want to keep a running and non-updated iOS test device. You should not set the Deployment target lower than the lowest OS on which you plan on doing actual device testing.
Note that you should not use raw OS user base statistics, as users of devices running older OS versions seem to be far less likely to buy or download new apps than those users who buy new devices and/or update to the latest iOS version.

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.

Testing iPhone Software on Different Versions Of OS

Before submitting my app I want to test it on devices with the full range of iPhone OS available. So, I have 2 questions that I am struggling with and would greatly appreciate any help or advice.
What versions of the OS are in use?
I know that the App Store will only accept apps for 2.2.1 and 3 but all the features I'm using have been available since 2.0. Is it safe to assume that everyone is running at least 2.2.1?
Where can I find the other OS disk images, so that I can do the test?
The iPhone Development Guide (p43) says search the developer website but I can't find them.
Searching the internet just seems to throw up jailbreak sites.
I can see some dmg files that were installed with the SDK at:
Macintosh HD/Developer/Platforms/iPhoneOS.platform/DeviceSupport/x.x
but XCode Organizer ignores them.
Any help or advice would be greatly appreciated.
Many thanks in advance.
If you just need to test it on the simulator (which is a good approximation of the actual iPhone OS as far as API's are concerned) you can change the OS version by going to Hardware > Versions and selecting your version on the iPhone Simulator app. For me, I see 2.0, 2.1, 2.2, 2.2.1 and 3.0.
Edit: Here's a site that has older versions of the iPhone firmware:
http://www.felixbruns.de/iPod/firmware/
Theoretically you can just "restore" to these older firmware through iTunes, although I haven't tried doing it myself.
What versions of the OS are in use?
Unfortunately this information isn't readily available. I'd love to know. It's clear that virtually all iPhone owners will have moved to 3.0, since it's a free download and there's no good reason not to. For iPod touch users it's not quite as clear, but my guess is that a good chunk of them have not upgraded. I would speculate that there is a strong correlation between the people who have upgraded at the kind of people who pay for applications, but speculation isn't necessarily a very good business case!
Where can I find the other OS disk images, so that I can do the test?
If you want to be all official and above board, you actually can't downgrade an iPhone or iPod touch to an earlier OS release. There are ways of doing it but I can't tell you what works and what doesn't as I've never tried.
The way I do it is test on my handset which usually has the last released version or a late beta. I then use the Simulator and my beta testers to check out how it works on older versions.

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 2.2.1 to 3.0 Transition Best Practices

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