I just submitted a sticker app from Xcode and am getting this error:
SDK Version Issue - This app was built with the iOS 12.0 SDK. Starting
March 2019, all iOS apps submitted to the App Store must be built with
the iOS 12.1 SDK or later, included in Xcode 10.1 or later.
I'm using XCode 10.1, and I understand how to change the deployment target, but is that different than the Base SDK?
How do I change my Base SDK, and do I need to change my deployment target as well? (In my Project Settings, it's currently set at 10.3)
I’d suggest validating your settings by selecting the top level project in the “Project Navigator” and then choose “Editor” » “Validate Settings...”. This can sometimes find and remedy outdated Base SDK settings:
If that doesn’t do it, go to your “target settings”, select the target, and then explicitly set the “Base SDK”. In my case, in Xcode 10.1, choosing “iOS” automatically chooses the latest, iOS 12.1:
But, no, “Base SDK” and “Deployment Target” are two different things. The “Deployment Target” is the minimum OS version that you plan on supporting. You should feel free to leave that set to 10.3, or whatever minimum OS version you plan on supporting.
Needless to say, if you have two versions of Xcode installed on your machine, make sure you’re firing up the latest version (Xcode 10.1 at this point). Sometimes if you just double-click on the project/workspace in Finder, it might not be starting up the version of Xcode you think it is.
Related
In earlier versions of Xcode I could set the base SDK to the current iOS version and the deployment target to an earlier version as shown in the below slide from the iOS 7 TechTalk, session Architecting Modern Apps, Part 2:
This Stack Overflow question elaborates nicely on the Base SDK vs Deployment target.
What's the meaning of Base SDK, iOS deployment target, Target, and Project in xcode
However, now when I look at the base SDK config field in Xcode I just see "iOS" (which is an alias of "iphoneos").
According to https://developer.apple.com/ios/submit/
Starting March 2019, all iOS apps submitted to the App Store will need
to be built with the iOS 12.1 SDK or later, and support the all-screen
design of iPhone XS Max or the 12.9-inch iPad Pro (3rd generation).
This worries me because it seems that I can no longer target older versions of iOS.
I've done a lot of research by I cannot seem to work out definitively whether there still a way to use the 12.1 SDK but target older versions of iOS. Is there a way to do this?
The base SDK is just "iOS". The exact version will depend on your version of Xcode (12.1 if you are using Xcode 10.1). The base SDK does not determine which versions of iOS are supported by your app.
You set the minimum version your app is compatible with by specifying the "iOS deployment target", either for your project as a whole:
or in the settings for a specific target in your project
The oldest version of iOS that you can target with Xcode 10 is iOS 8 (which is pretty old).
BTW, you can see or select the Base SDK you are using, in the Xcode Preferences/Locations:
I am developing an iOS app for iOS 6.0 and higher. Now, after updating Xcode from Mac App Store, I am told that "An iOS Deployment Target earlier than 8.0 is not supported by this version of Xcode.". So, it seems that I need to use another version of Xcode to develop this app.
I can download other versions of Xcode from https://developer.apple.com/download/more/. What is the highest version of Xcode that supports iOS 6.0 as the deployment target?(I just mean the deployment target, not the capability of installing iOS 6.0 simulator.) I don't want to download many Xcode versions to find that.
You can use latest Xcode for this do not select deployment target from dropdown, just manually input "6.0" in the "iOS Deployment Target" text box.
For more details you can go through here.
I have also upload one of my app that use iOS 7.0 from latest Xcode.
iOS 6 is supported in Xcode 7.x .
My suggestion is that,you may need to provide support for just 2 of previous versions of iOS 10, ie. iOS 8 and 9. If you take a look at the usage graph, it is evident that only 6% are using versions earlier than 9. That too, will have major contributions from iOS 8 and 7.
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.
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 :)
Now, I use Xcode 4.2 supporting iOS 5.0. Apple has just released iOS 5.0.1 beta 2. I can install it on my iPhone.
I want to test with this beta version, i.e build code from Xcode.
How do I build code from Xcode 4.2 for device of iOS 5.0.1 beta?
Please help
In exactly the same way that you would do so for iOS 5.0. We can't talk about beta versions of the software, but we can talk about what happens when newer versions of iOS are released. When you connect a device with a newer version of iOS installed, the Xcode Organizer will give you a message like:
Xcode does not have debugging information for the version of iOS on the device named “Dev iPhone”. Xcode can collect debugging data from the device to enable development with this version of iOS. This process only needs to be done once per iOS version, and will take several minutes.
You simply click OK or similar, and Xcode downloads the necessary debugging data. You can then build to the device from Xcode and use all the debugging tools as usual. This process works for point releases. It is highly unlikely this would work for major updates (e.g. if iOS 6 was released) and it may or may not work for iOS 5.1, depending on the changes included. But when Apple have not released a new version of Xcode to developers, you can be sure it is because one is not required.
It is important to understand the distinction between an updated version of iOS (for the device) and the iOS SDK (for Xcode). A point release of iOS does not necessarily require any change to the iOS SDK, and therefore with Xcode's ability now to download the debugging information on demand (a feature that has been around for a while), you don't necessarily need an updated version of Xcode. Likewise, with Xcode 4.2 you still set the iOS 5.0 as your base SDK even if you are setting an earlier version (e.g. iOS 4.2) as your deployment target. You don't need the iOS SDK v4.2 to target iOS 4.2 for deployment. (Just make sure you add back "armv6" to targeted architectures in your build settings, if you still want to support the iPhone 3G and equivalent iPods, as in Xcode 4.2 this is not included by default.)