I have an app that I developed in Xcode 4.3.2. I am using the base SDK as 5.1. The app installs fine in iOS 5.0 and above. But I need to support iOS 4.0 and above.
The compiler I am using is Apple LLVM compiler 3.1.
I have added both armv6 and armv7 to the architectures (See attached image))
I created an AdHoc build. When I sync it using iTunes, it syncs fine with iOS 5.0 and above, I have not tested in iOS 4.3, but it does not install in iOS 4.2.1. It gives this error:
The app "App Name" could not be installed on the iPod "iPod Name" because it is not compatible with this iPod.
Any thoughts?
Thanks.
You should remove the armv7 from the Required device capabilities in the info.plist.
This restricts the app being installed on device that do not have an ARMV7 processor, like older iPad touches and iPhones.
Related
I have strange problem.
I made app with deployment target of iOS 6.0
I have iPhone 4s with iOS 6.1 with XCode 4.5 installed on my Mac. XCode doesn't see my device. It says "iOS Device" not "krunal's iPhone" as usual.
(I am sure that device is connected because I see it in iTunes.) XCode denies to start my application on device. It says:
"The version of iOS on “krunal’s iPhone” is not supported by this installation of the iOS SDK. Please restore the device to a version of the OS listed below, or update to the latest version of the iOS SDK"
Please help..
Upgrade to Xcode 4.6, which includes support for iOS 6.1.
Goto Organizer and Select your device and mark your device for development, this should do it.
This is a question out of interest, so please be as informative as possible with your answer.
I recently updated Xcode to 4.5 and lost access to iOS SDK 5.1. Using the method described in several SO posts (use an image from previous Xcode installer) I added the iOS SDK 5.1 again.
The environments I want to support with my apps are iPhone 3GS, iPhone 4, iPhone 4S and iPhone 5. Obviously with iOS SDK 5.1 and 6.0. What are the recommended build settings for these requirements?
Right now I set the Deployment Target on 5.1, Base SDK on 6.0, architectures on armv7 and armv7s. Is this correct?
Now, I believe iOS SDK 5.1 is not compiled for armv7s (iPhone 5 architecture). How do I make sure that the code compiled for iOS 6.0 also works on iPhones < 5? Right now I'm getting linker errors ld: file is universal (4 slices) but does not contain a(n) armv7s slice pointing to the iOS 5.1 SDK, when not checking Build For Active Architectures Only. How do I make sure that, when releasing to the App Store, the app will still run on iOS SDK 5.1. It appears to be compiling for armv7s in combination with iOS 5.1 -- which won't work.
Any help is greatly appreciated.
You didn't need to download SDK 5.1 at all. SDK 6.0 includes every libraries and headers SDK 5.1 includes, plus the added libraries and headers of iOS6.
Be sure to understand the difference between the version of the SDK, the versions of iOS your app will be compatible with, and the architectures you build your app for.
Compiling with SDK 6.0 does not mean that your app will only work on iOS6; it mean your app will be able to run on iOS from the version you set in IOS_DEPLOYMENT_TARGET to the version corresponding to the SDK, namely 6.0.
So if you want your app to be compatible with iOS 5.1 and above, you still compile it using Base SDK 6.0 and don't need SDK 5.1 at all: you just have to set the Deployment Target to 5.1 and the Base SDK on 6.0 (as you said in your question), so there is nowhere you need the SDK 5.1 for that, which is useless for compiling for iOS6, iPhone5 and armv7s anyway (it does not contains the necessary headers, libraries and architectures, that's why the SDK 6.0 has been released and is necessary).
Using an old SDK like 5.1 (you downloaded separately) with latest version of Xcode will probably lead you to problems, and will more importantly not allow you to compile your app for iOS versions higher than the version of the SDK (in your case 5.1). So do use SDK 6.0, even if you want your app to be compatible starting iOS 5.1.
For more information on the difference between the version of the SDK you use (Base SDK), the Deployment Target, and the supported iOS versions and architectures for your app, read the SDK Compatibility Guide in Apple documentation that explains it all in great details.
You are correct in setting the Deployment Target to 5.1 and you can leave the architectures on ARMv7 and ARMv7s.
You do not want to point to the 5.1 SDK, just use the iOS 6 SDK. Just make sure that you don't directly call any iOS 6 SDK only methods or classes.
The deployment target is the key here, this defines the minimum version of iOS needed to run this app, thus setting it to 5.1 will make you app run on 5.1 and higher.
I just sent my app to itunes using xcode 4.5 The app is compatible with iphone 3.5 screen and 4 screen. And with the iPad. When I go to binary details it says this:
Supported Architectures : armv7
Whats this mean? Will my app be compatible with all iPhones? Because it should work in any iphone model or ipad model. If no, how can I make it compatible with all devices (adding other architectures?)
Your app will run on the 3GS and later devices, assuming they meet your deployment target operating system version. To run on earlier devices, you need to build for ARM v6 as well, something I'm not sure you can do in Xcode 4.5.
XCode 4.5.x only supports armv7 architecture :
Changes in Xcode 4.5.x for ios 6
Xcode 4.5.x (and later) does not support generating armv6 binaries.
Now includes iPhone 5/armv7s support.
The minimum supported deployment target with Xcode 4.5.x or later is iOS 4.3.
The minimum support for iPhone is iPhone 3GS or later as earlier versions use armv6.
Interesting question, to avoid opening another similar question, what happen if I build my app for submission with armv6, armv7 architectures, iOS6 sdk, xCode 4.5 and deployment target 4.3?
I currently have armv6,armv7 Build settings under Architectures. Screenshot
With these settings I can successfully build and install my app to iPhone4,iPad3 devices and archive for Ad-hoc distribution without any warning about armv6.
Stefano
I am building my application for iOS6 and i want to support armv6 so i had added the armv6 in architecture and valid architecture. Now application is giving lot of errors when build on apple llvm 4.1 but it compiles on llvm gcc 4.2. And when i build an Adhoc app using llvm gcc 4.2 then it's not installing on iphone 3GS and ipod 3G.
It's possible as kenji has given a link in the accepted Answer
Xcode 4.5 removed support for building armv6 binaries.
You can't just add armv6 to the build settings, because the support to build it isn't there.
Edited to add
Since it was requested in the comments - confirmation for this comes from the Xcode 4.5 Release Notes
I had the same error message in 4.4.1. Problem was solved by changing deployment target from 4.0 to 4.3 and removing armv6 from Architecture.
I want to build an app that is compatible with iPod touches, iPhone 3g, iPhone 4, iOs3.0, etc...
Everytime I build on a 3GS, I use these build settings
Architectures: Standard (armv6 armv7)
Build Active Architecture Only (Unchecked)
Valid architectures (armv6 armv7)
And I select armv7 as the active architecture before I build.
However for 3G, I check the build active architecture only box
and build under armv6.
When I submit to the app store, will it matter what my build settings are for the final build? I noticed that the 3G settings work for the 3GS and 4, along with iOS 4.0. Should I just build active architectures only and select armv6 for the final build before submission?
Edit: Which architecture should I select when building for distribution. armv6 or armv7? Will armv7 still build on iPhone 3G when distributed on the App Store?
You need to set the "iPhone OS Deployment Target" for your project. Go to Project -> Edit project settings. Scroll to the "Deployment" section and change "iPhone OS Deployment Target" to iPhone OS 3.0 (or lower if you like).
It seems you need to read a bit about the Base SDK and Target SDK. It can be a bit confusion, your right. There is a very nice article at: Developing iPhone Apps with iOS4 SDK, Deploying to 3.x Devices
You should have no problem in making an app that runs on all the devices you want. I hope it helps.