Can I downgrade iOS Deployment Target when submitting a new version? - ios

My app is available on the Appstore and is currently compatible with iOS 6 or later.
I want to release a new version only compatible with iOS 7 or later because there's a lot of crashes on iOS 6 with this new version and I have to release ASAP.
Here's my question : when the iOS 6 crashes will be fixed, would it be possible to bring back the iOS 6 compatiblity (i.e. downgrade the IPHONEOS_DEPLOYMENT_TARGET from 7.0 to 6.0) ? Does Apple allow that ?
Thanks in advance.

Your iOS Deployment Target can be whatever you wish it to be. The main requirement that Apple has is that your app submission is compiled against the latest SDK at the time (currently Apple is accepting base SDK of iOS 7, but it will change to iOS 8 in the new year).
When you downgrade the deployment target back down to 6, the only thing you have to ensure is that you're not calling any iOS 7+ APIs when running on iOS 6 devices, otherwise you'll be creating a lot of crash reports.
edited after better understanding the original question

Related

Which swift version for iOS 7+

I'm new to iOS development, trying to develop an application.
Once I've seen in these statistics that iOS 7 has a really small market share I decided to support iOS 7 or higher in a way to make an app to all iphone OS available in the market. I also decided to use swift as code language but not sure which swift version should I choose.
Which swift version should I choose for iOS 7 or higher development?
Apple states that
Starting July 2018, all iOS app updates submitted to the App Store must be built with the iOS 11 SDK and must support the Super Retina
display of iPhone X.
(The same requirement for new apps started on April 2018.)
So, your choice are very few, Xcode 9 (with iOS 11 SDK) or Xcode 10 (with iOS 12 SDK).
(I believe we should read the requirement as iOS11 SDK or later.)
And supporting iOS 7 with Xcode 9/10 is very difficult. (I do not know if it is possible or not.) Deployment Target does not accept versions less than 8.0 (*), and iOS 7 Simulators are not provided.
(*) Some versions of Xcode replaces versions less than 7.0 to 8.0, even if I entered the version number manually. And at least, both Xcode versions does not show 7.x in the popup menu of the Deployment Target.
I recommend you to use the latest released version of Xcode (10, which comes with Swift 4.2), and make your minimum supported version to iOS 8.0 or later.
The Swift application will work only on iOS 7+. The Xcode will add the Swift library to every build so, you can use any version of Swift language and all of them will work on all iOS starting from 7th. Apps created with Swift will run on iOS 7+ and Mac OS 10.9 +
so use the latest version always.
You have to use the latest swift version Swift 4.2
As iOS 12 is out now so you have to use iOS 10 and above because we should support recent 3 versions.
Images source
If you target iOS 10 and above then you hit the 95% users

How can I tell which iOS versions my XCode will deploy to?

I currently have XCode version 8.2.1.
On my iPhone, I currently have iOS 10.3.2.
My version of XCode will not deploy to anything over iOS 10.2.
On my iPhone, I am being offered an upgrade to iOS 11.0.3.
According to this wiki here, XCode version 9 will deploy to iOS 11.0: https://en.wikipedia.org/wiki/Xcode#9.x_series. But I can't tell whether this includes all the sub-versions, eg 11.0.3.
So my question is, if I get XCode version 9 and upgrade my phone to iOS 11.0.3, will I be able to deploy to my phone from XCode? How do I tell exactly which versions of iOS are supported by each version of XCode? And going forward, how can I ensure that my iPhone and iPad always have versions of iOS which I am able to deploy to from XCode?
Yes, you will be able to deploy to your phone.
While you need Xcode 9 and not 8 to program against iOS11, this question has more to do with the Base SDK and Deployment Target settings in your project.
The Base SDK is the SDK version you are compiling against. In Xcode 9, this could be iOS11, for example. The Deployment Target setting represents the lowest supported iOS version the app will run on. This might be iOS10, per your example, but it could be anything else.
To use the newest iOS11 features, you'd have to have a minimum Base SDK of iOS11. To support older platforms, you must make sure the Deployment Target is set to the oldest version you'd support. In code, you need to check the version of the platform when deciding to use a newer-than-Deployment-Target feature.
if I get XCode version 9 and upgrade my phone to iOS 11.0.3, will I be able to deploy to my phone from XCode?
Yes. Xcode 9 and iOS 11 are both the latest (as of Oct. 2017) versions available. If you want to support iOS 11, you need Xcode 9.
How do I tell exactly which versions of iOS are supported by each version of XCode?
Check the release notes. For example, the Xcode 9 Compatibility section says:
Xcode 9 includes SDKs for iOS 11, watchOS 4, macOS 10.13, and tvOS 11
And going forward, how can I ensure that my iPhone and iPad always have versions of iOS which I am able to deploy to from XCode?
Staying current with the latest iOS and Xcode versions is one way to do that. You don't even need the latest iOS version on your phone -- just any version that's later than the minimum version supported by whatever Xcode you're using. Looking at the list of available deployment targets, I can see that Xcode 9 deploys to iOS versions back to iOS 9.1.
Mostly, just be aware that updating iOS on your phone may require you to also update Xcode.

IOS 5 compatibility using Xcode 8

I have an app in appstore supporting from ios8 and later. But one of my client neeed to run it in ios 5.1.1 ipad too . Is it possible to submit apps in appstore having ios 5.x compatible versios ? How can i make it compatible with ios 5.x ?
Not his is not possible, iOS 5.1.1 supports device with ARM v6 processor. Which is no longer supported by Xcode.
You will therefor need an older copy of Xcode, with the iOS 5.1.1 SDK.
The bige problem is that you will then not be able to submit your app to the Appstore since this requires you to build with the iOS 9 SDK.
You might be able to remove the ARM v6 slice from the binary you compiled with the older version of Xcode and add that slice to you new binary, but you will run into many more issues.
The cheapest is to buy this client an new iPad.

How to deploy app for a lower target than it was written for? iOS

I originally wrote an app for iOS 9.3, later when the iOS 10 came I changed the build for to 10 and updated old functions to their newer versions. The final release was with 9.3 deployment target to provide the app also for users that haven't upgraded yet. Than unreasonable crashes started to occur while using the app on 9.3 iOS devices. I found out that the problem was within the updated methods to newer iOS 10 form. How to release the app for lower deployment target, while code fits the newest forms? Do I need to change those methods back to iOS 9.3 version? Will they be supported 100% on iOS 10 devices?

Making iOS 6 apps with an iOS 7 beta device

This may seem an odd question but bear with me. I am all excited to try out iOS 7 beta, however I am developing an app that will be complete before iOS 7 comes out to the public.
So can I install iOS 7 on my device, and then develop and publish my app for iOS 6? Or would I need to downgrade to iOS 6 to develop my app and release it in the next few weeks?
I should add I want to do this because I only have one device.
You cannot release an app that has been built, compiled, or created with the pre-release SDKs and Tools. That means you can't release an app built with iOS 7 SDK features in Xcode 5 until Apple gives the green light for submission. (EDIT: iOS 7 is now public, but this will apply to any future betas - including iOS 7.1 and onward).
On the other hand, testing your app on a beta device is OK. It's not a good idea to test your iOS 6 app on iOS 7, but it will work. You can install iOS 7 beta on your device, but first think about your users. You'll want to test your app in the environment that your users will be using it in.
If you do upgrade to iOS 7 on your one and only device, you'll be stuck with the iOS Simulator - which is very very far from recommended. You can't downgrade or restore to an earlier iOS version from iOS 7.
If you are using the beta version of XCode, be sure to set the target to iOS 6, not iOS 7. When you target a version of iOS, that's the minimum version. You can run an app targeted for iOS 6 on iOS 7.
When you target iOS 6, the compiler will prevent you from including features that require iOS 7.
Still, for testing purposes, you'll want to test on a device with the latest released version. iOS 7 may have bug fixes that iOS 6 does not, so your app may run fine on iOS 7 but have bugs when run on iOS 6. Also, there may be performance differences.
You should test on both the simulator and an actual device, however if you want to risk it, the worst that will happen is your app may be rejected.
Theroretically you should not be able to run an app from Xcode 4 on an iOS 7 device. I was able to do this however, but I'm not sure why. Try deploying your app with Xcode 5 and then redeploy it with Xcode 4. In my case Xcode 4 would deploy to an iOS 7 device if the app is already installed (including all profiles).

Resources