Updating apps to iOS6

北战南征 提交于 2019-11-30 06:56:22

Since this is a pretty generic question about supporting multiple versions of iOS and does not cover any iOS6 specific things (covered by NDA), here goes my answer:

if I re-compile and build an app using the deployment target of 6.0 and fix all the known issues e.g. deprecated methods etc. when Apple releases GM for iOS6, will any build compile and work with iOS5 devices as well?

In principle, yes, it will, provided you have not used any iOS6-only feature or you did it properly (see the answer to your third question). However, testing against an actual device running iOS5/4 (or the simulator) is almost mandatory if you want to be sure that things work correctly.

There is also a chance that something that is currently working under an older iOS version will just break on iOS6 (this can happen in case some bugs were added, but also in case some bugs were fixed and it happens that your code had a bug of its own that countered the effect of the former). So, testing is the king. (Thanks to rsswtmr's comment about this).

Should I just be submitting apps with a deployment target of 5.0 or will those fail to run in iOS6?

You can specify a deployment target of 5.0 if your app does no use any iOS6-only feature (or you do it properly, read later); in other words, this setting will not break compatibility with iOS6;

Should my deployment target only be iOS6 if I am using new iOS6 features?

It can, but it is not the only way.

If you specify your deployment target as iOS6, then you can freely use any iOS6-only feature in your app without concern. The app store mechanics will prevent your app from being installed on any older device and you will be safe.

On the other hand, if you specify your deployment target as iOS5 or older, then you can still use any iOS6-only feature in your app, but you should properly support older versions of iOS by "guarding" any usage of iOS6-only features and providing a fallback for iOS5.

This means the following: say that you are going to use featureA only available on iOS6; what you can do is:

  1. check to see if the feature is available at runtime (e.g. class respondsToSelector, etc);

  2. guard your code within an #ifdef so that it will be compiled only on when possible;

  3. if the check at 1. will fail, define a way out for older iOS versions.

Have a look at this post on supporting multiple iOS versions.

Set "Base SDK" to Latest iOS and "iOS Deployment Target" to the older version you plan to support (iOS 5.0 for instance).

Add conditional code to use feature available in latest iOS without crashing in the old one supported.

The section "Conditional Coding" in this Apple guide can be helpful. Also check other questions on the subject in SO.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!