In XCode 6.1 , I am getting error for iPhone 6, iPhone 5s(iOS 7.1) which says
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_ClientAuthenticator", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
linker command failed with exit code 1
Architectures : Standard Architectures(armv7, arm64) - $(ARCHES_STANDARD)
Base SDK : Latest iOS(8.1)
Valid Architectures: arm64, armv7, armv7s
IOS Deployment Target: iOS 6.0
The first thing you should make sure is that your static library has all architectures. When you do a
lipo -info myStaticLibrary.a on terminal - you should see
armv7 armv7s i386 x86_64 arm64 architectures for your fat binary.
To accomplish that, I am assuming that you're making a universal binary - add the following to your architecture settings of static library project -
Standard architectures (including 64-bit) (armv7, armv7s, arm64)of the static library project.
$ARCHS_STANDARDnow includes 64-bit. You can also do
lipo -infowithout it, and you'll figure out the missing architectures. Here's the screenshot for all architectures -
For your reference implementation (project using static library). The default settings should work fine -
Update 12/03/14 Xcode 6 Standard architectures exclude armv7s.
armv7s is not needed? Yes. It seems that the general differences between armv7 and armv7s instruction sets are minor. So if you choose not to include armv7s, the targeted armv7 machine code still runs fine on 32 bit A6 devices, and hardly one will notice performance gap. Source
If there is a smarter way for Xcode 6.1+ (iOS 8.1 and above) - please share.