I'm considering dropping 32-bit support for in favor for Automatic Reference Counting (which is only supported for 64 bit binaries).
I'd like to avoid these two scenarios with the Mac App Store:
For a user of an old 32-bit Mac:
who did purchase the previous version with 32-bit support: Will they see an update message for the app in the Mac App Store? If so, the (now 64 bit only) update would not work for him/her.
who has not purchased the app before: will they be able to purchase the app although it will not run on their system?
ARC 64 bit only: http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html#//apple_ref/doc/uid/TP40011226
EDIT: I found one occasion of somebody being able to download a 64 bit only app to a 32 bit MacBook and being presented with an error message "Your purchase could not be completed". In this case it was a free app. I wonder when this message would pop up for a paid app (before or after the payment).
http://www.linethirteen.com/blog/2011/01/mac-app-store-32-bit-vs-64-bit/
I've also found out that ARC requires 64bit processors. However, I managed to build a fat binary where the 64bit version uses ARC and the 32bit version uses the garbage collector. To do this I had to do the following:
lipo
to assemble a fat binary from the binaries in the two targetsBoth targets use the same source, but a few
#ifdef __OBJC_GC__
statements were necessary. I did have to give up synthesized ivars for backward compatibility :(I don't know what App Store will do (and it's probably subject to change, anyway), but if the app does get delivered to 32-bit customers, you can work around the problem in this way:
lipo
in a shell script phase in the first target to assimilate the 32-bit binary into the 64-bit binary.You'll then have a Universal Binary (or “fat binary”) that is your real application on 64-bit machines, and the “please upgrade your Mac” application on 32-bit machines.