Lowering Deployment Target for my app - ios

I created my Universal device game app in iOS 7.1 and there for have my deployment target set to 7.1.
I currently use both iPhone/iPad simulators with 7.1 and 8.1 iOS versions.
Would there be an impact, in game performance, if I set my deployment target to iOS 6.1 or 7.0?
Would it be a negative impact if I set it lower than 7.1?

Chances are you could be using code not compatible with older versions. The only way to know is to have the app compile to that iOS version. But, in my honest opinion, you should stick with 7.0 onwards since they are the officially supported versions. You could change your deployment target to 7.0 and try to compile to see the effects.
If you set the deployment target to 7.0, Xcode will tell you which parts of your code are non compatible.
Regarding performance, that depends on what type of code you did and which device you are going to deploy. For that response you need to provide a little bit of more info about your app and code. But like I said before, change the deployment target in 7.0 to at least be sure your code will run on that version.

There would be some performance hits in your code if you are using any functionality that is new to iOS 7.1 because you would need to check at runtime whether or not that functionality is present, and symbols for such functionality would be weakly bound. However, that is extremely negligible and almost not worth mentioning beyond being overly specific.
On the whole, you should not see any performance impact simply by changing the deployment target version.

Related

Selecting Deployment target in iOS

I have an iOS application that I would like to put in the AppStore. I am however lost in the aspect of development target. I do not know if I have to set the deployment target as 11.0 or 10.0. Most of the code works good with 10.x. I would like to know if it's a good practise to set the deployment target to lower version.
Its good to use one version less than the one currently in Market. Of course if you have larger audience using you app and having lower version of iOS on their iPhones, you can choose much lower version as deployment target.
You can set it based on your choice, if you would like to cover all the users using iOS devices then you can set deployment target to 10.x OR as per the latest analytical data from the Apple, there are only 7% devices using iOS 10.x or lower, so you can ignore them too and can set deployment target to 11.x and above.
Refer here: Analytics of iOS Users

What does deployment target mean?

this is a very simple question I'm assuming. Can someone tell me what deployment target means. If I choose IOS 10, does that mean only users with iOS 10 can download the app. Is it bad to choose a lower deployment target? ALSO, continuing on deployment target, is it not recommended to run on a lower deployment target.
Lets say you have set minimum deployment target to iOS 9.
This means your application is compatible for iOS 9 and above devices.
The application won't run on below 9.0 devices but can run on any iOS version greater than iOS 9.0.
The deployment target determines your app's ability to run on older iOS versions.
App with deployment target set to 10 will work on iOS version 10+ (10, 11, 12, 13 ...) but won't work on 9.x.
When a new version of iOS is released, some people do not bother to update their devices to the latest iOS version and thus they can't download your app from the App Store.
Example
If you choose higher deployment target (e.g 12.1), your app won't be able to download for the people who even have latest devices but have older iOS version (iPhone X with 11.0). In Contrast If you choose lowest possible deployment target (e.g 6.0), you try to make your app maximum backward compatible (so even if someone hasn't updated their iOS in ages will be able to download your app).
CAUTION
Many (almost all) newer frameworks and features won't be able to run properly (Behave as expected) on lower iOS versions which increases the chances of app crashes.
What Affects Deployment Target
Following are few factors that demands higher deployment target.
1) Using latest iOS SDK (alone)
2) Using latest iOS SDK specific features (Constraints, newer XIB files etc).
3) Using fast adapting external libraries / Frameworks (e.g Facebook SDK, Firebase etc).
4) Higher Swift Version (5.0) requires higher deployment target vs writing your app in legacy Objective C) !Needs citation.
SOLUTION
We have been using Deploymate for maximum backward support. It mainly assists us about warning the following:
1) Newer APIs that won't work on lower iOS versions
2) Using deprecated methods that won't work on newer iOS versions.
This is when you start fixing your code to make it available for lower iOS versions for maximum compatibility.
Note: Xcode also informs about several pitfalls. Deploymate is neither associates with us or pay us in any form. You can look for other alternates.
iOS Deployment Target(IPHONEOS_DEPLOYMENT_TARGET)
Deployment Target is a minimum version of iOS which is supported by your target.
It means that:
as a developer you support this version and you are able to support all next compatibility
as a user you should have at least this version of iOS
To change it in Xcode 11.5
Build Settings -> iOS Deployment Target
//.pbxproj
IPHONEOS_DEPLOYMENT_TARGET
If you are new to Xcode, I suggest accepting the default, and thinking of it as a constraint on your project.
As newer of Xcode versions come along, support for older target values will be removed. Companies that have extensive customer bases have to deal with this problem in their own way.
In most projects I have worked on, the iOS version matters because it dictates which devices can run your application.
For example, iOS 10 essentially left behind all iPod-style connectors.

How to deal with Xcode update to recommend settings warning?

Recently, I upgraded to Xcode 6. Anything works well except I got a new warning indicates me to upgrade iOS Deployment Target to 8.0. Bellow is a screen shot of the message.
However, I don't want to upgrade deployment target because I want to support any device that has OS version 7.0 and above.
How to ignore this warning? Or perhaps iOS Deployment Target setting has nothing to do with the lowest OS version that my app can support?
I think there is a bit of confusion here, there is a difference between the Base SDK setting and the Deployment Target. Deployment target determines which versions of iOS you support, the SDK version simply determines which version of the SDK you are using to write your code. As long as you don't use any code which requires iOS 8 (Or if you want to use it check that it is available: Checking For Class Availability). So to fix this, you should click Perform Changes. You will still be able to run your app on iOS 7 :)

Updating apps to iOS6

Haven't been able to find an accurate response to this question on Apple Developer forums.
As with other Apple Developers, I will upgrading our apps to support iOS6 devices.
I've downloaded XCode 4.5 which supports iOS6 SDK.
I understand I cannot submit versions of my app to the app store using this XCode build, however:
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?
Should I just be submitting apps with a deployment target of 5.0 or will those fail to run in iOS6?
Should my deployment target only be iOS6 if I am using new iOS6 features?
(confused).
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:
check to see if the feature is available at runtime (e.g. class respondsToSelector, etc);
guard your code within an #ifdef so that it will be compiled only on when possible;
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.

XCode iOS Base SDK setting question

I have an app that I build using XCode 3.2.6, Base SDK 4.3, Deployment target iOS 4.0.
I decided that I should test it with the latest iOS5 beta, to make sure that my app doesn't break, and submit any bug reports to Apple if I find something.
What I found is that if I build the app using XCode 4.2, Base SDK 5.0, Deployment target iOS 4.0, the size of the text in my UILabels and UITextViews renders smaller (by maybe 3 points or so). But that's not really what's important.
I have two test devices, one has iOS 4.3 installed on it and the other has iOS5b3 installed on it. What confuses me is that the shrunken text behavior occurs on BOTH devices.
If I build the app (like I normally do) using XCode 3.2.6, Base SDK 4.3, Deployment target iOS 4.0 the shrunken text behavior goes away on BOTH devices.
My understanding was that the UIKit libraries were linked at runtime on the actual device, and as long as I use APIs that are supported by both Base SDK versions it shouldn't matter which Base SDK I choose.
It wouldn't be so surprising to me if I observed different behaviors on devices running different versions of the OS. But as far as my understanding goes, choosing a different Base SDK shouldn't change any behaviors on a given OS as long as (of course) the Deployment Target setting is low enough to include the OS version and I'm using APIs that are supported.
So what gives? I'm obviously missing something.
I really appreciate you taking the time to help me understand this.
Thanks!

Resources