2011-06-10 3 views
40

テスト用にデバイスを実行するパッケージをコンパイルするまで、私のユニットテストはxcode4で正常に機能しました。新しいスキームを作成した後、xcode 4がユニットテスト(リンカーエラー)を開始できません

私はユニットテストを実行し、次のエラーを取得しようとする今、新しいターゲットと新しいスキームを作成していたんでしたすべて:Tests.octestができませんでした[...]で

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

私は何を壊しましたか?

+0

おそらく関連性があり、おそらく参考になります。[1](http://stackoverflow.com/questions/2867251/ocunit-testing-an-embedded-framework)[2](http://stackoverflow.com/questions/6268259)/xcode-4-unit-testing-linker-error) – PengOne

答えて

28

また、既存のプロジェクトにターゲットを追加した後に、Xcode 4の問題が発生しました。私は最終的に、プロジェクトのXcode DerivedDataが破損していることを知りました。そのデータを削除することによって、Xcodeはデータを再構築し、プロジェクトは正常に戻りました。自分のホームライブラリフォルダ(〜/ Library/Developer/Xcode/DerivedData /)にデータが見つかりました。

+13

これはテストの設定を直接修正しませんでしたが、DerivedDatasフォルダを消去すると意味のある手がかりになりました。それが壊れた理由は、製品名を変更したためで、テストターゲットは古いコンパイル済みバイナリをまだ見ていました。 – Haoest

+4

私も製品名を変更して壊しました。迷惑なことは、「問題なし」と言うことです。 –

+2

派生データを削除するには、オーガナイザに移動してプロジェクトを選択し、派生データの横にある削除を押します。 –

47

@Haoestと@Peter DeWeeseの上記のコメントへの回答1 - 私は製品名を変更したときと全く同じ問題がありました。

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

これを指摘してくれてありがとう - 私は、この状況のた​​めのこの代替の修正がコメントよりも高いプロフィールに値すると考えました。

+0

また、これらの変更を行った後で、プロジェクトをきれいにして再構築してください。 –

+0

製品名を変更するときにテストターゲットのターゲット依存関係が正しく更新されないため(つまりカッコ内に表示されているもの)、バンドルローダーを手作業で変更しなければならないという疑念を確認できますか? – edelaney05

+0

このソリューションが正しく機能するには、Simulator(iOS Simulator - > Reset Content and Settings ...)をリセットする必要がありました。さもなければ、シミュレータはテストの開始に数分かかり、テストは実行されませんでした。 –

6

私は(他の回答と、ここhttp://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/述べたものを含む)すべてのものを試してみましたが、最終的には別の解決策が見つかりました:デバッグ対象のためのために(ビルド設定の展開セクション)

セットの展開後処理を。私はこれをした前

は、実行ファイルが剥奪されていた、とのリンクが

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

コピー中にストリップリンク製品とストリップのデバッグシンボルがNOに設定されたことがどんなにで失敗し、それは何の違いは行われません - 展開後処理設定を変更するだけで、シンボルが削除されていないことが確認されました。

+0

+1それは私のためにそれをしました。他のすべてを試しました。ありがとう! – seeker12

2

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

2

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

関連する問題