web-dev-qa-db-ja.com

Swift Bridging Headerのインポートの問題

指示に従って、ブリッジヘッダーを作成してプロジェクトに追加しました。残念ながら、以下のエラーが発生しました。

:0:エラー:Objective-Cのヘッダ '--- path - to --- header/.... h'をインポートできませんでした

Screenshot 1

ビルド設定で、ブリッジヘッダーの場所にヘッダー検索パス文字列を追加しましたが、役に立ちませんでした。

誰もがこの問題を経験しましたか?

117
Nikita Pronchik

エラーが発生しているフォルダにファイルを追加するように注意してください。私は同じ間違いをした、あなたがXcodeからファイルを作成するならば、それはフォルダーに行くでしょう:Project-> Project-> Header.h

そしてXcodeはProject-> Header.hを探しています

それはあなたがあなたのプロジェクトフォルダ(ProjectName-> ProjectNameFolder)の中にファイルを置く必要があることを意味します!

それが役立つことを願っています;)

更新:私はあなたが何を意味しているのか私にはわからないが、あなたの問題を解決するためにこれを試してみてください。
1。これまでに作成したすべてのブリッジングファイルを削除します。
2。プロジェクトのメインフォルダを選択し、新しいファイル - > iOS - > Header fileをクリックします。
3。作成したヘッダファイルにインポートを書き込みます。
4。 Xcode-> Build Settings内のプロジェクトを選択し、検索フィールドにbridgingと入力して、キーSwift_OBJC_BRIDGING_HEADERにヘッダファイルの名前またはそのパスを入力します。

この手順に従うと、ヘッダファイルは正しい場所に作成されます。

:Dが役立つことを願っています!

145
Renan Kosicki

私の場合、これは循環参照の結果として実際にはエラーでした。私はブリッジングヘッダにインポートされたクラスを持っていました、そしてそのクラスのヘッダファイルはSwiftヘッダ(<MODULE_NAME>-Swift.h)をインポートしていました。これは、Swiftで宣言されたクラスをObj-Cヘッダーファイルで使用する必要があるため、解決方法は単純に@class宣言を使用することでした。

そのため、基本的に「ブリッジヘッダーのインポートに失敗しました」というエラーが表示され、その上のエラーには<MODULE_NAME>-Swift.hファイルが見つからないという説明があります。

このファイルを調べると、ヘッダー内で-Swift.hが宣言されていることがわかりました。このインポートを実装に移動することで問題は解決しました。だから私はオブジェクトを使用する必要があった、それをSwiftで定義されたMyObjectと呼ぶことにしましょう。

@class MyObject;
66
Daniel Galasko

パスを見つけます。

ビルド設定/ Swiftコンパイラ - コード生成/ Objective-Cブリッジヘッダ

そのファイルを削除します。それなら大丈夫でしょう。

30
variadics

これはおそらくごく一部の人々にしか影響しませんが、私の場合、私のプロジェクトではCocoaPodを使用していましたが、そのうちの1つに独自のCocoaPodを持つサブスペックがありました。解決策は、サブポッド内のファイルを参照するためにフルアングルインポートを使用することでした。

#import <HexColors/HexColor.h>

のではなく

#import "HexColor.h"
17
Kyle Clegg

派生データを削除したので修正しましたが、古いコミットからチェックアウトしても同じ問題が発生します。

あなたはそのオプションフォームWindow-> Projectsに到達することができます。

14
M.Othman

Xcodeヘッダーファイルを探す場所を指示する必要があります。 'ブリッジングヘッダーにリストしています。[Search Paths]セクションを見つけ、Userのプロジェクトレベル設定を変更します。ヘッダ検索パス、 'Pods'ディレクトリの再帰的エントリを追加:Pods /** " http://swiftalicio.us/2014/11/using-cocoapods-from-Swift/

9
onmir

私にとっては、それをターゲットのビルド設定に追加するのを忘れたからです。

enter image description here

9
Roland Keesom

私もこの問題を経験しましたが、残念ながらSDK + Xcodeのバグにすぎません。これと、私がCloudKitで抱えていた他のいくつかの問題について、WWDCのエンジニアと話しました。これらのバグはXcodeの次の種で解決されるでしょう。

それはベータソフトウェアを使うことについての楽しい部分です。

6
douglas bumby

swiftクラスを客観的-cプロジェクトに追加するのが困難な人にとっては。これは私のために働くものです:

  1. 新しいSwiftファイルを作成します。あなたがあなたのためのbrigde-header.hを含むミックスSwift-objective-cプロジェクトのためのすべての設定をxcodeに作成させたいならば、これはxcodeをプロンプトにするでしょう。はいを押します。
  2. 今度は、プロジェクトで使用したい既存のSwiftファイルを追加します。
  3. 実装ファイルには、Swiftクラスを追加します。#import "YOURPROJECTNAME-Swift.h"を追加します。このファイルxcodeはあなたのために作成します。あなたのxcodeプロジェクトがmyProjectなら "myProject-Swift.h"

以上です。 Objective-Cのように、コードにSwiftクラスを作成します。

3
user1105951

Cocoapodからのブリッジヘッダファイルからいくつかのファイルをインポートしましたが、正しくありませんでした。

インポートする代わりに

#import <SomeCocoaPod/SomeCocoaPod.h>

私が書いた

#import "SomeCocoaPod.h"

そしてこれは私の巨大な間違いだった

2

私にとっては、フレームワークを追加している間に宛先パスで「必要に応じて項目をコピーする」を選択していませんでした。このオプションを選択してフレームワークを再追加するだけです。

2
Daisy R.

プロジェクトに一時的なObjective-Cファイルを追加します。好きな名前を付けることができます。

Objective-Cブリッジングヘッダーを設定するには、[はい]を選択します。

作成したばかりの一時Objective-Cファイルを削除します。

作成したprojectName-Bridging-Header.hファイルに、次の行を追加します。

'#import <GoogleMaps/GoogleMaps.h>'

AppDelegate.Swiftファイルを編集します。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    GMSServices.provideAPIKey("AIza....") //iOS API key

    return true
}

リンクをたどる フルサンプル

2
Atul Kaushik

自分のアプリにToday拡張機能を追加していたときに、このようなエラーが発生しました。拡張機能のビルドターゲットは、私のアプリのビルドターゲットと同じ名前のブリッジヘッダーで生成されました。拡張子が私のアプリのブリッジヘッダーに記載されているファイルを参照していないため、これはエラーの原因となっていました。

あなたがする必要がある唯一の事は拡張のためのブリッジングヘッダの名前を削除または変更することであり、そしてすべてはうまくいくでしょう。

これが役立つことを願っています。

1

私は違う理由で同じ問題を抱えています、ここが私の場合ですスライドメニューを含める必要があるプロジェクトを構築します、私はそれにアプローチするためにSWRevealViewController libを使用しています

ライブラリファイルをインポートすると、.h && .mファイルのサポートファイルの下にサブフォルダー(SWRevealViewController)を追加すると、2つのエラーが発生し、cant import bridgeとSWRevealViewController.hが見つかりません。

修正方法

ファイルを直接Supporting Filesに移動(サブフォルダを削除)すると、SWRevealViewController.mが自動的にBuild Phases - > Compile Sourcesに追加され、問題はなくなりました。

enter image description here

1
Mina Fawzy

最初の数日間の闘争の後、ついに私はFacebookのサインアップを私のiOSアプリにうまく統合することに成功しました。手順は次のとおりです(私はあなたがすでにFacebook SDK v4.1以降をあなたのマシンにインストールしていると仮定しています):

  1. プロジェクトの下にFBSDKCoreKit、FBSDKLoginKitというFacebookフレームワークを追加します。
  2. FB SDK v4.1以降では、ブリッジングヘッダーファイルが不要になったため、[ビルド]設定を変更しないでください。
  3. ViewController.Swift、AppDelegate.SwiftファイルにFBSDKCorekit、FBSDKLoginKitをインポートします。
  4. 前述のようにpListに情報を追加します。 ここ

  5. アプリをビルドします。そして、うーん!コンパイル時エラーなし。

1
HITESH AGARWAL

他の修正の中でも、Product-> Archiveを実行しようとしたときにエラーが発生しました。私がこれを持っていたことが判明:

Objective-C Bridging Header
  Debug (had the value)
  Release (had the value)
    Any architecture | Any SDK (this was blank - problem here!)

その最後の行にそれを設定した後、それは働いた。

0
nevster

Precompile Bridging HeaderNoに設定すると問題が解決します。

0
abelhoang

私は実際にプロジェクトの下に空のOSX Source Objective Cファイルを作成しました(ここに私のすべてのSwiftファイルがあります)。

インポートを追加してから。mファイルを削除しました。

0
goggelj

上記の解決策では解決できない同様の問題がありました。私のプロジェクトはCocoaPodsを使っています。私はエラーと一緒に私は次のメッセージで警告を受けたことに気づきました:

Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'

enter image description here

だから解決策は非常に簡単でした。 Podsプロジェクトの場合は、アクティブアーキテクチャのみをビルドフラグをいいえに変更すると、元のエラーがなくなりました。

0
mike.tihonchik