After installing Xcode 4.2 there is only iOS 5.0 SDK in Xcode.
Also I should support iPhone 3G with iOS 4.2.1.
How support two or more SDKs for one App with one Xcode?
I tried install Xcode 3 with iOS SDK 4.3 but Xcode crashes when starting.
Set the deployment target of the App to iOS 4.2.1, this will allow all iOS devices running 4.2.1 or upwards to run your App, however, you won't get any compiler warnings if you use stuff from eg. 5.0, so double check your code and add branches if needed.
Another thing is that since Xcode 4.2, the compiler only generates armv7 code, but since you also want support for the iPhone 3G, you have to manually tell it to also generate armv6 code by selecting your target, switching to the Build Settings Tab and there adding armv6 to the Architectures list.
Latest SDK included all required features from previous SDK versions. You shouldn't worry about it. If you want to support iPhone 3G just set iOS Deployment Target to iOS 4.2 (or another would you like) in project settings at Build Settings tab.
Don't remember to test your application on that iOS version.
Related
what is the allowed minimum target iOS version and device platform for a new iPhone App to get uploaded on AppStore
Apple support iOS 4.3 see Setting Deployment Info. But support 64-Bit Binary minimum deployment target of iOS 5.1.1
Apple has officially announced apps need to be compiled with Xcode5 starting February 1, 2014:
So you must have Xcode5 for submission app in to app store. And in to xCode5 we can not define device platform like(iPhone4,iPhone4s,iPhone5,iPhone5s.. etc.) we can set deployment Target so you can setting minimum deployment target is 6.0 if you want to less then 6.0 and if you are not find that Option like Bellow image you can directly type in to Deployment Target filed.
Building with Xcode 5 is currently required for iOS App Store submission. Xcode 5 does not include an armv6 compiler, thus does not support building for the original iPhone (2G) or the iPhone 3G, which only run armv6 code, or for iOS versions below 4.3, which also require armv6 code. So the 3GS and iOS 4.3 and newer are the supported lower limits.
Note that using Xcode 5 to build arm64 binaries for the newest devices has a Deployment Target lower limit of iOS 5.1.1. Anything lower won't create a functional build.
However, there are reports that one can additionally build the app with old Xcode 4.3 or earlier, which does include an armv6 compiler, and then use lipo to combine the results with an Xcode 5 build archive to support both newer and older devices down to iOS 4.0. Manual plist editing before codesigning may also be required after using lipo. Apple might currently be approving a small number of such lipo builds, however it is unknown whether they will continue to do so.
Starting from June 1st, 2015, APP updates needs to be 64bit and built with ios8 SDK.
Please check the answer:
I think Minimum target iOS version which apple should support be 4.3.
Check this if you want to add more targets: XCode 5 deployment target limited only to iOS 7
The latest release notes indicates 4.2.1 and lower will not be supported, we now have to use 2 version of Xcode to develop when supporting older devices?? This is going to be difficult to support older devices if we want to develop iOS6 AND support 4.2 and lower.
I don't think Xcode 4.4 will support iOS6. So this is the issue. How would developers easily support these platform without so much hassle?
You can do this, but it requires some minor Xcode hacking, and some sacrifices. Depending on what you mean by "support iOS 6", this may or may not be sufficient for you. If you just want your app to run on iOS 6, then this should work. If you also need your app to incorporate new iOS 6 features, then it won't.
(Note for others who don't have a problem using multiple versions of Xcode: this similar question has answers that do allow you to also use new iOS 6 APIs and directly target armv7s)
See basic instructions on chpwn's blog here (but read the rest of this below, too!)
Basically, you can use Xcode 4.5 to build for iOS 4 and above, but then you can't take advantage of the new iOS 6 only features. So, you're really building for iOS 4 and 5, and assuming that the app will run fine on iOS 6 (which should be true, but you'll need to test this yourself).
You'll need to copy the iOS 5 SDK folder
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk
from an old Xcode installation (which you'll need to keep around briefly, or reinstall to a non-standard location). You'll then set the Deploy Target in your Build Settings to iOS 4.0 (or whatever minimum OS you want). You may need to open the project.pbxproj file in a text editor to set this manually:
IPHONEOS_DEPLOYMENT_TARGET = 4.0;
You'll also need to set the Architectures to armv6 and armv7. You cannot directly also target armv7s. But, that doesn't mean your app won't run on iPhone 5. armv7 executables should run on iPhone 5, simply without any optimizations added in armv7s. It's just that compatibility doesn't work in the other direction (e.g. armv7 executables don't run on an armv6 iPhone 3G).
There's also a step that might be necessary, that's not mentioned in chpwn's blog. You may get these warnings (which really are errors, because Xcode won't generate your executable properly):
warning: no rule to process file '$(PROJECT_DIR)/main.m' of type sourcecode.c.objc for architecture armv6
In order to fix this, you'll need to setup a custom Build Rule for your target that tells Xcode to use LLVM GCC 4.2 to generate armv6 code. Define the rule for files matching the pattern *.[mc]:
This will be a different compiler than the Xcode default, and you may need to adjust some of the syntax in your Objective-C code. Even though many people wanting to do this probably wrote their apps before ARC, it is important to note that LLVM gcc 4.2 does not support ARC.
Finally, you probably will still see warnings from Xcode about iOS deploy targets less than 4.3, and armv6 not being supported. Those, I found, were not problems, and could be ignored:
Running lipo -info on my app executable after this shows the desired result:
lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7
Xcode 4.5 makes iOS 4.3 the earliest supported operating system, which effectively orphans the original iPhone and the 3G.
If you want to support iOS versions earlier than 4.3, you will need to keep around a 4.4 version of Xcode.
To be a bit clearer : you cannot easily (meaning Xcode does not out-of-the-box) support pre-4.3 devices and use iOS 6 features in the same app. That's because iOS 6 features require XCode 4.5 which also sets iOS 4.3 as the minimum supported OS.
So, you have 3 choices :
Continue using XCode 4.4. You'll be able to target pre-4.3 iOS. You won't be able to take advantage of iOS 6 features, but your app should run fine on it assuming you perform adequate testing on actual iOS 6 devices.
Migrate to XCode 4.5. You won't be able to target pre-4.3 iOS, but you'll be able to take advantage of iOS 6 features.
Make two versions your app. Build one version with XCode 4.4 (as in option 1), and the other with 4.5 (as in option 2). From the point of view of distribution, these will be 2 separate apps, they'll each have their own bundle ID, etc. You will have two entries in the app store.
If you are comfortable going beyond what is supported directly by Xcode, see Nate's answer.
The original iPhone and iPhone 3G are the only devices that don't support iOS 5. The iPhone 3G is now 4 years old. You may want to consider dropping support for iOS 4. If you don't want to do that, I think you'll have to develop in two different versions of Xcode.
I assume that the dropped support for iOS 4.2.1 is not the core problem. In fact, I tried to work around this and do the following:
Build the app with iOS 6 SDK, setting deployment target to iOS 4.2.1 (which works).
Pack the app for ad hoc installation and install the app on an iOS 4.2.1 device (iPod touch 2G).
Test the app.
However, installation fails. The reason here is - afaik - not the iOS version. The reason is the architecture. XCode 4.5 no longer allows you to build for armv6. It only builds for armv7. On the other hand: all device which have armv7 or better can run iOS 5. The only devices which do not support armv7 are iPhone, iPhone 3G, iPod touch 1G and iPod touch 2G.
So for me the question is: can you build for armv6 with XCode 4.5 and iOS 6 as base SDK?
Edit: Which you cannot do, because the iOS 6 base SDK is not available for armv6. Right?
Try to set the project settings manually using IPHONEOS_DEPLOYMENT_TARGET=4.0. However, I don't know if there is any side effect.
I think that targeting to 4.3 is the best choice, according to ios version statistics
Does anyone know how to configure XCode so that the Destination drop down under Manage Schemes
encapsulats all previous simulators iOS 3.x and iOS 4.x? Currently the Destination drop down only
lists iOS 4.3 and iOS 5.0 devices. The only way, I am able to currently access previous simulators is by running
previous versions of XCode. I would like to run all simulators from XCode 4.2 without the need to revert.
I've already tried to change the deployment target. This does not work.
Thanks so much
For 4.3 set iOS Deployment Target to 4.3 (or earlier). Get the simulator from Xcode, Preferences, Downloads, Components.
According to #rckoenes: You can't reactivate the iOS 3.x Simulator, you will need to install an older version of Xcode (one with the iOS 3.x SDK) along side Xcode 4.x (with the iOS 4.x SDK), see answer here.
I want to change my iOS SDK. I have ios 5 and xcode 4.2 but I have to decrease it to iOS 4.2 SDK because of my application. In developer.apple.com the xcode 4.1 with iOS 5 so it is not available. How can I find xcode 4.1 with ios sdk 4.2 or how can I setup the ios sdk 4.2 without download xcode again. If it is not possible can you give me a linq for download xcode 4.1 with ios sdk 4.2
The base SDK should be the currently available one - it's the version of the SDK that you have installed to compile against.
However, further down the settings list you'll see that you can set the "Deployment Target" to be for lower versions iOS. That's the one that specifies the lower version of the OS that you app will run on.
Latest SDK included all required features from previous SDK versions. You shouldn't worry about it. If you want to support previous versions of iOS just set iOS Deployment Target to iOS 4.2 (or another would you like) in project settings at Build Settings tab.
Now, I use Xcode 4.2 supporting iOS 5.0. Apple has just released iOS 5.0.1 beta 2. I can install it on my iPhone.
I want to test with this beta version, i.e build code from Xcode.
How do I build code from Xcode 4.2 for device of iOS 5.0.1 beta?
Please help
In exactly the same way that you would do so for iOS 5.0. We can't talk about beta versions of the software, but we can talk about what happens when newer versions of iOS are released. When you connect a device with a newer version of iOS installed, the Xcode Organizer will give you a message like:
Xcode does not have debugging information for the version of iOS on the device named “Dev iPhone”. Xcode can collect debugging data from the device to enable development with this version of iOS. This process only needs to be done once per iOS version, and will take several minutes.
You simply click OK or similar, and Xcode downloads the necessary debugging data. You can then build to the device from Xcode and use all the debugging tools as usual. This process works for point releases. It is highly unlikely this would work for major updates (e.g. if iOS 6 was released) and it may or may not work for iOS 5.1, depending on the changes included. But when Apple have not released a new version of Xcode to developers, you can be sure it is because one is not required.
It is important to understand the distinction between an updated version of iOS (for the device) and the iOS SDK (for Xcode). A point release of iOS does not necessarily require any change to the iOS SDK, and therefore with Xcode's ability now to download the debugging information on demand (a feature that has been around for a while), you don't necessarily need an updated version of Xcode. Likewise, with Xcode 4.2 you still set the iOS 5.0 as your base SDK even if you are setting an earlier version (e.g. iOS 4.2) as your deployment target. You don't need the iOS SDK v4.2 to target iOS 4.2 for deployment. (Just make sure you add back "armv6" to targeted architectures in your build settings, if you still want to support the iPhone 3G and equivalent iPods, as in Xcode 4.2 this is not included by default.)