I am trying to understand how the compatibility does work and could not get the perfect answer out there. Many answers are confusing.
I want to understand if I develop an app targeting iOS 9, does it work on iOS 11.2 devices for example (forward compatibility)
and if I target iOS 11.2, is it going to be compatible with iOS 9 and 10 as an example (backward compatibility)
I found this answer where he is suggesting to download the image file for an older versions. When shall I do that? What is the case that requires downloading the images to my project?
This issue is giving me the following error:
My iPhone is running iOS11.3 and my Xcode Project (Objective-c) is targeting iOS 10 and I am developing using Xcode 9.2
Apple only supports 'forward compatibility'. You can specify your App's min OS support in its target. All OS version higher than the min target version will support your app. You can't make your app to support OS versions less than the target version.
This "Could not locate device support files" error occurs when your Xcode is not compatible with the OS version of the device. In such scenarios, you can download those image and make your Xcode compatible with the OS version.
"When to download the images??" - When you can't update your Xcode to its newest version( for eg: if you are using Sierra and no plans to update to High Sierra).
Related
The idea of using Delphi to develop a mobile app is appealing to us because we can do Android, iOS and Windows without duplicating work. Delphi is also a language that we are familiar with. However after trying to get a simple test app running on an iPad, I do not think it is actually realistic. Here are my observations:
The iPad is running iOS 12.0.1 (and iOS 12.1 is already downloaded and ready to install).
Xcode, which runs on the mac, is used by Delphi for building apps and deploying them to the test target. Each Xcode version supports exactly one iOS SDK version and is the Xcode version plus 2. My old Mac is currently running xcode 8.2.1 so that corresponds to iOS SDK 10.2, which should run on iOS 10.2 and higher.
Delphi Tokyo supports iOS SDK versions from 8.0 up to 11.3 (so Xcode 6 to 9). It will not compile apps using SDK 12. The Xcode version running on the mac fits squarely within this range of versions.
It appears that Xcode is not able to properly support iOS versions that are newer than itself. When trying to run the application it errors out with "unable to location DeviceSupport directory for the connected device. Please check Xcode installation path and run Xcode devices". Under "Devices" the following is displayed for the iPad: "This iPad mini2 is running iOS 12.0.1, which may not be supported by this version of Xcode".
So, it would appear that the latest Xcode version is required to support the iPad running iOS 12.x but that means that Delphi cannot compile for it because it only goes up to SDK 11.3 and not 12. I do not think it is possible or sensible to downgrade the iPad iOS. Also even if we get a Delphi version that works, the next iOS update will require a new Xcode and therefore a new Delphi version that isn't even available. When the new Delphi version is finally available it will already be obsolete since iOS will have already moved on.
Please correct me where I am wrong. Because this cannot surely be the state of things.
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.
I created app using Lua language using Corona SDK and when I try to
create a build or Send it to App Store, it displays these errors below
UNSUPPORTED IOS SDK Mismatch
The version of iOS SDK (10.2) that's installed on this computer does
not match the target iOS version (10.1). You may encounter issues
building or incompatibilities at runtime.
Anyone can help me with this issue? Any help will be appreciated.
Thank you!
I had the same problem. You need to download the latest daily build from Corona Labs and then build using that version. Daily builds are found here:
https://developer.coronalabs.com/downloads/daily-builds
From Corona blog
Changes to Xcode Requirements
Starting with 2015.2616, Corona
Simulator will be more stringent about the version of Xcode you have
installed (older versions work like before, in a less stringent
manner). In particular, when you select a particular target iOS
version, you must have the corresponding version of Xcode installed.
For example, if you want to target iOS 8.3, you must install Xcode 6.3
which includes iOS 8.3 SDK.
Also, from this post you can read that for iOS 10 SDK you need install Xcode 8. So I guess for iOS 10.2 SDK you need Xcode 8.2 (I'm not sure which one exactly will fit). What is more you need most recent version of Corona:
stable build (requires Xcode 8.1 or later, the macOS Simulator requires macOS 10.10 or later, more information) or
daily builds.
Note: I'm using only Win7 for Corona SDK.
I would like to make my app compatible with IOS 7.0 but in the preferences --> downloads section, the lowest available version is IOS 8.1 simulator. I'm currently using OSX Yoesmite 10.10.5 wih xcode 7.2.1 running version 9.2.
Does that mean there's no way to test for app compatibility for any versions lower than IOS 8.1?
Edit: I realize it's possible to install older versions of xcode. I want to know if it's possible to download only the simulators on my current xcode, not have an entirely new and different xcode.
The answer should be NO.
It's not just about the simulator, but the SDK you use to compile the app to run within the simulator. When you use newer SDK to compile, the binary could contain unknown load commands to the binary header, or unknown APIs calls to an older system. That's the main reason you can't run an app built with newer SDK/system on an older OS. Even if it worked, it might still crashed at some point when the needed symbols can't be resolved.
So in order to run/build app for an older version of simulator, you need:
An older version of Xcode (which has older version of SDK)
Or, find out a way to setup your current version of Xcode to compile
with the older SDK extracted from an older version of Xcode. (This
may and may not work due to the change made to Xcode.)
For the second option, you can google it for how-to.
I would like to run old application which has a support of iOS 5.0 and less. It has a deployment target 5.0. The thing is that:
I have upgraded system to Yosemite OS 10.10 and lowest Xcode version I have 5.0. Now when I look on base SDK and I see below picture.
As you see the least build SDK shown s iOS 7.0. No other lower version is there.
I heard or I read some where that you can also use lower version SDK here. By copying SDKs to some where or any other means. I would like to know a better approach here.
Edit:
I have a requirement of one application which was developed in Xcode 4.6 for iOS 5.0. So that just to check that application flow I need to download Xcode 4.6. Is it so? Can we don't include older SDKs in newer version of Xcode?
You should not attempt to build your application with an old version of Xcode. The only version of Xcode supported on Yosemite is Xcode 6.1, which only ships with the iOS 8 SDK. You should build for the latest SDK, and set the Deployment Target to iOS 5 if you want your code to run there (by degrading gracefully using NSClassFromString and respondsToSelector: checks)