How to create a Fat Binary with armv6,armv7 and armv7s - iphone

I want to support my app in all the older versions of iOS as well as new. In the recent Xcode versions support for armv6 is dropped. How can I build my app to support for armv6 ? Do I need to include armv7s to support all newer versions of iOS ? Is it possible to create a binary that includes support for all of the 3 architectures?

Can't be done. You either use newer versions of Xcode and get armv7/armv7s along with iOS 6.x support (and support back to iOS 4.3), or you use older versions of Xcode to get armv6/armv7 but not iOS 6.x APIs (but support back to iOS 3.1.3).
There are so few devices still using iOS prior to 4.3 that there is no sane reason to support those older versions.
If you REALLY must support everything, create two versions of the app. One with newer support and one with older support. Then watch as your download ratio is 1,000:1.
At some point soon, Apple will most likely drop support for new apps being created with older versions of Xcode. Apple likes to keep moving forward.

Is just a link... I didn't try it..
"You can create an iOS binary that spans armv6 - armv7s with Xcode 4.5, but it takes some extra work .... You need to have multiple versions of Xcode installed ...."
ARMV6 SUPPORT WITH XCODE 4.5

Related

Supporting old iOS versions and devices

I need an iOS app to be compatible with previous iOS versions, at least from 4.0, and also with prior devices (iPhone 4S, 4, 3GS... and likely all iPad devices). I found some posts dealing with the iOS versions backwards compatibility that already have some years (for example, How to build against older iOS versions with the latest Xcode downloads?), and I donĀ“t know if this is deprecated or it still is the way to proceed, at least concerning the app building. Regarding programming issues, I guess I should check the documentation to know if the SDK features/libraries/frameworks I want to use are supported by all the iOS versions I want to be compatible... And having such information, how could I check programmatically the iOS version the device is running, in order to provide a certain feature or not?
On the other hand, regarding iOS versions and devices running them: could I find any Apple document listing which iOS versions supports each existing device? What hardware-dependent issues should I take into account while developing the app?
Thanks so much
Edit: Target architecture(s) is the only hardware consideration I've to take into account? Knowing that, for example, an iPhone 3GS is able to run, and is running, iOS 6.1.3, can I assume that the device will then support all the SDK's features, or I still need to check for the availability of such features depending on the device?
with the newest xcode version that supports iOS 6.0, you cannot develope for devices with iOS < 4.3 (lowest base SDK), and also the version that supports iOS 4.0 doesn't support iOS 6.0. For older devices you have to set the Architectures to armv6 armv7 in you project-settings tab "Build Settings".
for checking the iOS Version running, just check the available posts here at stack, you will find one that fits for you ;)
All in one I would set the base SDK to 5.1 because it's the last that can be used by iPad 1 and iPod touch 3. gen. and long enought available so everyone should have the latest update.
Older devices can have only iOS 4.2.x and are not supported by current xcode (4.6.2 (4H1003)).
iOS Support Matrix v2.4
This version is updated and includes iOS 7.
Link: http://www.iossupportmatrix.com
There is a great infographic that shows what versions of iOS are supported by which devices at http://iossupportmatrix.com.

iOS app downgrade compatibility requirements

I was wondering if it's possible to downgrade an app from the app store (ARM binary) to a lower version. For example if the app requires iOS 5.0 or 4.3 or later getting it to run on iOS 4.2 or 4.0.
I understand that the requirements are important as the newer version contains API linked calls only exposed on the newer iOS platform. However, I've many apps that are cabable of running on lower versions are needlessly compiled on newer versions of xcode (just a minor update supports a huge jump on iOS supported version, like iOs 4.0 -> iOs 5.0)
What I would like to do is maybe downgrade an iOS 5.0 app to iOS 4.3 app by verifying that there are no new linked functions apis and thereby adjusting the plist files to the lower vesion? Can otool or class-dump help with this?
Yes, it's possible. Submit a binary with a different "iOS Deployment Target" (in Project > Info and Targets > Deployment Target), even if it is lower than the one you currently have.
You'll need to do extensive testing to make sure your code runs on the various compatible iOS, since a lot has changed with the release of iOS 5 (and subsequently, 6), meaning a lot of functions and methods will not be recognized in those iOS versions.
Regarding finding which API's may not work, here's a small discussion of [Finding unsupported API's with OS version][1]
[1]: finding unsupported apis with os version "Finding unsupported API's with OS version".

Submitting iPhone5 app with Xcode 4.4.1 [duplicate]

I read on the internet that iOS 4.3 with armv7 is the lowest you can go if you want to support iPhone 5. So, if I want my app to run on iPhone 5, then do I need to set the deployment target as iOS 4.3 and set the architecture as armv7?
I couldn't find an official documentation for this. Could you correct this information if it's wrong?
UPDATE: I've found the answer in the Xcode 4.5 GM seed Release Notes documentation of Apple:
Changes in Xcode 4.5:
- Support removed for armv6
Xcode 4.5 and later does not support generating armv6 binaries.
- Minimum supported deployment target is iOS 4.3
The minimum supported deployment target with Xcode 4.5 or later is iOS 4.3
There doesn't seem to be any official statement on this, but it's pretty clear if you take a look at Xcode 4.5. It's also a logical step forward as last armv6 device (iPhone 3G) has been out of sale for over two years and without software updates for almost two years as well.
Note: as of posting this answer, an unofficial way to support both armv6 and armv7s has been found here: How to support both armv6 and armv7s for release build in xcode 4.5
This is only half the truth;
the other half is you can actually do combine an iOS 4.0/armv6 build into your iOS6/armv7(s) build.
This process is described here:
How to support both armv6 and armv7s for release build in xcode 4.5

Is it worth it to continue supporting iOS 4.x when iOS 6 is released?

I am working on a major feature update for my application and would love to include features such as iCloud, Core Data, ARC and storyboards among other things. The issue is that I don't have data on how many users are still running 4.x. I realize that the ideal solution would be to support both at once and just select the available features based on what version the particular device was on, but my upgrades would be so substantial that this would be very difficult. Does anyone else have reliable data on the percentage of users on older versions? And also would it be advisable to release an iOS 5+ version of my app separately as an "App 2.0?"
... my company`s app still suport ios 3.x ,although only 2% on ios 3.x and below... but we can do the vast majority of ios4.0+ effect with 3.x and below API.
Here's an article for reference.
80% on iOS5
With the OTA updates, Apple devices are normally upgraded very quickly. The decision to create an iOS5 only app early this year was not too hard to make and more so now.
I believe iOS users are the fastest ones to upgrade when there's a new update. Also I don't know if it is accepted to have 2 different apps for different versions of iOS. What you could do is having the app check what version of iOS the app is running and exclude the features that are unsupported for lower versions.
Can't find any really reliable sources but you could check out some update stats around.
Link
Changes for ios 6 and Xcode 4.5.x
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.

How to make an iPhone app compatible with multiple SDK (firmware) versions

With iOS 4 coming out soon, I have already planned to include an iAd in a future update of an app of mine. I assume that this will make my app unusable for anyone on a firmware lower than 4.0. Is there a way to change those variables and the .xib file based on the user's firmware?
Yes, you can build with the latest SDK (ie: 5.1) and still run on devices with earlier versions of the firmware (SDK).
Set your Deployment Target to the earliest version you want to be able to run with, ie: 3.0.
You set your Base SDK to the latest version that you are compiling with, ie: 5.0. This way you can reference the newer definitions and symbols in your code. This article "SDK and Deployment Targets" discusses Deployment vs Base SDK in detail.
Weak link to the libraries/frameworks with symbols that are only available in the newer iOS. This is so your app will run on a device that doesn't have the newer symbols.
You must check to see that a newer method is available before calling it. You have to make sure not to call a method that is 5.0 or 4.X only when your app is on a < 4.0 device. Of course you have to gracefully handle working on older versions by either using older methods or not supporting particular features that need newer SDK support.
NEW w/XCode 4.2: To support older devices you need to add armv6 to the build architectures and remove armv7 from the plist of required device capabilities.
See these SO questions and answers for more details:
deployment target vs base/active sdk
recommended way to support backward compatibility
How do you optionally use iPhone 3.0 features in a 2.0 compatible app
iPhone dev weak link framework
weak linking with IB
universal iphone/ipad app compilation error
iphone apps should include armv6