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.
Related
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.
EDIT: My answer is provided below
I was developing an educational app which I was targeting specifically for iPad-1 devices, because I think schools can take advantage on these 'old' devices.
However I'm afraid that nowadays it is not possible to upload apps which support iPad-1 (which is stuck with iOS 5.1).
What happens when I try using Xcode 6.4 to submit, is one of the two:
If I include the standard architectures (both 32 and 64 bits), I'm getting an error saying that apps with 64-bits can't set their target to iOS 5.1.
If I remove the 64-bits support, I'm getting an error saying that Apple do not allow apps without 64-bits binary.
I was trying to search the internet but didn't find much info. Any idea please?
EDIT
I was trying to use the standalone app loader but it didn't change anything because the validate is done by the remote server. For the second option above, I was getting this:
ERROR ITMS-90086: "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."
ANSWER
I got an answer at the developer forums of Apple, so copying here:
Although not in the drop-down box of the deployment targets of Xcode, we need to set the deployment target to be 5.1.1 in order to allow installation on iPad-1 devices.
This is because 5.1.1 is compatible with iPad-1, and is capable of reading dual-architecture binaries.
One thing to consider is that it will not be possible to use TestFlight for testing on these devices, because TestFlight is only compatible with iOS 8 and up. But testing can be taken in other means, like direct-install from Xcode.
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.
Is it possible to submit an update with Xcode 5.* ? Sorry for being very specific, I have no idea how to present this question. I can't check this right away because that particular account is managed by my client.
I have seen this from apple documentation,
Starting February 1, 2015, new iOS apps uploaded to the App Store must
include 64-bit support and be built with the iOS 8 SDK, included in
Xcode 6 or later.
Here they specified clearly that for new app we must take build from Xcode 6.*. But nothing about update of something already in app Store?
Any help would be appreciated.
Please read below
64-bit and iOS 8 Requirements for App Updates
December 17, 2014
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.
https://developer.apple.com/news/
So after 1st june 2015 you need to compulsory use xcode 6 to upload build into app store. Till that time you can upload via xcode 5.
You will not be able to submit anything to the AppStore that is not done with one of the latest versions of Xcode. There is a grace periode of a few weeks for previous Xcode and SDK versions but for Xcode 5.x that is long over.
With the SDK it's similar, but of course you can support older SDK versions as well - you just need to have (one of) the latest installed.
This is true for new apps as well as any updates to existing apps, there is no difference.
How can I get the version of the base SDK in code? I am currently building for iOS in XCode 6 and using the base SDK 8.1 . I would like to know if there is any define with the value of the SDK to be able to test it and allow building with different base SDKs.
You can find out the version of the current Foundation framework that the code is running against by checking the value of NSFoundationVersionNumber.
If you check out the NSObjCRuntime.h you will find the various version numbers listed in there.
As in regards to building against different versions of the SDK; Apple stops App Store uploads if you don't build against the latest SDK once the cut off date has come into effect - i.e. new apps submitted now must be build against iOS 8 SDK.
What you can however do, is have a lower iOS Deployment Target (this you can find in your project's settings). This will allow for your app to run on older iOS versions, but it will still be built against the latest SDK. Do note though, it is your responsibility to ensure that you do not use any new APIs without first ensuring the current environment supports them e.g. UITextField's selectable property.
If you call that whilst running on iOS 6, your app will crash.
This can be done using __IPHONE_OS_VERSION_MAX_ALLOWED (which is the same version as the base SDK version). That can be compared to __IPHONE_8_0 where 8_0 is the iOS release.
For example, at this point you can use the baseSDK 8.0 or 8.1.