Swift Bridging Headerインポートの問題


123

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

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

スクリーンショット1

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

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


ヘッダーファイルを自分で追加するのではなく、New File ..を使用して、新しい空のObjective-c .mファイルを追加します。これにより、xcodeはインポートを追加できるヘッダーブリッジファイルを提供します。追加した.mファイルを削除できます
markhunte

うん、私も確かにこの方法を試しましたが、何の助けにもなりませんでした
Nikita Pronchik '10

これは新しいプロジェクトですか、それとも手作業で行ったプロジェクトですか?
markhunte 2014年

それは新鮮なプロジェクトで、私はかつてOBJCで書いたキーチェーンサポートラッパーを追加しました
Nikita Pronchik 14年

ごめんなさい。追加されたキーチェーンサポートラッパーの意味がわかりません。しかし、私はあなたが私が使用しているものですOSXプロジェクトと同じものですかあなたはiOSの上にある気づく
markhunte

回答:


153

エラーの原因となっているフォルダーにファイルを追加するように注意してください。同じ間違いを犯しました。Xcodeからファイルを作成すると、Project-> Project-> Header.hフォルダーに移動します。

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

つまり、ファイルをプロジェクトフォルダー(ProjectName-> ProjectNameFolder)内に配置する必要があります。

それが役に立てば幸い;)

更新:どういう意味かわかりませんが、これを試して問題を解決してください
。1. これまでに作成したブリッジファイルをすべて削除します。
2.プロジェクトのメインフォルダーを選択し、新しいファイル-> iOS->ヘッダーファイルをクリックします。
3.作成したヘッダーファイルにインポートを書き込みます。
4. Xcode-> Build Settings内のプロジェクトを選択し、検索フィールドに「bridge」と入力して、キーSWIFT_OBJC_BRIDGING_HEADERにヘッダーファイルの名前またはそのパスを入力します。

この手順を実行すると、ヘッダーファイルが正しい場所に作成されます。

:Dそれが役に立てば幸い!


まあ、私はこの方法を試したところ、ヘッダーは本当に表示されていますが、残念ながら、ブリッジングObj-Cクラスはまだ表示されていません(ブリッジングヘッダーに含めた後)
Nikita Pronchik

11
最初は「ファイルを同じレベルのxcodeprojに置く必要がある」と答え、最後は「ファイルが...同じレベルのxcodeprojにないことを確認する」と答えています。どうして?
ブーン

3
つまり、ファイルはxcodeprojと同じレベルではなく、プロジェクトのサブフォルダー内にある必要があります。例:プロジェクトがあるプロジェクトのフォルダに、project.xcodeprojとprojecttestsがあります。ファイルはプロジェクトフォルダ内にある必要があります:)
Renan Kosicki 2014年

5
私はすべてを試しましたが、nothnigはうまくいきました。これは非常にイライラします。私はxcode 8とswift 3を使用しています。手伝っていただけますか
Hardik Shah

1
「ファイルを同じレベルのxcodeprojに配置する必要があることを意味します!」しかし、「ファイルがプロジェクトのメインフォルダ内にあり、同じレベルのxcodeprojではないことを確認してください!」と言った後 どちらですか?
バカロロ2017年

68

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

つまり、基本的には「ブリッジヘッダーのインポートに失敗しました」というエラーが表示され、その上のエラーは<MODULE_NAME>-Swift.hファイルが見つからないというもので、特定のObj-Cヘッダーファイル(つまりビューコントローラー)を指すエラーでした。

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

@class MyObject;

1
これはばかげていますが、実装ファイルに移動することも私にとってはうまくいきました。残念ながら、私のクラスはSwiftファイルで定義されたデリゲートを実装しているため、ヘッダーにそれが必要でした。しかし、obj-cは、デリゲートを渡すときにクラスが実際にデリゲートを実装するかどうかを気にしないので、これで解決します。しかし、理想的には別の方法があるでしょう
Oren

また、ブリッジヘッダーに取り込むもののインポートを確認する必要がある場合もあります。これらのインポートされたクラスのいずれかに「-Swift.h」ファイルへの参照がある場合は、宣言を.mに移動する必要があります。
カイルカラザーズ2017年

30

パスを見つける:

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

そのファイルを削除します。その後、大丈夫です。


2
あなたが勝ちます。私はこれに多くの時間を無駄にしました。シンプルで効果的。Xcodeは、このパスを使用して、裏で$(SRCROOT)に追加するなど、何か厄介なことをしています。パスにスペースがあることが問題の一部になっていると思いますが、これは特効薬でした。
jday

1
そのファイルをどのように削除しますか?
Jacky Wang

7
Xcode 8では、「コード生成」の代わりに、Swiftコンパイラー一般にあります。
Vivek Bansal 2016年

助け

18

これはおそらく少数の人々にのみ影響を及ぼしますが、私の場合、私のプロジェクトはCocoaPodsを使用しており、それらのポッドの1つは独自のCocoaPodsを持つサブ仕様を持っていました。解決策は、全角インポートを使用してサブポッド内のファイルを参照することでした。

#import <HexColors/HexColor.h>

のではなく

#import "HexColor.h"

2
違いは何ですか?
ダニエルゴメスリコ

これは私にとって問題でした。「ブリッジヘッダーのインポートに失敗しました」と「XYZ.hが見つかりませんでした」というエラーが発生しました。この変更を行うことで、Xcode 6.4とSwift 1.2で問題が解決しました。
Entalpi

1
@danielgomezrico 1つのステートメントがサブディレクトリ内のファイルを指しています。他は存在しないファイルを指しています。
Casey Murray

CocoaPodsを使用しているときのこのエラーの解決策は、新しい構成を作成した後にもう一度pod installを実行することでした。
タイプライター

16

派生データを削除して修正したところ、古いコミットからチェックアウトしても同じ問題が発生することに気付きました。

このオプションには、ウィンドウ->プロジェクトからアクセスできます。


9

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

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


これは、プロジェクトのビルド設定に追加しただけの場合に役立ちます。
zekel

9

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


6

私もこの問題を経験しましたが、悲しいことに、SDK + Xcodeのバグにすぎません。私はWWDCのエンジニアに、これとCloudKitで発生していた他のいくつかの問題について話しました。これらのバグは、Xcodeの次のシードで対処されます。

ベータ版ソフトウェアを使用することの楽しい部分です。


1
ええ、それはイライラさせられます。私のチームと私はCloudKitでNSURLの問題を解決しようとして作業しており、エラーが発生している理由を理解できませんでした。アップルによるサーバー側の問題であることがわかりました。何もできませんでした。時間を無駄にしました。はは。
ダグラスバンビー2014年

5
この問題は、ヘッダーを正しい場所に配置することで実際に解決できます。私のために働いたのは、ヘッダーProject-Bridging-Header.hを呼び出して、それをプロジェクトフォルダーツリーのルートに配置することです(メインのXcodeプロジェクトファイルの兄弟として)。@ renan-kosickiの回答を参照してください
jb

1
Xcodeのアップデートで修正されましたが、これは初期ベータ版の問題が原因で発生していました。
ダグラスバンビー2015年

3

迅速なクラスをobjective-cプロジェクトに追加するのに問題がある他の人のために。これは私のために働くものです:

  1. 新しいSwiftファイルを作成します。これにより、xcodeがbrigde-header.hを含むミックスswift-objective-cプロジェクトのすべての設定を作成する場合にプロンプ​​トが表示されます。はいを押します。
  2. 次に、プロジェクトで使用する既存のSwiftファイルを追加します。
  3. 実装ファイルでは、swiftクラスを使用します:#import "YOURPROJECTNAME-swift.h"。このファイルxcodeが作成します。xcodeプロジェクトがmyProjectの場合、「myProject-swift.h」

以上です。今度は、目的のcのように、コード内に迅速なクラスを作成します。


3

cocoapodsのbridginヘッダーファイルからいくつかのファイルを適切にインポートしていません。

インポートする代わりに

#import <SomeCocoaPod/SomeCocoaPod.h>

私が書いた

#import "SomeCocoaPod.h"

そして、これは私の大きな間違いでした


2

一時的な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

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


1

最初の数日間の苦労の後、私はようやくFacebookサインアップを私のiOSアプリにうまく統合することができました。手順は次のとおりです(マシンにFacebook SDK v4.1以上がすでにインストールされていると想定しています)。

  1. Facebookフレームワーク-FBSDKCoreKit、FBSDKLoginKitをプロジェクトの下に追加します。
  2. ビルド設定を変更しないでください。FBSDK v4.1以降では、ブリッジングヘッダーファイルは不要です。
  3. FBSDKCorekit、FBSDKLoginKitをViewController.swift、AppDelegate.swiftファイルにインポートします。
  4. ここに記載されているように、pListに情報を追加します。

  5. アプリを作成します。そしてwohoo!コンパイル時エラーはありません。


2
リンク先のページの詳細を含めれば、この回答のほうがよいでしょう。リンク先のページの変更またはリンクが仕事に停止した場合は、この回答を読んだ人は、彼らが、ステップ4に出くわしたときに何をすべきかわからないだろう
TNT

1

私はさまざまな理由で同じ問題を抱えていますが、スライドメニューを含める必要があるプロジェクトをビルドする場合は、 SWRevealViewController libを使用してそれに取り組みます

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

修正方法

ファイルを直接サポートファイルに移動すると(サブフォルダーを削除)、SWRevealViewController.mがビルドフェーズに自動的に追加されます->ソースのコンパイルと問題がなくなりました

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


1

アプリにToday Extensionを追加するときに、この種のエラーが発生しました。拡張機能のビルドターゲットは、アプリのビルドターゲットと同じ名前のブリッジヘッダーで生成されました。拡張機能がアプリのブリッジヘッダーにリストされているファイルを表示しないため、これがエラーの原因でした。

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

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


0

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

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


0

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

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

その最後の行でそれを設定した後、それはうまくいきました。


0

上記の解決策では解決できない同様の問題がありました。私のプロジェクトでは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'

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

したがって、解決策は非常に簡単でした。ポッドプロジェクトの場合、Build Active Architecture OnlyフラグをNoに変更すると、元のエラーはなくなりました。


0

[ プリコンパイルブリッジヘッダー]を[ いいえ]に設定すると、問題が解決します。


なぜ反対票?これは一部の人にとっては正当な解決策です。私は、(Appleが30%高速化まで見てきた)反復は大規模なプロジェクトにオン、オフ本を構築し、全く差は見られないやってベンチマークしてきましたが、私は最初からビルドファイルをクリアして構築失う時間の量はかなりのものです
アレクサンドルG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.