How to require specific version of macOS? - xcode

For example: My Xcode project deployment target can be iOS 10.3 — Is there an equivalent to require macOS 10.12.4? (Latest SDK)
• iOS 10.3 is the latest update (can be targeted in Xcode).
• macOS 10.12.4 is the latest update
My goal/hope is to target the latest macOS update in the same way I can target the latest iOS update.
Verdict: It’s not (yet?) possible in Xcode. :(

While building you can define a deployment target. This is a specific API level for the minor versions of the operating system. This will run on all patch level versions for this particular minor version. So there is little point to set deployment targets on patch level.
You can check that you run your applications on certain operating system versions only though with a little code.
operatingSystemVersion and isOperatingSystemAtLeast(_:)seem to do what you want to achieve:
https://developer.apple.com/reference/foundation/processinfo/1414876-isoperatingsystematleast
You can then exit and deny using the application if the desired criteria is not met.
P.S. iOS deployment lets you chose iOS version 10.3 only too. There is no specific option for iOS 10.3.1 for example.

Can't you select such an option when you set your deployment target?
The page linked to also states:
Xcode sets the Minimum System Version key in the app’s information
property list to the deployment target you choose. When you publish
your app to the store, it uses this property value to indicate which
versions your app supports.
So you might change it by adapting the information property list as well I presume..

I was able to set a minor release version by editing my project's project.pbxproj file, located within your xcodeproj bundle.
Once you've located your project.pbxproj file, open it and
search for MACOSX_DEPLOYMENT_TARGET. You can set its value to any valid macOS version (no quotes needed).
The result is correctly displayed within Xcode's UI, and most importantly, is respected when compiling. I've confirmed this by using #available directives.

Related

Xcode cannot compile for older Architecture

This happens after I updated my Xcode to support iOS 11, if I set 'Build Active Architecture' to 'YES' and build for a specific device, it runs fine but if I try to set 'Build Active Architecture' to 'NO' or build for generic iOS device it will create an error 'No Such Module...'.
This is okay for testing but the main problem is that the version to upload to app store needs to support armv7 and armv7s as well.
If it affects I am using Xcode 9.0.1(no absolute reason just the latest version when I perform the update). I am using the current latest version of 9.2.
I am using Cocoapods to install external frameworks. Those that appear in the 'No such Module' error includes Alamofire, XlPagerTabStrips and ActionsheetPicker(those that I noted, may be more) they are all updated to latest version when I updated Xcode.
There is also another situation where my project cannot use Automatic codes signing, that may or may not be related but I am just going to mention it, if it hints at anything.
Update:
I have converted my project to Swift4, confirmed my cocoapods is up to date, reinstalled all the modules for Swift4. Same situation, the error claiming 'No such module...' will appear if I try to compile including older architectures.
The error will not show if I attempt to compile only for arm64 and armv7s but somehow the ipa only supports arm64.
Assuming that you got the last version of Xcode 9.1 [December 4, 2017] then, you may also first start to update CocoaPods to the last version, then follow documentation to clean remove then reinstall the last version of each module:
https://github.com/Alamofire/Alamofire
https://github.com/xmartlabs/XLPagerTabStrip
https://github.com/skywinder/ActionSheetPicker-3.0
...
Remember also that some modules will required some specifics setup to be integrated into your Xcode project using CocoaPods.

Your Mac runs a version of OS X which is lower than your project's minimum deployment target

I have created a cocoa framework and test application to check framework functionalities.I used 10.9.2 osx version. It is working fine on 10.9.2. When i am running this on osx version 10.8.5 , getting following errors.
"Your Mac runs a version of OS X which is lower than your project's minimum deployment target.
Change your project's minimum deployment target or upgrade your version of OS X."
I changed the base sdk in build setting to 10.8 , then also am getting same message.
Please anyone tell me the solution.
The setting to change the minimum deployment version is harder to find than the previous post suggests.
It is not located in the "Project settings" in the Xcode File menu, you need to click on your project in the left-hand nav -> General tab -> Deployment target. See pic.
You need to set the Deployment target to 10.8 if you want to support OSX 10.8 and above. It can be found under project settings -> info.

Is it possible to build iphoneos6.1 projects in Xcode 5, preserving the behaviour of views laid out in an Xcode 4.6.3 storyboard?

Our build server was recently updated to use Xcode 5's xcodebuild. We've installed the iphoneos6.1 so that we can still use iPhone SDK 6.1 for some legacy projects that do not yet support iOS7. However, when we use xcodebuild to build these projects using -sdk iphoneos6.1, we still see problems with UIViewController's contents being laid out underneath navigation bars and tab bars.
Is there some way to build these projects that were developed with Xcode 4.6.3/base sdk iOS 6.1 using Xcode 5's xcodebuild, but preserving the views as they were laid out in the storyboard developed using Xcode 4.6.3? I took a look at the man page for ibtool, but I'm not seeing any option related to choosing a target SDK, or anything else that seems relevant to the "extends edges" problem I noted above.
Note that we haven't updated the storyboard using Xcode 5 - the project is continuing to be developed in Xcode 4.6.3, and only touches the Xcode 5 toolchain when our build server clones the project's git repo and builds using xcodebuild.
Yes. On the Storyboard, go to the Interface Build Document section and there are two selection items. One for Builds For and one for View As. You can select anything from 7.0 down to 4.3 for the Builds For and you can select '7.0 and later' or '6.1 and earlier'.
While it isn't exactly what you are looking for, you can keep both Xcode 4 and Xcode 5 in the same build environment and control which xcodebuild is run by using an environment variable (see man page for xcrun. We have just set this up on one of our build servers. In your build definition, just set the following environment variable:
DEVELOPER_DIR=<path to Xcode 4.app>/Contents/Developer
For us, it ended up as:
DEVELOPER_DIR=/Applications/Xcode-4.app/Contents/Developer
This overrides the xcode-select setting and allows you to use the correct Xcode environment. Again, this depends on the ability of your build system to set environment variables, plus having both versions of Xcode installed. You can download older versions of code at Downloads for Apple Developers

Xcode Base SDK: What is the easiest way to install multiple SDK versions side by side

Alright what I noticed is that when I am developing against iOS 4.3, and I set my deployment target as iOS 4.1, I DO NOT get any kind of warning from the IDE about calls which are not supported in the minimum deployment target.
For example, calling [CLLocationManager authorizationStatus] shows no warning, despite the fact that the documentation for authorizationStatus says it was implemented in iOS 4.2.
I expect this would be a problem when wouldn't it?
From what I understand the solution to this is to download multiple SDK versions, temporarily build against the SDK for your minimum version, but switch to the current SDK version in order to ship.
If there is a better way to do this please advise. How can I get more options in Xcode under the "Base SDK" setting?
I expect this would be a problem when wouldn't it?
Yes, you'll generally crash if you call a method that doesn't exist.
From what I understand the solution to this is to download multiple
SDK versions, temporarily build against the SDK for your minimum
version, but switch to the current SDK version in order to ship.
That's a pretty good approach; probably the best way to find this kind of error semi-automatically.
If there is a better way to do this please advise. How can I get more
options in Xcode under the "Base SDK" setting?
You don't install all the SDK's together in a single "Developer" folder. Install each one separately -- there's an option to choose an alternate location when you install the SDK. Then it's just a matter of finding the copy of Xcode in the right folder and launching.
You don't need to have multiple options under Base SDK -- the normal practice is to just use the latest, but set the Deployment Target to the minimum version of iOS that your app supports.

Installing iOS SDK 4.1 on xcode 3.2.5

I've read through a lot of posts and couldn't really figure out the answer to this question. So I apologize if I duplicating it here.
I have installed xcode 3.2.5 to my machine and it comes with SDK 4.2. My iPhone is on 4.1 and I am not planning to move it to 4.2 just yet. Problem is that I can't use this phone for testing. Since the only SDK that I have installed is 4.2, when I try to run debug with my iPhone, I get this message:
Can't install application
The info.plist for application at /blabla/app.app specifies a minimum OS of 4.2, which is too high to be installed on this device.
So, I got to Targets -> Get Info and I see that it is indeed targeting 4.2 (but that is the only option available - since I don't have the other SDK's installed).
So, the question is: how to I keep xcode 3.2.5, but install SDK 4.1 in addition to 4.2?
It took a while to figure this out.
I couldn't see 'iOS Deployment Target' on the info.plist either. Here's what I did.
a) Project -> Edit Project Settings
b) go to 'deployment' section
c) Change
'Targeted Device Family' = iPhone/iPad
'iOS Deployment Target = 'iOS 4.1'
Open up your info.plist in your project. There is a place where you can define for iOS 4.1.
Just open the previous SDK dmg, then go to Packages, and install the SDK 4.1 package.
More info : Install sdk 2.0 to 3.1 for xcode 3.2
Note : the "Packages" directory is not visible in the dmg since xcode_3.2.5_and_ios_sdk_4.2_final. Just use the Terminal (or finder "Go to folder") to open "/Volumes/Xcode and iOS SDK/Packages".
Edit : the xcode4.1 for Snow Leopard create an app called "Install Xcode.app". The packages directory is inside the app package.
The best way to do this is to find a copy of Xcode 3.2.4, with iOS 4.1, and install it in a separate directory. When you install, take the dropdown that's set to Developer and switch it to DevOld, or something similar. As there's no way to install new SDKs in the new version of Xcode, keeping multiple versions is the best you can do.
If you simply want to be able to run your app in 4.1, not necessarily develop in it, go into your target's settings, and under the build tab, set the iOS Deployment Target key to 4.1 or below.
Good luck!
What you need to do is:
In the BUILD section of the Project info click on Show and change its value from Setting defined at this level to All Settings.
In the updated list of settings you will surely locate the desired one.
Good Luck!

Resources