Each time I install a new version of the SDK I lose the previous one. I want to use the new SDK, but I need to build using the oldest one.
Is there any method to keep the installed SDk when installing a new one?
The recommended approach is to set the base SDK to the latest one but change the deployment target to the version you want to support.
Officially, you’ll have to follow #Govind’s advice on installing each Xcode version to a separate path. Unofficially, you can extract the SDK from the installer using a tool like Pacifist and keep it around. This is, of course, unsupported and undocumented.
You can have multiple versions simultaneously.
Just give a different path while installing.
But I had problems while having both versions together.
The main problem I noticed was in the code sense of the latest version.
Related
This isn't a programming question but it's about the SDKs and the IDE. I've accumulated a ton of different XCode installs over the past couple of years and now my hard drive is nearly full. With each SDK clocking in at around 5 gigs, and my storage space getting low, I have a couple of questions
3 Questions:
Can I remove old ones?
Where are they stored?
Does the newest SDK overwrite base classes from previous SDKs? (Does NSString.h now reside in two different SDKs or will the newest one take precedence?
What about beta 1, beta 2, beta 3 SDK versions? Does installing the GM/official eliminate the beta version from my Mac?
Most importantly, Can I still target 3.0 if I install the 4.2 SDK? (I understand the difference between base SDK and target SDK)
I want to clean my hard drive and I have about 18 GB remaining on a 160 GB drive. I'd like to just start over and reinstall OSX, download a fresh SDK, but I still have apps that are targeted to 3.1.2 and I don't want to be forced to only support 4.0.
Thank you
Can I remove old ones?
Sure.
Where are they stored?
/Developer/Platforms/iPhone*/Developer/SDKs/ usually.
Does the newest SDK overwrite base classes from previous SDKs? (Does NSString.h now reside in two different SDKs or will the newest one take precedence?
No, you're fine to delete them. Each SDK is self contained.
What about beta 1, beta 2, beta 3 SDK versions? Does installing the GM/official eliminate the beta version from my Mac?
Sometimes, you can choose to reinstall them though
Most importantly, Can I still target 3.0 if I install the 4.2 SDK? (I understand the difference between base SDK and target SDK)
Yes
As of May 2016:
Where are they stored?
/Library/Developer/CoreSimulator/Profiles/Runtimes
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/CoreSimulator/Profiles/Runtimes
You can choose to install Xcode in a different directory rather than have it overwrite your current version. See Can I have multiple Xcode versions installed? for details. Each installation stands on its own. Just be sure you know which one you're launching when opening your project.
Im trying to get my xCode to contain all iPhone sdk's from 4 back to 2. But when I download the DMG files, it seems to only allow me to have an xCode with SDK versions 2 - 3.1 OR 3.2 - 4, not all together.
How can I install the SDK's into one xCode so I can build for all different OS versions?
Thanks
EDIT::
Ok so I know I can set the base SDK in xcode, but the options I have are only 3.2 or 4.0, I cant seem to install the 3.1 or earlier SDK's how can this be done?
Final Edit::
Ok got it solved, basically you only need to have an older version of xcode installed to get earlier simulators running, otherwise the articles given to me in my answers as well as others were very helpful:
http://www.clarkcox.com/blog/2009/06/23/sdks-and-deployment-targets/
Install xCode 3.2.3 w/ iPhone SDK 4, get "Base SDK missing", can't see other SDKs
How To Make iPhone App compatible with multiple SDK (firmware) versions
http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html (possibly the best one)
Is there any particular reason you need to do this? Are you trying to develop applications that will run on iOS 4.x and older versions (3.x)? You can still develop applications which will run on iOS 3.1.x with the iOS 4.x sdk.
Take a look at the following article: http://www.clarkcox.com/blog/2009/06/23/sdks-and-deployment-targets/
I tried the same thing some time ago, and it seems some minor SDK versions are automatically removed during the install process...
You may tried to copy them before installing the other XCode versions, and re-install them just after.
They are located in /Library/Platforms/iPhoneOS.platform/Developer/SDKs/ and /Library/Platforms/iPhoneSimulator.platform/Developer/SDKs/.
Note that you can also choose to install each XCode version in a separate directory.
You will lose a lot of hard disk space, and you'll have multiple versions of XCode, each one with different SDK versions.
Why are old SDKs beeing removed when installing a new version of xcode with new Iphone SDK ?
Now we have v4, what settings do I have to make in order that the apps still work with 3.x ?
Thanks
Set the Base SDK to 4.0 and Deployment Target to 3.x. Or, in modern conditions, the Base SDK to Latest and Deployment Target to whatever you need.
Although 'Zoul' has most succinctly answered the question, I shall make an attempt to elaborate on the 2 settings and point to some useful documents which will help others who are new to the situation.
Base SDK Version: This indicates the version of the SDK based on which the program has been compiled. This can be set from the "Build Settings" for the project or target. You can use API code from Apple in your code introduced up-to that version and compiler will know all the symbols and compile without any issues.
Deployment target: This is a declaration from your side about the minimum iOS version which should be installed on the user's device to run your code. This setting can be found under "Info" section for Project and "Summary" section for a particular target. Now, important thing to understand is that your code will not automatically run smoothly on devices with older versions of the iOS if you are using API code introduced in later version by Apple. These can be new classes/methods/frameworks introduced by Apple in later version. You have to ensure by writing necessary conditional code and provide alternate code path to gracefully degrade for older iOS version which does not have the newer API. It is up-to you to handle version incompatibilities.
Apple documentation on the subject can be found in "SDK Compatibility Guide".
To know about the changes with different versions of iOS refer "What's new in iOS".
This topic is also discussed in "iOS Development Guide" under section "Building and Running Application". Refer sub-section "Specifying the Runtime Environment".
If you have backups of your system from something like Time Machine (and you better!) you can copy the older SDKs from the backup located at /Developer/Platforms/iPhoneOS.platform/Developer/SDKs and /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs - then just restart XCode and you're ready to go.
If you still have the problem after you set Deployment target at least as low as your desired SDK, then you need to download that SDK. Luckily, Xcode helps us here also:
look after Simulator selector in top left of your Xcode and select More Simulators. It will open a page like the one below:
just select the SDK you need to test your app against.
3.2.3 last beta did remove all other SDK's cause to many people tried publish Apps developed with the beta SDK, which will not be accepted. I guess GM is doing still the same
If you want to develop for 4.0,3.2 and 3.0 (plus 3.0,3.1,3.1.2,3.1.3)
do the following
sudo /Developer/Library/uninstall-devtools –mode=all (This will uninstall the current XCode installation)
Then install first old XCode (3.2 final) in default folder (/Developer)
Then install the new XCode (3.2.3 GM) in other folder (/DeveloperBeta)
This way you will have both. And can launch xcode from either /Developer/Applications/Xcode.app or /DeveloperBeta/Applications/Xcode.app
I recently downloaded the iPhone SDK 4 along with Xcode and neglected to install 3.0 and 3.1. I've since deleted the install package. I of course can re-download the whole package, but for future reference, I wonder if you are able to download individual SDK versions separately and independent of Xcode, like you would with almost any open source package.
No, there's no way to download just the SDK.
If such a thing were available there would be a link to it on the downloads page.
With the latest Xcode and SDK 3.0 beta when you create a new iPhone project, Xcode creates an SDK 3.0 project. If I want to revert to SDK 2.2.1 after the project has been created, I need to change something in the generated source code files since some of the APIs have changed. Is there a simple way to specify at project creation time the SDK I want to use explicitly?
Thank you in advance
I can't comment specifically on iPhone SDK 3.0 as it's covered under NDA; there's a forum for disclosed developers at devforums.apple.com. But Roger Nolan is half right and half wrong. He's half right in that when any SDK is updated, the examples and templates in that SDK are updated to exploit it. That is, the templates may specifically use the new APIs in that SDK, and the code might plain just not work with earlier SDKs.
That said, you can save project templates from earlier SDKs and install them in a local directory (like ~/Library/Application Support/Developer/Shared/Xcode/Project Templates) for use with later versions of Xcode. The project template format itself hasn't changed; templates should be forwards and backwards compatible, but the content of the templates is usually locked to the SDK version it ships with and later.
Mr. Nolan is half wrong about building against earlier OS versions with later SDKs. That's why the earlier SDK packages are provided with the later distributions (they're not there just to make the downloads take longer). You can deploy against older OS versions with a newer SDK by setting the Deployment Target build setting.
There is the minor detail in that you probably shouldn't deploy production applications produced by a pre-production toolchain. But once version N is officially released, you should be able to use its toolchain to build for N-1, N-2, etc.
Provided that you're not using any new features in the 3.0 API, you should be able to select the Active SDK from the dropdown menu on the upper left corner of your Xcode project window. Simply select "Device - 2.2.1" or "Simulator - 2.2.1"
Xcode defaults to the newest SDK installed, and I'm not aware of any method to change that behavior.
I made it a habit to set the base SDK to 2.0 in the project properties right after I create the project.
When using a Beta toolchain, you should install it alongside the latest released toolchain, not in place of it. Create your projects in the production toolchain, then open them with the beta toolchain to to do compatibility testing.
You will need the released toolchain anyway in order to do distribution builds. You should not build for distribution with a beta toolchain.
There is not according to Apple. Comments to my posting from Can Berk Güder say otherwise. I would not suggest following his example - it's a lottery hoping Apple can't see what you are doing or that you do not fall foul of a 3.0 defect.
You can use Xcode to build for earlier versions of the OS but if you need to build with multiple SDKs you should install them. Xcode supports multiple installations on a single machine and the install instructions document how to do it.
If you want to use the 3.0 SDK you can't built for OS 2.2.1 and submit that application to the app store - according to Apple's guidelines. They say that you must also install the 2.2.1 SDK and build with that. You can build 2.2 compatible apps but you are using beta tools which might introduce bugs.
It's one of those things that you can do as an intellectual exerxcise but, it's just not worth the risk for a real app.