What version of IOS to use when upload app to appstore? - iphone

I am just about to upload my first app to appstore :-)
I have tested the app on an iPhone 3G (IOS 4.2) and my iPhone 4. What version of code should i upload and:
If i upload 4.2 to support iPhone 3G, will that cause any problems with newer phones?
If i upload the latest version of the code i guess iPhone 3G's will not be able to run it?
Is it worth while to still support iPhone 3G?
Can someone please recommend me what to do?

If you upload a version that the 3G does not support, then all 3G users will not be able to download the app.
If you upload a version that is supported by 3G, then only if the users have updated their firmware will be able to use the app.
In other words, the role of thumb is: upload the one that is tested on the latest firmware, but can be launched from as many firmware version as possible.
That might mean to just upload the one that is tested on the least firmware possible, but be careful because newer firmware versions might stop supporting certain APIs that you might have used, and then all newer (potential) customers will be locked out of your app.

If i upload 4.2 to support iPhone 3G, will that cause any problems with newer phones?
No.
If i upload the latest version of the code i guess iPhone 3G's will not be able to run it?
You need to compile for arm6 in addition to arm7 architecture.
Is it worth while to still support iPhone 3G?
That's a matter of opinion. This there any requirement for you specific app that requires a iPhone 3GS?

Choosing the latest ios as the deployment version is bad idea. iOS 4.3 isn't supported by Verizon devices, which means that you will lose a big portion of US users.
I believe most of apple's apps are using "iOS 3.1" as the deployment version, and i would recommend choosing the this as the lowest supported version.
iOS 3.1 is the last version supported by the original iphone, which guarantees that all users can use your app. Note it's not enougth to just pick 3.1 as the deployment version. you will have to test it with a REAL 3.1 firmware. There are a few guides on downgrading your iphone to 3.1, which is helpful for testing (such as http://lifehacker.com/5572003/how-to-downgrade-your-iphone-3g%5Bs%5D-from-ios-4-to-ios-313)

Related

iOS version to be consider when developing iPhone/iPad applications

What are the iOS version do i need to consider when developing iPhone application?
Based on my research, iOS 3.x, 4.x and 5.x have been considers as available iOS version. But when I consider with devices there lack devices which is running iOS 3.x.
Can someone help me with finding trusted sources where I can find these details i.e source from Apple or something?
From Apple themselves, 93% of users are on iOS 6:
https://developer.apple.com/devcenter/ios/checklist/
Unless you need to support the iPad 1 or the very old iPhone 3G (not 3GS), go for iOS 6! :)
You can find the percentage of users in this post:
Most current iOS version distribution percentage?
And then decide by yourself which version you should develope to

how to set compatibility of IOS on app

I just submitted my app for distribution, when it showed the following message:
"The binary uploaded for the latest version of this app indicates that iOS 4.3 or later is required. Apps that require iOS 4.3 or later will not be available to Verizon iPhone users. If this app could be compatible with earlier iOS versions, you may want to reject the binary and upload a new one that indicates the earliest compatible iOS."
I would like to make the app verizon compatible, if the process is quick.
If I just change the IOS deployment target on my project to 4.0, should it be ok?
Thanks.
It should, if you haven't used some too recent features obviously.
Update: here's a checklist from the official docs of what's new in iOS 4.x
Game Center
Printing
AirPlay
Various enhancements (iAd, Media player, etc...)
It depends what frameworks and other features you are using with your app and whether they are compatible with iOS 4.0. If there are features not compatible, you might be able to disable them for earlier versions, using "weak linking". If possible, test your application on a device using an iOS version earlier than 4.3.

iPhone application compatibility

Please how can I make sure before developing my iPhone app that it will be compatible with iPhone4, 3GS, iPod touch and 3G?
You need to create the app keeping in mind all the features available in lowest version of iPhone you need it to be compatible to.
For Example:
Suppose you want it to be compatible to iPhone 2G then you cannot use in-app SMS feature as iPhone 2G cannot be upgraded to iOS 4.0 or higher.
In-app SMS feature is only available in iOS 4.0 and higher versions.
Hope this example gave you a proper idea.
Once the app is made, you should test your app throughly on different devices i.e. iPhone 3G, iPhone 3GS and iPhone 4 and iPod Touch.
Unless you test it on device, you cannot be sure because sometimes some of the things work in simulator but crashes on device.
So better to test on device.
Hope this helps you.
If it's the SDK you are talking about, you might want to make sure it runs on iOS 3.X versions. See here for more details.
If it's the hardware you are talking about, you will need to test your app on separate pieces of hardware to make sure that they all run.
The settings in XCode that you make regarding which version of iOS your app will be compatible with is the iOS deployment target and the Base SDK. The Base SDK is the default version you are building against (this should be set to the most recent SDK which is currently 4.3). The iOS deployment target is the earliest version you would like your app to be available for (currently goes back to 3.0 on XCode 4).
These settings are in the settings for your target.
As for if your app will actually work on all of these devices depends on how you program for them. In other words, if you are using new APIs, they obviously will not work on versions that did not implement them.
Hope this helps.
Jamie
You can't be sure without testing. (and even with testing, some say...)
There are potential "gothcha's" in the iOS API documentation, in the Simulator handling of those APIs, and particularly in device performance, which you may not realize or be able to guess until you actually try an app out on all the device models and iOS versions which you plan to support.
Even some simple apps with no undocumented API use and no compiler or analyzer warnings, et.al., have been know to "break" after a new OS version is released.
You can "claim" an app is compatible by appropriate setting of the Deployment Target in the Build settings, lack of plist hardware restrictions, and in the app store submission data. But that's only a claim, not compatibility.

iOS 4.3 SDK - Debugging on a 3G Device

Information on the subject of iOS 4.3 device support is pretty thin on the ground at the moment. However, the lack of a 4.3 beta for iPhone 3G devices (and older iPod touch devices) leads many to believe this could be the end of OS upgrades for older devices.
Even if this assumption is incorrect right now, one day it won't be. There are hardware limits that will eventually stop Apple from supporting the oldest of devices with new iOS updates.
Given that iPhone application development debugging has the requirement of both iOS SDK and iOS version being the same, how would one continue development using iOS 4.3.x SDK releases while doing device performance testing on an iPhone 3G (or older device)? Are there ways of debugging over different iOS/SDK versions? Or do we have to simply drop development support for the older devices and tell those customers who don't upgrade their hardware: "tough"?
You should have no problem running code written using the 4.3 SDK on an older phone. I'm currently doing testing using the latest beta SDK, but running the code on a iPhone 3G running 3.1.3. As long as you are careful to check for the existence of newer methods/classes, your app will continue to run on old OSs. I'm not sure where you heard that OS and SDK versions need to match to debug; that is not true.
If you're willing to forgo the latest features, you should be able to support the original iPhone as long as you like.
You have to set a deployment target with an earlier build number - you can still target 3.0. You just have to be careful about what frameworks and calls you use and check for compatibility.
Since the newer SDK's do not have simulators that support earlier IOS versions, it's important to keep around devices with older builds.
For using iPhone 3G as debugging device in Xcode 4.3 just go to Build Setting and edit
the Architectures to armv6 and armv7 both. armv6 architecture is used for older devices.
Select the Deployment target 3.0.
This will work.

Testing iPhone apps in iOS 3.0

Officially Apple let developers deploy apps that's compatible with iOS 3.0 to iOS 4.2. However there are some APIs and some hardware features that's not present in some devices or in some iOS versions.
However if you only have one testing device, and you want to try to install a clean iOS 3.0 to that, for testing purposes, what is the official way to do it? I tried looking all over Apple developer website and it does not give me anything.
I asked a similar question before: A TimeMachine taking my iDevice back to 3.1.2?
After that I did a thorough research on this topic. It finally turned out, that actually there is no official way for a developer to downgrade her or his own device back to an earlier iOS. Apple just doesn't allow that to happen.
However, in your code, there are many things you can do to make sure your app is supported in an old version iOS. Check this great post: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html
If testing on the iOS Simulator is enough, you can achieve that by installing previous versions of the SDK which contains the older versions of iOS.
As for device, there is no quick way to switch between iOS versions on a single device.
I struggled with this for a while, and eventually gave up on downgrading and bought a used 1st gen iPod Touch, which can't be upgraded to 4.x so it's guaranteed to be 2.x or 3.x (2.x is easily upgraded to 3.x).
Now I test on that. Added benefit is that when testing on it you're at the same time checking the performance on a slower (slowest?) iOS device too.