0

アプリケーションを iOS5 シミュレーターで実行すると、次のログ出力が表示されます。どちらも同じ場所です。JSONKit の一部であるほぼすべてのクラスで次のエラーが発生します。

Class JKSerializer is implemented in both /Users/myHomeDir/Library/Application Support/iPhone Simulator/5.0/Applications/33E6C55B-4883-48FF-BEFF-3FBA9C071CAB/MyApp.app/MyApp and /Users/myHomeDir/Library/Application Support/iPhone Simulator/5.0/Applications/33E6C55B-4883-48FF-BEFF-3FBA9C071CAB/MyApp.app/MyApp. One of the two will be used. Which one is undefined.

これが適切である場合、複雑なマージを実行したばかりであり、以前のバージョンに戻す必要はありません。

このエラーがどのように発生するか、どのように防止し、どのように修正するかについてのアイデアはありますか?

4

2 に答える 2

3

これは、JSONKit.m実装ファイルが複数のターゲットのメンバーであり、それらのターゲットの 1 つが他のターゲットへの依存関係として含まれているためです。

たとえば、ターゲットのメンバーシップを確認するには:

ここに画像の説明を入力

Pods-UnitTestsここで、ファイルがとのメンバーであることがわかりますPods

これは、それぞれのターゲットの Build Phases -> Compile Sources の設定を反映しています。

2 つのターゲットのメンバーであること自体は問題ではありません。むしろ問題は、これらのターゲットの 1 つが他のターゲットに依存していることです。に依存Pods-UnitTestsしていPodsます。そのため、単体テストのビルド トランスクリプトを確認するときに を検索するとJSONKit.m、2 回見つかります。1 回目は libPods.a 用で、2 回目は Unit Tests ターゲット用です。

CocoaPods を使用していない場合、解決策は単純にJSONKit.mファイルを削除して、一度だけコンパイルされるようにすることです。

CocoaPods を使用している場合、ファイルを 2 回コンパイルしたくない場合でも、ユニット テスト コードのどこかにヘッダーをインポートする必要があることは間違いないため、ソリューションが何であるかはわかりません。まだ私はそれを行う方法がわかりません。

ここにいくつかの参照があります:

https://github.com/CocoaPods/CocoaPods/issues/115

クラス Foo は MyApp と MyAppTestCase の両方に実装されています。2つのうちの1つが使用されます。どれが未定義ですか

http://sealedabstract.com/code/tired-of-getting-mach-o-linker-errors-when-unit-testing/

于 2012-12-21T11:08:35.987 に答える
1

リンク先のサードパーティ ライブラリに JSONKit が含まれているかどうかを確認します。

この問題をデバッグする方法を説明した詳細な投稿があります。

于 2013-02-24T11:03:25.367 に答える