100

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. 「Objective-C 互換ヘッダーのインストール」は「YES」に設定されています。
  2. ヘッダー検索パスには、フレームワークへのパスが含まれています。

私は何かが欠けていると確信しているので、誰かが手がかりを持っていれば、それは素晴らしいことです.

4

22 に答える 22

87

解決策を見つけました:

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

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

于 2015-01-18T06:26:49.683 に答える
17

まったく別の原因で、同じエラー メッセージが表示されました。

設定:

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

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

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

于 2015-03-06T23:30:04.653 に答える
4

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

ここに画像の説明を入力

于 2015-04-28T16:20:21.557 に答える
3

誰かを助けるなら。

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

于 2016-07-13T22:44:22.927 に答える
2

問題があり、見つけるのに2時間費やした後、修正しました。私の環境は以下のとおりです。

ココアポッド 0.39.0

スウィフト 2.x

X コード 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_partyが使用されているクラスで。your_3rd_party のインポートを宣言する
于 2016-05-16T10:31:49.923 に答える
2

私のフレームワークは以前は機能していましたが、突然機能しなくなりました。これらの回答はどれも機能しませんでした。Build Phases > Link Binary With Libraries でフレームワークを削除し、再度追加しました。作業を再開しました。

于 2016-02-19T15:34:10.357 に答える
2

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

于 2014-12-30T16:14:25.380 に答える
1

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

于 2016-09-16T19:35:50.640 に答える
1

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

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

于 2017-01-18T08:18:11.133 に答える
0

2019年8月

私の場合、同じターゲットからの Objective-C ヘッダー ファイルで Swift プロトコルを使用したかったため、Swift プロトコルの前方宣言を使用して、Objective-C インターフェイスでそれを参照する必要がありました。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
于 2019-08-06T07:32:54.020 に答える