10
votes

Xcode 5 et PhoneGap: erreurs de liaison sur la construction de l'appareil mais pas pour le simulateur

Notre application PhoneGap repose bien pour l'iPhone Simulator, mais génère des erreurs de liaison lors de la construction de l'application sur un iPhone. La seule chose qui a changé était d'installer TestFlight et une application de test.

Nous avons déjà supprimé TestFlight et l'application de test, mais les erreurs de test restent. P>

Des idées sur la manière de résoudre ce problème? P>

Nous sommes sur Xcode 5 et PhoneGap 3.4. p>

Erreurs: p>

ld: warning: ignoring file /Users/c/Library/Developer/Xcode/DerivedData/s-fhgxmhdprdjvwahdbgwuagoragit/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (arm64): /Users/c/Library/Developer/Xcode/DerivedData/s-fhgxmhdprdjvwahdbgwuagoragit/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_CDVWebViewDelegate", referenced from:
      objc-class-ref in CDVInAppBrowser.o
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_CLASS_$_CDVPlugin", referenced from:
      _OBJC_CLASS_$_CDVDevice in CDVDevice.o
      _OBJC_CLASS_$_CDVConnection in CDVConnection.o
      _OBJC_CLASS_$_LowLatencyAudio in LowLatencyAudio.o
      _OBJC_CLASS_$_CDVLogger in CDVLogger.o
      _OBJC_CLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
      _OBJC_CLASS_$_InAppPurchase in InAppPurchase.o
  "_OBJC_METACLASS_$_CDVPlugin", referenced from:
      _OBJC_METACLASS_$_CDVDevice in CDVDevice.o
      _OBJC_METACLASS_$_CDVConnection in CDVConnection.o
      _OBJC_METACLASS_$_LowLatencyAudio in LowLatencyAudio.o
      _OBJC_METACLASS_$_CDVLogger in CDVLogger.o
      _OBJC_METACLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
      _OBJC_METACLASS_$_InAppPurchase in InAppPurchase.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
      objc-class-ref in CDVDevice.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 CDVDevice.o
      objc-class-ref in CDVConnection.o
      objc-class-ref in LowLatencyAudio.o
      objc-class-ref in CDVInAppBrowser.o
      objc-class-ref in InAppPurchase.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)


0 commentaires

3 Réponses :


8
votes

On dirait que nous sommes également mis à niveau involontairement sur Xcode 5.1, causant le problème. PhoneGap 3.4 et Xcode 5.1 sont incompatibles que si vous apportez des modifications.

Voici la solution: http: //shazronatadobe.wordpress .COM / 2014/03/12 / xcode-5-1-and-cordova-ios /


1 commentaires

Merci mec, cela fonctionne, déteste vraiment les mises à jour de Apple ... même s'est produite avec Mavericks, complètement détruit mes clés RSA et mes outils GCC / Command



1
votes

Désolé si cela pourrait sembler une réponse trite, mais les étapes suivantes sont généralement ce que je fais toujours lorsque je vois des erreurs de liaison:

  • Assurez-vous que votre code est à jour, avec toutes les dernières corrections et versions.
  • Assurez-vous de mettre à jour vos sous-modules. Dans GIT: Mise à jour de la sous-module GIT --Init --Recursive
  • Veuillez faire un dossier Clean Build: Allez sur le produit, survolez Nettoyer et appuyez sur ensemble (commande + option) et cliquez sur "Nettoyer le dossier de construction".

    rincer et répéter.

    Si vous avez des modules qui ne sont pas des références correctement, dirigez-vous vers vos phases de construction, supprimez les modules qui vous troublent et les ajoutent.


0 commentaires

33
votes

Ce type de problèmes surviennent lors de la mise à jour de votre Xcode, mais tout outil tiers que vous utilisez peut ne pas être mis à jour avec cette architecture armv64 .

Donc, cliquez sur votre navigateur de projet de Xcode.

Cliquez sur Cibles à partir de votre projet et cliquez sur BuildSettings de IT.

Trouver Architectures valides .

Il suffit de double-cliquer sur cela et de supprimer armv64 de cela.

Assurez-vous qu'il existe armv7 et armv7s uniquement.

Dans mon cas, cela a fonctionné pour moi.

Nettoyez et construisez votre projet. Ça devrait fonctionner bien maintenant.

J'espère que ça vous aide.

Modifier

Maintenant, à partir de févr. 2015 , Apple n'autorisera pas les applications sans architecture ARM64 supportée.

Assurez-vous que toutes les applications soumises ont un support ARM64.


4 commentaires

Cela a fonctionné pour moi aussi. J'utilisais Cordova 3.6 + Xcode 6 et j'essayais de bâtir pour iPhone 6. Cela a fonctionné dans l'émulateur, mais la construction s'est écrasée pour un appareil iPhone 6. Supprimer ARMV64 Comme mentionné ci-dessus fixe le problème. Merci!


@manthan. Effectuer les étapes ci-dessus me laisse avec l'erreur suivante lorsque j'essaie de construire le fichier XCodeProj. Des idées? Exécuter Mac OSX 10.9.5 (Yosemite) Aucune architecture à compiler pour (seulement_active_arch = YES, active arc = x86_64, valide_archs = i386


@CorneliusParkin: Pour cela, cliquez sur votre navigateur de projet, à partir de là, cliquez sur des cibles, puis dans les architectures, définissez une architrecture active dans le no. Vous serez bon d'aller.


S'il vous plaît supprimer cette réponse. Les gens vont essayer, puis voir la modification en bas.