7

iOSプロジェクトの依存関係を管理するためにcocoapodsをいじり始めたところです。現在、GHIOSUnitを使用して単体テストを統合しようとしています。私は彼らのすべての指示に従い、彼らのサンプルテストを試しました、そしてそれはすべて魅力のように働きました。

プロジェクトの設定1 ここに画像の説明を入力してください

ただし、実際のプロジェクトファイルをテストに使用し始めると、問題が発生します。

クライアントサーバー通信にAFNetworkingを使用していますが、AFHTTPClientのラッパーである「CRLClient」という共有クライアントにアクセスすると、未定義のシンボルエラーが発生します。

Undefined symbols for architecture armv7:
  "_OBJC_METACLASS_$_AFHTTPClient", referenced from:
      _OBJC_METACLASS_$_CRLClient in CRLClient.o
  "_OBJC_CLASS_$_AFJSONRequestOperation", referenced from:
      objc-class-ref in CRLClient.o
  "_OBJC_CLASS_$_AFHTTPClient", referenced from:
      _OBJC_CLASS_$_CRLClient in CRLClient.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

依存関係を管理するためのポッドファイルは次のようになります

workspace 'Storyboards.xcworkspace'
platform :ios, '5.0'
pod 'AFNetworking', '1.1.0'
target :UnitTests, :exclusive => true do
pod 'GHUnitIOS', '0.5.6'
end

実際のプロジェクトターゲットは正常に構築され、AFNetworkingと完全に連携します。

PS UnitTestターゲットに追加するには、テストするすべてのファイルを追加する必要があります。次に、ビルドフェーズで「ターゲット依存関係」を追加するとどうなりますか?

ここに画像の説明を入力してください ここに画像の説明を入力してください

要するに、

  1. 異なるターゲット間で共通の依存関係を共有する方法は?
  2. 各ファイルを新しいターゲットに追加する必要がある場合、ターゲットの依存関係を追加すると実際に何が起こりますか?
4

1 に答える 1

18

を使用して

target :UnitTests, :exclusive => true do
  pod 'GHUnitIOS', '0.5.6'
end

UnitTestsターゲットにリンクしたい唯一のライブラリは、GHUnit主にリンクしたくないAFNetworkingと言っているということです。問題は、リンクしようとしているAFNetworkingコンポーネントが見つからない場所にAFHTTPClientサブクラスもインポートしているように見えることです。UnitTests

これを修正するには、排他的な呼び出しを削除できる必要があります

target :UnitTests do
  pod 'GHUnitIOS', '0.5.6'
end

これにより、ターゲットGHUnitのみにリンクしますが、両方にリンクします。「:exclusive => trueオプションが指定されていない限り、ターゲットにはデフォルトでブロックの外部で定義された依存関係が含まれます。」(ここから)UnitTestsAFNetworking

于 2013-03-21T13:02:58.870 に答える