Objective-CフレームワークをSwiftプロジェクトにインポートすると、ブリッジヘッダーで「ファイルが見つかりません」が表示される


96

ObjCベースのフレームワークをインポートしようとしているSwiftプロジェクトがあります。フレームワークはプロジェクトのパスの下のディレクトリにあり、Xcodeでプロジェクトによって参照されます。また、プロジェクトの「ビルドフェーズ」ページの「ライブラリとバイナリをリンクする」にも追加されます。

ただし、何らかの理由で、Bridging-Headerファイルにフレームワークを含めることができないようです。次のエラーが発生します。

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found
#import <Parse/Parse.h>
        ^
<unknown>:0: error: failed to import bridging header 'BridgingHeader.h'

私がチェックしたもの:

  1. 「Install Objective-C互換性ヘッダー」は「YES」に設定されています。
  2. ヘッダー検索パスには、フレームワークへのパスが含まれています。

私は何かが欠けていると確信しているので、誰かが手掛かりを持っているなら、それは素晴らしいでしょう。


3
ライブラリパスをに入れるのを忘れHeader Search Pathsました。この場合、質問は
役に立ち

回答:


78

解決策を見つけました:

  • 「Objective-Cブリッジヘッダー」設定(別名SWIFT_OBJC_BRIDGING_HEADER)は、プロジェクトレベルではなく、ターゲットレベルで設定する必要があります。必ずプロジェクトレベルの設定値を削除してください。

(私には、なぜそれを修正するのかわからないので、Xcodeのバグのように見えます)。


1
これは本当に奇妙です。同じエラーが発生し、プロジェクトレベルでヘッダーが定義されたことがわかりました。すでにターゲットレベルで定義されていますが、サードパーティのフレームワークを追加できるようにするために、プロジェクトレベルから削除する必要がありました。Xcodeのバグのようです。
Jojodmo、2015

2
@MarcoAlmeida、テストのターゲットがある場合は、そこから「Objective-Cブリッジヘッダー」設定を削除してみてください。それは役立つはずです。
ダヴラットミル

3
承知不能。ありがとうございました。
Darren

1
ちょっと、そこ!ここに同じ問題があります:(上記の方法では解決されませんが...
Mike K

1
これはXcode 9.2で機能しました。
Oliver Eichhorn

58

同じ問題があります。たとえば、すべてのインポートをからに変更 #import "HMSegmentedControl.h"#import <HMSegmentedControl/HMSegmentedControl.h>ました。


7
ココアポッドを使用するには、これが必要です。ブリッジングヘッダーでは、#import "abc.h"ユーザー#import <abc / abc.h>として親指でポッドをインポートしないでください。
NaXir

1
あなたは神です!本当にありがとうございました。
アルパー、2017

私の場合、#import <ios-qr-encoder / UIImage + MDQRCode.h>を#import "UIImage + MDQRCode.h"に変換し、それが機能しました
Mashhadi

あなたは王様です
イタイスペクター

27

libユーザーヘッダーの検索パスにディレクトリを追加する必要がありました。

テストターゲット設定-ユーザーヘッダー検索パス

私の場合、libディレクトリには.a-libraryファイルといくつかのヘッダーファイルが含まれています。これらは、ブリッジングヘッダーファイルに含まれています。ただし、Swiftコンパイラはそれらを検出しません。${PROJECT_DIR}/libユーザーヘッダーの検索パスに追加した場合のみ、テストターゲットが構築されました。

(Mavericks 10.9.5でXcode 6.2を使用しています)


1
この問題を解決するには、メインターゲットのヘッダー検索パスにPods / *を追加します。興味深いことに、Swiftフレームワークを依存関係としてターゲットに追加する前は、この問題はありませんでした。Xcode 7ベータ6.
bizz84

これはまさに私にとってうまくいったことでした。ライブラリ(.a)を含むフレームワークがプロジェクトに含まれています。ユーザーヘッダー検索パスでライブラリのヘッダーへの検索パスを作成する必要がありました。
Chris Livdahl、2016

また、Pods / libraryフォルダーをインポートする必要がありました。どうもありがとうございました。
ノアティボー

17

原因はまったく異なりますが、同じエラーメッセージが表示されました。

セットアップ:

  • アプリターゲット、すべてのObj-Cコード
  • 単一の迅速なテストケースとアプリコードを参照するブリッジヘッダーを備えた単体テストターゲット

クリーン後(またはチームメイトのマシン上)に2番目の迅速なテストケースを追加したときに、単体テストターゲットをビルドするときにこのエラーが発生しました。

単体テストのターゲットにダミーのObj-Cクラスを追加することで修正されました。


5
ありがとうございました。これはまったく意味をなさないにもかかわらず、完全に機能しました。

後でダミーのObj-Cクラスを削除することができました。私の推測では、このソリューションの副作用は、テストターゲット固有のブリッジングヘッダーの作成であり、これにより(おそらく)Xcodeがホストアプリケーションのブリッジングヘッダーを無視するようになると思います。
clozach、2015年

上記の補足:クリーンビルドを実行した後、コンパイル中にセグメンテーション違反11が発生し始めました。試行錯誤の結果、ダミーの.mファイルが存在する必要があるようです、空の場合あります。狂気。
clozach、2015年

テストターゲットにダミーのobjcクラスを追加し、修正しました!
neoneye

5

cocoapodsを使用している場合は、次のコマンドを実行してポッドを再インストールしてください。

pod install

これは、他の構成(デバッグとリリース)がコンパイルされていたが、コンパイルされなかった新しい構成(同じファイルで問題が見つからない)を最近作成したため、役に立ちました。pod install追加された新しい構成には必要であるようです...
Mete

5

これはどういうわけか私のためのトリックをしました:

  • クリーンプロジェクト
  • クリーンビルドフォルダー
  • Xcodeを再起動します

ヒット&トライクをしない一般的な答えが付属していますか?
ニコ

この特定のヒット&トライトリックは非常に少ない労力しか必要としないので、他のソリューションを考えている間にトライしても害はありません。;)
Hlung

1
悲しいことに、この特定のヒット&トライのトリックは、あまりにも頻繁に正しい答えです。
ロバートシュミット

5

このエラーは、CocoapodsでライブラリCocoaImageHashingをインストールするときに表示されました。問題は、検索パスが間違っていることでした。そのため、ターゲットレベルのビルド設定->検索パス->ヘッダー検索パスでは、パスは既存のフォルダーに対応していませんでした。たとえば、フォルダー構造Headers / Public / 存在しなかった。パス$ {PODS_ROOT} / CocoaImageHashingを追加したところ、エラーは消えました。


4

少し奇妙ですが、テストターゲットの「バンドルリソースのコピー」フェーズにリソースを追加して、メインアプリターゲットからすべてのヘッダーをロードする必要があると思います。私の場合、追加main.storyboardしてエラーを処理しました。

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


4

これは、現在の構成を追加/名前変更した後で私に起こりました。

すべての構成は、cocoapodsによって生成された構成セットを使用するため、これらのものが一致する必要があります。

したがって、構成を追加/名前変更する場合、これらは正しい構成セットを使用する必要があり、そのためには実行pod installすることでそれが実行されます。


3

誰かを助けるなら。

私の場合、obj-cファイルが追加されましたが、参照フォルダー(xcodeの青いフォルダー)があり、ヘッダーでそれらを見つけることができませんでした。フォルダーではなくファイルをファインダーからxcodeに追加して解決しました。


2

私も同じ問題を抱えていました。私にとっての理由は、アプリとToday Extensionの両方に同じブリッジングヘッダーを使用していたためです。My Today ExtensionにはParseは含まれていませんが、ブリッジングヘッダーで定義されているため、Parseを探していました。Today Extensionの新しいブリッジングヘッダーを作成しましたが、エラーは消えました。


私と同じ問題のようには聞こえません。Today拡張機能はありません。私の場合、アプリのブリッジヘッダーを使用しており、Parseフレームワークはアプリの依存関係に含まれています。このエラーは、Parseだけでなく、他のフレームワークでも発生します。
Dia Kharrat、2015年

2

私のフレームワークは以前は機能していましたが、突然機能を停止しましたが、これらの答えはどれも機能しませんでした。[ビルドフェーズ]> [ライブラリとバイナリをリンク]でフレームワークを削除し、再度追加しました。再び働き始めました。


2

問題が発生し、2時間かけて問題を修正しました。以下のような私の環境:

ココアポッド0.39.0

迅速な2.x

XCode 7.3.1

手順:

  1. プロジェクトパス:project_name / project_name / your_bridging_header.h
  2. ビルド設定のSwiftセクションで、Objective-Cブリッジヘッダーは次のようになります。project_name/ your_bridging_header.h
  3. your_bridging_header.h、からすべての宣言を変更する.Hは#import
  4. 使用されているクラスでyour_3rd_partyyour_3rd_partyのインポートを宣言

あなたの答えは正解です。@ jamesthakidの答えを3番目のポイントに追加して、より明確にします。おかげで私のために働いた。
NaXir

5
「すべての宣言を.hから#importに変更する」とはどういう意味ですか?
Chris Gunawardena

1

既存のスキームを複製して、プロジェクトに別の構成を追加したところです。フレームワークのプロジェクトにも同じ名前の構成を追加して、同じDerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)フォルダーにビルドする必要がありました。そうしないと、.frameworkファイルが作成されないため、インポートできません。


1

今日、SwiftプロジェクトでObjective-Cで記述されたポッドを使用しようとしたときに同じ問題に遭遇しましたが、上記の解決策はどれも機能していないようです。

私がuse_frameworks!書いたpodfileで。この行をコメントしてからpod install再度実行すると、この問題は解決し、エラーはなくなりました。


1

(2017年5月27日更新)

Xcode 8. Swiftプロジェクト-Objective Cのインポート

知っておくべきこと:

  1. ブリッジヘッダーファイルは、プロジェクトのフォルダー内に保存する必要があります。(つまり、.xcodeprojが保存されているのと同じレベルではなく、1つ下のレベルで、すべてのSWIFTおよびOBJECTIVE Cファイルが保存されているフォルダーに保存されます)。それでもトップレベルでファイルを見つけることができますが、正しくリンクされず、Objective Cファイルをブリッジングヘッダーファイルにインポートできません。
  2. .hヘッダーファイルである限り、ブリッジヘッダーファイルには任意の名前を付けることができます。
  3. [ビルド設定]> [Swiftコンパイラ-全般]> [Objective Cブリッジヘッダー]のパスが、作成したブリッジヘッダーファイルを正しく指していることを確認します。
  4. 重要:それでも「見つからない」というメッセージが表示される場合は、まずブリッジヘッダーファイルを空にして、現在そこに書き込んでいるインポートをすべて消去してみてください。最初にブリッジヘッダーファイルが見つかることを確認してから、そのファイルに目的のcインポートを追加します。何らかの理由で、それが見つかった場合でも同じ「見つかりません」エラーをキックバックしますが、何らかの理由でインポートしようとしていません
  5. 目的のCファイルに#MyBridgingHeaderFile.hをインポートしないでください。これにより、「ファイルが見つかりません」というエラーが発生します

1
すべてのこれらの点を確認し、まだ同じ問題を持っている:(任意の更なる点を考慮すべき?
のAmjad Husseini

@AmjadHusseiniは、プロジェクトファイルをクリーンアップし、プロジェクトの派生データをクリアしてから、xCodeを再起動します。私と一緒に働いた
Mohammad Allam

0

同様の問題があり、解決策は1つだけでした。私は提案されたすべてを試してみましたが、他のlibが機能していたため、ブリッジングヘッダーを適切に設定していることがわかりました。

Cocoapodsを使用せずにライブラリーをドラッグアンドドロップでプロジェクトにコピーしたところ、その後、エラーなしでヘッダーをインポートできました。

facebook / Shimmerライブラリを使用しました。


0

ポッドにも同様の問題がありました。基本的に私のUIテストを実行しようとして、Xcodeはポッドの欠落について不平を言っていました。これに対する解決策は、上記のどの方法よりもはるかに簡単でした。

  1. プロジェクトファイルに移動します(メインはターゲットではありません)
  2. 「情報」タブ(左端)をクリックします
  3. UIテストターゲットに適切なポッド構成を設定します(「配置ターゲット」のすぐ下の「構成」セクション)

ワーキング!

私はそれをスレッドで見つけました:https : //github.com/CocoaPods/CocoaPods/issues/2695

ココアポッドのバグのように聞こえますが、トリッキーなケースである理由がわかります。



0

プロジェクトのクリーン、ビルドフォルダーのクリーン、Xcodeの再起動。プロジェクトgoto> Build Settings> Search the keywordでパスを削除するだけです。Swift Compiler-General-> Objective-C Bridging headerがうまくいきました。


0

2019年8月

私の場合、同じターゲットからのObjective-CヘッダーファイルでSwiftプロトコルを使用したかったので、Objective-CインターフェイスでSwiftプロトコルの前方宣言を使用してそれを参照する必要がありました。Objective-CヘッダーファイルでSwiftクラスを使用する場合も同様です。前方宣言を使用するには、前方宣言を使用してObjective-CヘッダーにSwiftクラス含めるドキュメントにある次の例を参照してください。

// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.