web-dev-qa-db-ja.com

Xcode 5とphonegap:シミュレーターではなく、デバイスのビルドでリンカーエラーが発生しました

私たちのphonegapアプリはiphoneシミュレーター用に正常にビルドされますが、iphoneでアプリをビルドするときにリンカーエラーを生成します。変更されたのは、testflightとテストアプリのインストールだけでした。

Testflightとテストアプリはすでに削除されていますが、リンカーエラーは残ります。

これを修正する方法についてのアイデアはありますか?

Xcode5とphonegap3.4を使用しています。

エラー:

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)
10
Crashalot

また、意図せずにxcode 5.1にアップグレードしたため、問題が発生したようです。 phonegap3.4とxcode5.1は、いくつかの変更を加えない限り互換性がありません。

解決策は次のとおりです: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

8
Crashalot

この種の問題はXcodeの更新中に発生しますが、使用しているサードパーティのツールはこのアーキテクチャarmv64で更新されない場合があります。

したがって、XCodeからプロジェクトナビゲータをクリックします。

プロジェクトからTargetsをクリックし、プロジェクトからBuildSettingsをクリックします。

その中でValid Architecturesを見つけます。

それをダブルクリックして、そこからarmv64を削除します。

Armv7とarmv7sのみがあることを確認してください。

私の場合、これは私のために働いた。

プロジェクトをクリーンアップしてビルドします。これで正常に動作するはずです。

それがあなたを助けることを願っています。

[〜#〜]編集[〜#〜]

現在、2015年2月1日、Appleは、arm64アーキテクチャがサポートされていないアプリを許可しません。

したがって、提出するすべてのアプリがarm64をサポートしていることを確認してください。

33
Manthan

これが些細な答えのように思えるかもしれませんが、リンカーエラーが表示された場合は通常、次の手順を実行します。

  • コードが最新であり、すべての最新の修正とバージョンがあることを確認してください。
  • 必ずサブモジュールを更新してください。 gitで:git submodule update --init --recursive
  • クリーンビルドフォルダを実行してください:製品に移動し、クリーンにカーソルを合わせて一緒に押し(コマンド+オプション)、[クリーンビルドフォルダ]をクリックします。

すすぎ、繰り返します。

正しく参照されていないモジュールがある場合は、ビルドフェーズに進み、問題のあるモジュールを削除して、再度追加します。

1
gran_profaci