web-dev-qa-db-ja.com

新しいスキームを作成した後、xcode 4がユニットテストの開始に失敗する(リンカーエラーが発生する)

単体テストは、テスト用にデバイスで実行するパッケージをコンパイルするための新しいスキーマを作成する必要があるまで、xcode4で正常に機能しました。

新しいターゲットと新しいスキームを作成するだけでしたが、単体テストを実行しようとすると、次のエラーが発生します。

リンクエラーが発生したため、[...] Tests.octestのテストバンドルをロードできませんでした。dyldは、テストバンドルがリンクされているフレームワークフレームワークまたはライブラリを見つけることができない可能性があります。フレームワークまたはライブラリのリンク時にインストールパスが正しくありませんでした。

私は何を壊しましたか?

40
Haoest

また、既存のプロジェクトにターゲットを追加した後、Xcode4で問題が発生しました。最終的に、プロジェクトのXcodeDerivedDataが破損していることがわかりました。そのデータを削除することで、Xcodeにデータを再構築させ、プロジェクトを通常の状態に戻しました。ホームライブラリフォルダー(〜/ Library/Developer/Xcode/DerivedData /)でデータを見つけました。

28
Mr. Berna

上記の@Haoestと@PeterDeWeeseの回答1へのコメントのように、製品名を変更したときにまったく同じ問題が発生しました。

製品の名前を変更した場合にこれを修正するには、テストターゲットの[ビルド設定]タブに移動し、[リンク]セクション(デバッグおよびリリースバンドルローダー設定)を変更する必要があります。製品の名前を変更した場合は、アプリケーションのディレクトリと名前の両方が正しくない可能性があります。

これを指摘してくれた両方の人に感謝します-しかし、私はこの状況に対するこの代替の修正はコメントよりも注目に値すると思いました。

47
iandotkelly

私はすべてを試しました(他の回答とここに記載されているものを含む http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/ =)、しかし最終的に別の解決策を見つけました:

デバッグターゲットの展開後処理(ビルド設定の展開セクション)をNOに設定します。

これを行う前は、実行可能ファイルが削除されていたため、リンクは次のように失敗していました。

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_SomeClassUnderTest", referenced from:
      objc-class-ref in SomeTest.o

コピー中にリンクされた製品のストリップとデバッグシンボルのストリップがNOに設定されていても、違いはありませんでした。展開後処理設定を変更するだけで、シンボルがストリップされていないことが最終的に確認されました。

7
sdsykes

同じエラーメッセージ。私の場合、テスト中に必要なクラスの1つをリンクしていませんでした。

2
alex-i

私の問題は、デバッグビルドで「リンク時間の最適化」が有効になっていることであることがわかりました。 noに設定すると、問題は解決しました。

2
Dan Poltawski

nodejs-mobile を使用していましたが、これはアプリでビルドしますが、テストではビルドに失敗します。

_Undefined symbols for architecture x86_64:
  _start_node
_

以前のすべての回答(ビルド設定、検索パス、新しい単体テストの作成、DerivedDataの削除)に加えて、最終的に解決されたのは、Xcodeでの単体テストの代わりに新しいUIテストを作成することでした。

正常に構築されました。次に、テスト定義を現在のテストから1つにコピーできます。

UI部分が必要ない場合は、生成されたテストのsetUpXCUIApplication().launch()のコメントを解除できます。これにより、以前と同じように高速に実行されます。

0
tjh