What does deployment target mean? - ios

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.

Related

Does user's iOS version limit their ability to install an app from the app store, is there a way to make it universal? [duplicate]

I wanted to ask how compatibility on different iOS operation systems works in iOS. For example If I develop an app on Xcode 9.2 and Swift 4 for iOS 11, should it work on iOS 9?
I am coming from Android background which you specify the minimum Android OS that is needed for the app to run in the Gradle file. Does anything similar exist on iOS?
Very simple solution:
Set deployment target as 9.0 in your build target general settings. iOS will automatically handle support from 9.0 onwards for a build (your app).
Your app/build will be allowed to use/import frameworks and other libraries, compatible to minimum deployment target, only.
More detail about App Deployment Target from Apple.
Please set your deployment target to 9.0
Yes, it will work on iOS9
With Xcode 9.2 and swift4 you can develop an application for ios8.0 and above.
In your project setting, you have to select your development target
Yes, there is backward compatibility, but for older iOSes you have to check version when using newer API. Luckily we've got availability attributes (#available)
If you want to know HOW it works, basically for Swift your application has its own swift standard library embedded into binary of your application. In case of Objective C – newer iOSes keep sdk's of older versions to maintain backward compatibility.

iOS Compatibility on different iOS Operation Systems

I wanted to ask how compatibility on different iOS operation systems works in iOS. For example If I develop an app on Xcode 9.2 and Swift 4 for iOS 11, should it work on iOS 9?
I am coming from Android background which you specify the minimum Android OS that is needed for the app to run in the Gradle file. Does anything similar exist on iOS?
Very simple solution:
Set deployment target as 9.0 in your build target general settings. iOS will automatically handle support from 9.0 onwards for a build (your app).
Your app/build will be allowed to use/import frameworks and other libraries, compatible to minimum deployment target, only.
More detail about App Deployment Target from Apple.
Please set your deployment target to 9.0
Yes, it will work on iOS9
With Xcode 9.2 and swift4 you can develop an application for ios8.0 and above.
In your project setting, you have to select your development target
Yes, there is backward compatibility, but for older iOSes you have to check version when using newer API. Luckily we've got availability attributes (#available)
If you want to know HOW it works, basically for Swift your application has its own swift standard library embedded into binary of your application. In case of Objective C – newer iOSes keep sdk's of older versions to maintain backward compatibility.

Is there a restriction on how low one can set the deployment target when submitting to the app store?

I have about a 200+ iPads (1st generation), that my company uses. They work fine (like new).
The latest version of Xcode only lets you set a deployment target of 8.0.
I can download an older version of Xcode that lets me set a deployment target of 5.0 (for 1st generation iPad).
If I set the deployment target to 5.0, and submit via an older version of Xcode, will I have a problem submitting to the app store ? Is there any restriction on how low one can set the deployment target when submitting ?
The current App Distribution Guide says "For example, the lowest available setting for iPad apps is iOS 4.3." ( Setting the Deployment Target ) but my Xcode 7.1.1 doesn't seem to allow any deployment target for an iPhone project to be lower than iOS 6.0. So YMMV I guess. Basically the minimum is whatever the minimum supported Xcode version (Is Xcode 5 still allowed or does the store now require Xcode 6? I don't know) allows in the popup for the project deployment target.
One other factor - if you use Swift that limits you to iOS 7.0 and later.
Please check guideline below:
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringYourApp/ConfiguringYourApp.html#//apple_ref/doc/uid/TP40012582-CH28-SW21

Should sdk = deployment target?

And what will happen if it's not the case.
This may seem like an easy question.
Say base sdk is 5. Why can't it run on ios 7? What? Ios 7 can't run stuff built with base sdk 5?
So is it true that base sdk must be bigger or equal deployment target? If so why?
What would be the plus and minus if the 2 numbers are different?
I am looking for answers that answer:
1. Bad things happen if sdk > deployment target
2. Bad things happen if deployment target < sdk
From Apple
Choose a deployment target. This identifies the earliest OS version on which your software can run. By default, Xcode sets this to the version of the OS corresponding to the base SDK version and later.
And
Choose a base SDK. Your software can use features available in OS versions up to and including the one corresponding to the base SDK. By default , Xcode sets this to the newest OS supported by Xcode.
Your Xcode will likely only have a base SDK option of whichever is the latest iOS version it knows about (6.1 for Xcode 4.5, 7 for Xcode 5). That lets you use the newest features.
Say base sdk is 5. Why can't it run on ios 7? What? Ios 7 can't run stuff built with base sdk 5?
Nonsense, it can run on iOS7. And it will run on iOS8 when that comes out. It just can't use features that didn't exist yet.
So is it true that base sdk must be bigger or equal deployment target? If so why?
Xcode let me set base < deployment, but I don't see why you'd want that, or if it would actually run.
What would be the plus and minus if the 2 numbers are different?
Advantage: you can run your app on older devices.
Disadvantage: you have to make sure that you only call APIs that exist on the current version. Meaning, if you use iOS6-only features, you have to detect that you're running on iOS5 and not use them.

XCode deployment target iOS 6 = compatibility to?

I seem to be not understanding the effects of a specific deployment target in XCode (4.5) correctly. Specifically, I got an app in the app store that was previously set for deployment target 5.0, meaning on the app store page it says "requires iOS 5.0". So when I now set the deployment target to 6.0 in my next update, does that mean it'll require iOS 6 and otherwise won't start? I'm not using new iOS 6 features in my update.
I guess that means I should stay at 5.0 for my deployment target, but then what is the point of changing your deployment target (provided the one you had used previously is not totally obsolete)?
There are two primary settings used for your targeting your builds:
Base SDK & Deployment Target.
The Base SDK = What are the latest features I want available in this app?
The Deployment Target = What is the earliest OS I want to be able to run this app?
So, if you have both of these set to iOS 6, the user must have iOS 6 to install or run the app.
If you have a Deployment Target of iOS 5.0 and a Base SDK of 6.0 that means it'll install and run in iOS 5.0, but you need to be careful to branch your code and not use any iOS 6.0 features if the user is running on an iOS 5.0 device.
So when I now set the deployment target to 6.0 in my next update, does that mean it'll require iOS 6 and otherwise won't start?
Yes, if your deployment target is iOS 6, then users will need iOS 6 or above to run it. Simple as.
Your deployment target is your baseline for supported devices, it's the minimum version you support. This doesn't mean you can't use iOS 6 specific features, but it does mean you need to take into account iOS 5 users at runtime (See iOS SDK Compatibility Guide)
What developers typically do is update their base SDK. This means they're able to take advantage of the latest abilities of the SDK, to make a better user experience for users on that iOS version. Having a base SDK of iOS 6 does not mean the app won't work for iOS 5 users.

Resources