I am making an app and I have already spoken to several people about it. They would like to download it once it is released on the app store.
I received an email and have researched into the changes which state:
"Starting July 2018, all new iOS apps and updates submitted to the App
Store must be built with the iOS 11 SDK."
Some of the people I have spoken to have older devices which cannot run iOS 11, and I will not be able to run it on my own phone either (I will on my iPad, however).
I therefore want to release on iOS 9, but will not be able to do so before July, and so will I still be able to release the app and the people I have talked to who have older devices can download it?
After doing some reading, it seems like you can set the Deployment Target lower than the 'Base SDK'. Is this true? How would this work if iOS 11 can do things that iOS 9 can't do?
I am therefore asking for clarification and answers to the 2 questions above.
The message means that your app must be built with a Base SDK of iOS 11. And this means you need to be using Xcode 9. It's always best to use the latest tools. Apple is always pushing developers forward.
But this does not prevent your app from supporting older iOS devices. If you wish to support back to iOS 9, set your project's or target's Deployment Target to iOS 9.0 (or whatever older version you wish to support).
The Deployment Target defines the oldest version of iOS your app supports. The Base SDK defines the latest APIs you can use.
The trick is to ensure that if you use a newer API in your app, it must not be used when the app is run on a device with an older version of iOS.
There are plenty of discussions that cover the details of this but in short, use #available around any API added after whatever Deployment Target you have set.
Update as of July 5, 2018:
According to the Supported Xcode and Application Loader versions help page, Xcode 9 is only required for new iOS apps and iOS app extensions.
Related
In this link, we can find a statement from Apple stating the following:
You can now submit apps that take advantage of the powerful new capabilities in the next release of iOS, watchOS, and tvOS. Build your apps using Xcode 10 GM seed, test with the latest releases of iOS 12, watchOS 5, and tvOS 12, and submit them for review.
Starting March 2019, all new apps and app updates for iPhone, including universal apps, will need to be built with the iOS 12 SDK and support iPhone XS Max. All new apps and app updates for Apple Watch will need to be built with the watchOS 5 SDK and support Apple Watch Series 4.
I understand that now I have to update Xcode to 10.2, and that's ok. But what is unclear for me - what is minimal deployment target available for new publishings? Right now I have an app which has a deployment target of iOS 9.0. Do I fit into the latest requirements of Apple and should I be worried about my deployment target at all?
During my searches in the internet I found that some people propose to have a deployment target which is "latest-ios-version - 2.0 = deployment-target", but I don't know if that statement is legit.
Any insight would be appreciated. Thanks in advance!
Yes, you can still publish an application with a deployment target of iOS >8.0. All that matters is whether your app is built with the iOS 12 SDK (basically, if you're building with Xcode 10, it's a given).
Starting April 26, 2021, all iOS and iPadOS apps submitted to the App Store must be built with Xcode 12 and the iOS 14 SDK. Refer https://developer.apple.com/ios/submit for more details.
I know that it's possible to build an app with xcode 6.4 and then deploy it on a device running iOS 9 with TestFlight or any other deployment tool. The question is if it's possible with apples app store. Or more precisely, when will apple force us to switch to the iOS 9 SDK when submitting to the app store? Will it be September? Octobre? 2015?
Many thanks!
TK
There 2 things to note:
The iOS SDK version
This version is set in your projects, it lets you use the API of this version.
The minimum iOS Version
This is the minimum version targeted for the device.
It is more about the device limitation, for example iPhone 4 will not run ios9.
And the iOS SDK version available is based on your version of xCode.
The most likely candidate is February 1, 2016, if you trust that Apple will behave as previous years.
Follow https://developer.apple.com/news/ in your RSS-reader to get updates. The update for last year was released on October 20, https://developer.apple.com/news/?id=10202014a.
They made an exception for app updates last year, see https://developer.apple.com/news/?id=04082015a, but it is unlikely they will make the same exception this time.
Over time, Apple sets the minimum version of XCode that you can submit with, but the "SDK" requirement is dependent on the APIs that you are actually using.
The Deployment Target version is the minimum iOS version that your app supports, and you can set the target version less than the latest version. This affects the user at download/install time. If their device does not meet the minimum, they won't be able to download and install the app.
The minimum Deployment Target that you can set in XCode also increases over time with new releases of XCode. In that case, you may have some deadlines to beat to provide updates for the app that support older iOS versions. According to wikipedia, XCode 7 will allow a minimum iOS 5.1.1 deployment target, though you may have to set it manually.
I will soon be uploading a new app to the App store. I have a question concerning the build version of the app. Does Apple still allow us to upload an app that has been build for iOS 7, since I know Apple is kind of forceful about staying up-to-date. I can't find anything about it while googling.
Thanks
The deployment target is the lowest iOS version your app is supporting and Apple doesn't limit that (AFAIK). So if you want to (and are able to), you can still submit an app that runs on iOS 5, for example (iOS 5.1.1 is the newest iOS version for first-generation iPads).
Apple does specify the lowest acceptable Base SDK (the libraries you're linking against) when submitting, though (they change this every few months/years and announce this to developers via e-mail). If you're using the latest non-beta Xcode, you're always fine. Submissions from Xcode beta version are never accepted.
I recently uploaded a test version of my app to iTunes Connect and the next day got this email:
We have discovered one or more issues with your recent delivery for
"MyApp". Your delivery was successful, but you may wish to correct the
following issues in your next delivery:
Missing 64-bit support -
Beginning on February 1, 2015 new iOS apps submitted to the App Store
must include 64-bit support and be built with the iOS 8 SDK. Beginning
June 1, 2015 app updates will also need to follow the same
requirements. To enable 64-bit in your project, we recommend using the
default Xcode build setting of “Standard architectures” to build a
single binary with both 32-bit and 64-bit code.
After you’ve corrected the issues, you can use Xcode or Application Loader
to upload a new binary to iTunes Connect.
The last time I did a release I couldn't upload the app until I fixed the 64-bit build so I know that's okay, but I'm still building against the iOS 5 SDK because our app still supports it. If I change to build for the iOS 8 SDK will this stop my app working for older versions of iOS? How can I tell if new functionality will still work on iOS 5?
You should always compile against the latest SDK, which is currently (3/2015) the iOS 8 SDK.
What you want to set is the "Deployment target". The deployment target specifies the lowest iOS version that you app claims to run on. The deployment target corresponds to the __IPHONE_OS_VERSION_MIN_REQUIRED macro, btw.
So, you can compile against the iOS 8 SDK, and at the same time set the deployment target of the project to "5.0" (or "5.1", or whatever). You have to be careful though that you don't use iOS 8 functions when running on an iOS 5 device, because it would crash the app. I use the -respondsToSelector: method often to test for the availability of functions. +lots of looking into the docs. +lots of testing on older devices.
Well when you update to iOS8 SDK, some of the functions will not work like Push Notification and Location Service. So you need to manage that part accordingly.
We have decided to drop support for ios < 7 with the next update of our app (its a small project so there is no big issue here).
my question is - will ios6,5,... users still be able to use the last version of the app, or will they be provided with the same update as ios 7 users and have a non-working app from there on?
in extension: how do we create a build that will only be available for ios7 users and not mess with older versions of the app for non-update users? is it sufficient to specivy Deployment target: ios 7 in xcode?
Since last week, Apple gives people on older iOS versions the option to download the latest compatible version of an app.
Updating an app to a a version that's no longer supported was always restricted, and it is sufficient to set the Deployment Target in the General settings to the desired minimum iOS version.