I have updated my XCode to 6.0.1 Before this update, I was able to build my project in both simulator and in my device. But now, it is giving me Apple Mach-O Linker Error
I surfed a lot. I have deleted the DerivedData folder. Still having the Problem.
I am building a Phonegap App. Please help me.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_CDVWebViewDelegate", referenced from:
objc-class-ref in CDVInAppBrowser.o
"_OBJC_CLASS_$_CDVInvokedUrlCommand", referenced from:
objc-class-ref in CDVContacts.o
objc-class-ref in CDVFile.o
"_OBJC_METACLASS_$_CDVViewController", referenced from:
_OBJC_METACLASS_$_MainViewController in MainViewController.o
"_OBJC_CLASS_$_CDVPlugin", referenced from:
_OBJC_CLASS_$_CDVLogger in CDVLogger.o
_OBJC_CLASS_$_CDVContacts in CDVContacts.o
_OBJC_CLASS_$_CDVDevice in CDVDevice.o
_OBJC_CLASS_$_CDVNotification in CDVNotification.o
_OBJC_CLASS_$_CDVFile in CDVFile.o
_OBJC_CLASS_$_CDVFileTransfer in CDVFileTransfer.o
_OBJC_CLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
...
"_OBJC_METACLASS_$_CDVPlugin", referenced from:
_OBJC_METACLASS_$_CDVLogger in CDVLogger.o
_OBJC_METACLASS_$_CDVContacts in CDVContacts.o
_OBJC_METACLASS_$_CDVDevice in CDVDevice.o
_OBJC_METACLASS_$_CDVNotification in CDVNotification.o
_OBJC_METACLASS_$_CDVFile in CDVFile.o
_OBJC_METACLASS_$_CDVFileTransfer in CDVFileTransfer.o
_OBJC_METACLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
...
"_OBJC_CLASS_$_CDVViewController", referenced from:
_OBJC_CLASS_$_MainViewController in MainViewController.o
objc-class-ref in CDVDevice.o
objc-class-ref in CDVFile.o
"_CDVLocalNotification", referenced from:
-[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
"_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_CLASS_$_CDVPluginResult", referenced from:
objc-class-ref in CDVContacts.o
objc-class-ref in CDVDevice.o
objc-class-ref in CDVNotification.o
objc-class-ref in CDVFile.o
objc-class-ref in CDVLocalFilesystem.o
objc-class-ref in CDVAssetLibraryFilesystem.o
objc-class-ref in CDVFileTransfer.o
...
"_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_CLASS_$_CDVUserAgentUtil", referenced from:
objc-class-ref in CDVInAppBrowser.o
"_OBJC_CLASS_$_CDVCommandQueue", referenced from:
_OBJC_CLASS_$_MainCommandQueue in MainViewController.o
"_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
_OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
"_CDVPluginHandleOpenURLNotification", referenced from:
-[AppDelegate application:handleOpenURL:] in AppDelegate.o
-[CDVInAppBrowser openInSystem:] in CDVInAppBrowser.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
This kind of problems generally occur while updating your Xcode but any third party tool you are using may not be updated with this architecture
armv64
.So Click on your Project Navigator from XCode.
Click On
Targets
from your Project and click onBuildSettings
from it.Find
Valid Architectures
in it.Just double click on that and remove
armv64
from that.Make sure there is armv7 and
armv7s
only.If this does not work then try to remove
armv7s
also.Please check all your frameworks are linked properly and referenced. Try to remove and add again the frameworks for that third party tool.
Please check all the frameworks are properly referenced.
In my case this worked for me.
Clean and build your project. It should work fine now.
Hope it helps you.
I found the solution, isn't a monkey patch, its a correction of the project. What we need to do its to change the architectures supported by the application:
See the youtube video for detailed information.
I got the same issue when I imported some git project, finally found the solution in changing the Development target.
go to Project->General->Development Info and change Deployment target.
I uninstalled the whole XCode 6. I updated the phonegap in my mac and reinstalled it again. Created a new phonegap project. Copied the code (www folder) into the new project. Build it. And it is working fine in XCode 6.
Sorry for the delayed reply
You can remove 64bit support as Manthan said, but for app store compliance (starting 1 February 2015) you do need it. I would suggest starting the process of updating all your Frameworks etc. to versions which do support 64bit.
From what I have seen and experienced, using Cocoapods is the easiest route to follow as it is really easy to control your framework version and update as well as downgrade to other versions. I would suggest finding out what your current versions of frameworks are and slowly updating them from there, until you find a version with 64 bit support which works with your current build.
Another method that I have found which usually fixes mach-o errors are the following:
Target => Architectures => Build Active Architectures
is set to NO.Target => Search Paths => Framework search paths
, andLibrary search paths
has$(inherited)
as their first entry.Converting to 64bit can be a really daunting task, but will probably be worth it in the long run.