tags:

views:

296

answers:

3

I just uploaded my iPhone application into App Store. It is in Review process. By the way, when I see the details, it is showing binary as "Binary Type: Non-Fat Binary".

I just want to know: why is it showing like this? What does they (Apple) mean that it is a Non-fat binary?

+1  A: 

A fat binary is capable of running on both powerpc macs and intel macs. It is fat because it is two executables rolled into one. A non fat binary is only capable of running on one platform.

stonemetal
Technically, "fat" means the application will run on at least two architectures. These might include x86, x64, ARM, PowerPC, PowerPC64, or even specific processor sub-families.
Mark Bessey
Thanks for the response. I am so sorry, not able to understand the explanation clearly. Why my application should run on multiple architecture desktop machines as i created application only for iPhone devices right? And what is called Powerpc macs? Does it not run on ARM?
The iPhone runs an OS X derivative. OS X has the plumbing to support multiple types of processors. This includes the binary carrying a marker for weather or not it is Fat. Your iPhone app should never be marked as fat since it is only capable of running on the iPhone.
stonemetal
PowerPC is the type of processor Apple used in all Macs from 1992 through 2006. It was produced by IBM and Motorola. In 2006 Apple transitioned to x86 and as such they had to support Macs with multiple types of processors in OS X. They did this by compiling for both platforms and calling the resulting binary Fat. Older binaries that didn't have this marker were called non fat and required Rosetta on Intel. Rosetta is a PowerPC emulator they developed to run non fat binaries on Intel Macs.
stonemetal
Thanks a lot. Finally, I want to know that my built iPhone binary will run on what type of iPhone devices and not run any iPhone version devices?
Continuation for above comment: If they mentioned that as Non-Fat Binary..
In this case, I don't believe that the "fat binary" refers to PowerPC / Intel, but to the two different ARM architectures of the available iPhone OS devices. See my answer for more.
Brad Larson
+3  A: 

At WWDC, it was mentioned that you can build a binary which supports both the ARM v6 instruction set of the original models of iPhone and iPod touch, as well as one that uses the new ARM v7 instruction set of the iPhone 3G S and new iPod touch models. I believe that you can build a fat binary with support for both of these architectures and upload that to iTunes Connect. This message in the xcode-users mailing list seems to support that.

Brad Larson
Ok thank you Mr.Brad. I hope my binary will run on iPhone 2.x and 3.x firmwares atleast and not on 3GS. Please advice.
Standard "non-fat" binaries should run just fine on all currently available devices (3G S or not). As long as you built your application for 2.x and tested it on both 2.x and 3.x OS devices, you should be just fine. The only reason you'd want to specifically create a fat binary would be to squeeze extra performance out of these new devices.
Brad Larson
A: 

I want to build my binary just for 3GS as it contains NEON assembly code, my app only works on 3GS. When I upload the binary to iTunesConnect, it rejects the binary saying that it should be compatible with armv6 as well. Is there any build setting that I can use so that I have a binary which iTunesConnect happily accepts and which runs only on iPhone 3GS(armv7). Please help.

Deepak