web-dev-qa-db-ja.com

SwiftプロジェクトでのCocoapodsのテストと使用の問題

XCode 6 Beta-6を使用して、Swiftでアプリを作成しています。 Cocoapodsを使用しており、いくつかの単体テストを作成しています。

問題はこれです:明らかに以下を含むプロジェクトを持つことは不可能です:

1)Swiftで書かれたプロジェクト

2)cocoapodsを使用してインストールされたいくつかのポッド

3)一部のポッドをインポートするObjective-Cブリッジヘッダーファイル

4)単体テスト

これは奇妙に聞こえますが、私の手順に従います。pod installを実行した後、Objective-Cブリッジヘッダーを作成し、1つのポッドをインポートします。すべてが機能します。次に、いくつかのテストを記述します。独自のクラスをテストするには、「プロジェクトとして」(または「メインターゲットとして」というモジュール)をインポートする必要があります。「MyAwesomeApp」プロジェクトにimport MyAwesomeApp私のテストファイル。

残念ながら、このステップではXCodeはコンパイルされません。「import MyAwesomeApp」行に「ブリッジヘッダーをインポートできませんでした '/path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp-Bridging-Header.h」というエラーが表示されます。
およびエラー「xxx.hファイルが見つかりません」は、ポッドをインポートする可能性を除いて、Bridging-Headerファイルに表示されます。

また、Obj-cブリッジファイルにポッドをインポートしない場合、プロジェクトは正常にコンパイルされます。

Objective-Cブリッジヘッダー(ワークスペース内の別のサブプロジェクトから取得したObjective-Cファイルを含む)とテストに使用される「メインモジュール」の両方をインポートするときに競合が発生しているようです。

解決策があるかどうか知っていますか?何が欠けていますか?ありがとう

注:回避策として、Objective-Cブリッジヘッダーにポッドをインポートし、メインモジュールをテストに含める代わりに、テストするすべてのクラスを「テスト」ターゲットに追加できます。これは機能しますが、最もクリーンなソリューションではありません(私は思う)

32
JJSaccolo

メインターゲットのビルド設定を見ると、「ヘッダー検索パス」設定用にリストされた多数のディレクトリがあることがわかります。

これらの値をテストターゲットの下にコピーする必要があります。または、Podfileを変更して、メインターゲットとテストターゲットの両方を含め、installを再実行することができます。

platform :ios, '7.0' 
link_with 'mainapp', 'mainappTests'
...

また、CocoaPodsに関連しない、必要になる可能性のあるその他のヘッダーパスにも注意してください。

また、クラスの単体テストを行う場所には、クラスにパブリックメソッドがあることを忘れないでください。

お役に立てれば。

32
sergio

プロジェクトレベルで「Objective-Cブリッジヘッダー」設定を構成している可能性があるため、「テスト」ターゲットはその値を継承し、この「テスト」ターゲットはCocoapodsとリンクされていない可能性があります。

使用する link_with @sergioが示唆するように、「プロジェクト」->「情報」->「構成」で「テスト」ターゲットの「Pods * .debug/release」構成を設定します。

7
Alberto Salas

Podfileのlink_withコマンドに加えて、メインプロジェクトモジュールをテストファイルにインポートする必要がありました。この方法では、クラスとメソッドを公開する必要はありません。

特別な@testable annotationに注意してください

@testable import my_tutorial_app

また、私のメインプロジェクト名には英数字以外の文字が含まれていたため、アンダースコアで置き換える必要がありました_

0
Kevin Goedecke