web-dev-qa-db-ja.com

ユニットテストターゲットをxcodeに追加しました-ブリッジヘッダーのインポートに失敗しましたが消えません

新しいテストターゲットをXCodeプロジェクトに追加しました。私のプロジェクトにはSwiftコードとObjective-Cコードがあり、ブリッジヘッダーがあります。UnitTestingのビルド設定にブリッジヘッダーを追加するか、import MyTarget、エラーが発生します:

failed to import bridging header

私はもう試した:

  • プロジェクト、ユニットテスト、メインターゲットのビルド設定にブリッジヘッダーを追加します。
  • 変更defines modulesからYesへ。
  • ブリッジヘッダーファイルをルートフォルダに移動します。

ビルドして正常に動作するサンプルプロジェクトの作成も試みました。私が持っているすべてをクリーンな新しいプロジェクトに取り込むことは、現時点ではオプションではありません。

34
Andrew

ポッドをパッケージマネージャーとして使用する場合は、検索パスなどを設定する必要があります。簡単な方法を示します。

これをPodfileに追加してみてください

target 'YourProductTests' do
    inherit! :search_paths
    # Pods for testing
end

およびpod install

わたしにはできる。

上記の解決策が役に立たない場合。手動で設定してみてください

  1. テストターゲットをクリックします->ビルド設定->タブ:すべて&結合-> Swiftコンパイラ-コード生成-> Objective Cブリッジヘッダー:xxx-bridging-headerを追加します

  2. 「検索パス」を確認し、主な対象に応じてFramework Search PathHeader Search PathsLibrary Search Pathの値を設定してください。たぶん、いくつかの検索パスがここで失われ、手動で再度追加します。

41
Victor Choy

@Victor Choyソリューションは私にとっては機能しますが、次のようにテストターゲットを製品ターゲット内に移動する必要がありました。

target 'YourProduct' do

   # Pods for product

   target 'YourProductTests' do
      inherit! :search_paths
      # Pods for product testing
   end
end

これは私にとってはうまくいきませんでした:

target 'YourProduct' do
   # Pods for product
end

target 'YourProductTests' do
   inherit! :search_paths
   # Pods for product testing
end
10
mkkrolik

この時点で、ユニットテストをSwiftで動作させるために_import MyTarget_を実行する必要はありませんでした。

一般的なソリューション

  • 試してみたと思いますが、アプリのターゲットとテストのターゲットに同時にブリッジヘッダーを追加したかどうかは明確ではありませんでしたか?
  • 別のオプションは、理想的ではないかもしれませんが、実際に2つのブリッジングヘッダーを持つように、テストターゲットにブリッジングヘッダーを追加することです。彼らは同じに見えるはずであり、良いテストになるでしょう。
  • $(SRCROOT)を使用してブリッジヘッダーパスを参照する場合は、正しいパスに評価されていることを確認してください。
  • 他のすべてが失敗した場合は、_.xcodeproj_の作業差分を作業プロジェクトのファイルと比較し、異なる可能性のある関連する値と一致させる必要があります。

ブリッジヘッダーシステムは完璧ではありませんが、ここで私が遭遇したいくつかの問題があります。

5
tfrank377

私も同じ問題に直面しました。次のようにすると、「ブリッジヘッダーのインポートに失敗しました」の問題が解決します。

手順:

  1. プロジェクトを選択->ビルド設定-> 'Defines module'を検索-> 'YES'を指定
  2. Objective-Cブリッジヘッダーパスのコピー
  3. テストターゲットを選択->ビルド設定-> Swiftコンパイラ-一般-> Objective-Cブリッジヘッダー->ブリッジヘッダーパスを指定します。
  4. テストターゲットの 'Header Search Paths'にios Targetsのすべてのヘッダーが含まれていることを確認してください。欠落しているヘッダーがある場合は追加してください。
  5. ビルド。

参照: このリンクを参照してください。

4
Ssrini