IOS architecture 64bits

930 views Asked by At

Our phonegap app builds fine for the iphone simulator but generates linker errors when building the app on an iphone. the only thing that changed was installing testflight and a test app.

We already removed testflight and the test app, but the linker errors remain.

Any ideas on how to fix this?

We're on xcode 6.2 and ordova 3.4.0

Errors:

ld: warning: ignoring file /Users/gusph/Library/Developer/Xcode/DerivedData/momitSHDApp-evgpydfzbrlcmzazjhmquxttnqnq/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (arm64): /Users/gusph/Library/Developer/Xcode/DerivedData/momitSHDApp-evgpydfzbrlcmzazjhmquxttnqnq/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture arm64:
  "_CDVPageDidLoadNotification", referenced from:
      -[CDVSplashScreen pluginInitialize] in CDVSplashScreen.o
  "_OBJC_CLASS_$_CDVWebViewDelegate", referenced from:
      objc-class-ref in CDVInAppBrowser.o
  "_OBJC_CLASS_$_CDVInvokedUrlCommand", referenced from:
      objc-class-ref in CDVFile.o
  "_CDVLocalNotification", referenced from:
      -[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
      objc-class-ref in CDVDevice.o
      objc-class-ref in CDVFile.o
  "_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_METACLASS_$_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_CLASS_$_CDVPlugin", referenced from:
      _OBJC_CLASS_$_NotificationsNode in NotificationsNode.o
      _OBJC_CLASS_$_CDVConnection in CDVConnection.o
      _OBJC_CLASS_$_CDVCamera in CDVCamera.o
      _OBJC_CLASS_$_CDVBattery in CDVBattery.o
      _OBJC_CLASS_$_CDVLogger in CDVLogger.o
      _OBJC_CLASS_$_CDVContacts in CDVContacts.o
      _OBJC_CLASS_$_CDVDevice in CDVDevice.o
      ...
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController 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
  "_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVPluginResult", referenced from:
      objc-class-ref in NotificationsNode.o
      objc-class-ref in CDVConnection.o
      objc-class-ref in CDVCamera.o
      objc-class-ref in CDVBattery.o
      objc-class-ref in CDVContacts.o
      objc-class-ref in CDVDevice.o
      objc-class-ref in CDVAccelerometer.o
      ...
  "_OBJC_METACLASS_$_CDVPlugin", referenced from:
      _OBJC_METACLASS_$_NotificationsNode in NotificationsNode.o
      _OBJC_METACLASS_$_CDVConnection in CDVConnection.o
      _OBJC_METACLASS_$_CDVCamera in CDVCamera.o
      _OBJC_METACLASS_$_CDVBattery in CDVBattery.o
      _OBJC_METACLASS_$_CDVLogger in CDVLogger.o
      _OBJC_METACLASS_$_CDVContacts in CDVContacts.o
      _OBJC_METACLASS_$_CDVDevice in CDVDevice.o
      ...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
3

There are 3 answers

0
Droppy On

This linker error message is the key:

.../libCordova.a, file was built for archive which is not the architecture being linked (arm64)

Static and dynamic libraries under OSX and iOS are fat in that they can hold code for multiple CPU architectures. That library doesn't have the arm64 architecture and therefore cannot be used.

The solution is to get a version that does support arm64. If you are building that library then you are not including the CPU architecture when building it.

0
Putz1103 On

From this link:

This means that starting at that time, Cordova-based apps 
should be built using a version of Cordova that has 64-bit iOS support.

The first version of Cordova to include 64-bit for iOS is 3.4.1. 
Therefore, to meet these requirements of the Apple App Store, you should be 
using at least version 3.4.1 of Cordova before this February deadline.

Make sure you are using a version of Cordova that has the 64bit architecture built in. You appear to be currently using one without (an old version).

0
Rudra On

remove arm64 from Valid Architectures of CordovaLib Targets,
Also set 'NO' to Build Active Architecture Only,
Make same settings to Main app.