Xcode MyProjectName-Bridging-Header.hは存在しません


118

Objective-CプロジェクトでSwiftを使い始めたいのですが。だから私は迅速なクラスを追加しました:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

そして、それを.mファイルにインポートしました:

#import "MyProjectName-Swift.h"

プロジェクトをビルドすると、次のエラーが発生します。

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

注:[ビルド設定-> Swiftコンパイラ-コード生成-> Objective-Cブリッジヘッダー]で、MyProjectName-Bridging-Header.hに設定されています。

この問題を解決するにはどうすればよいですか?

どんな助けでも大歓迎です。

編集:ブリッジヘッダーファイル:#if defined(__ has_include)&& __has_include()#include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hそしてMyProjectName-Bridging-Header.h反対方向に働きます。MyProjectName-Swift.h自動的に提供されます。MyProjectName-Bridging-Header.hただし、半自動で提供されます。つまり、そこにあることを確認する必要があります。それで、あなたMyProjectName-Bridging-Header.hはあなたのプロジェクトナビゲーターで見ることができると確信していますか?そうでない場合は、その名前のファイルを作成してプロジェクトに追加します。:次に、ビルド設定で、それへのパスが正しいことを再度確認してください(それはあなたのプロジェクトディレクトリを含める必要がありますMyProjectName/MyProjectName-Bridging-Header.h
ミロス

製品モジュール名が空でないことを確認しましたか?(ビルド設定->パッケージ->製品モジュール名)
Nina

ニーナ、はい、私のモジュール名は「MyProjectName」で、何か問題はありません
user2408952 '29

milos、私はXcodeがこのブライディングファイルを自動生成することになっていると思いました。プロジェクトにそのファイルはありません。
user2408952 2014

1
Bridging-Header.hを手動で指定しましたか?「ブライディング」というスペルミスがあります
Nina

回答:


191

ブリッジングファイルが他のクラスと同じレベルで作成される場合、これらの図が示すように、相対パスを追加する必要がある場合があります。ここで、ブリッジングファイルは他のクラスと同じレベルで作成されることに注意してください。 ここに画像の説明を入力してください

ビルド設定に名前を正しく入力しましたが、 ここに画像の説明を入力してください

しかし、コンパイラはファイルを見つけません。 ここに画像の説明を入力してください

したがって、プロジェクトのルートからの相対パスを追加すると(つまり、 ./ProjectName/BridgerFileName.h)、 ここに画像の説明を入力してください

これでコンパイルされ、Objective Cクラスのメソッドを呼び出すことができます。 ここに画像の説明を入力してください


4
私にとっては、まったく修正されません。XCodeは更新されたObjective-Cブリッジヘッダーフィールドに反応しないようです。
Darius Miliauskas 2015年

私が見つけるのを待ち望んだが、ついに。ありがとう、エラーを修正しました:)
AndersSørensen2017年

よく実証されました!はい、プロジェクトビルド設定とターゲットビルド設定の両方でこれを行うことを忘れないでください。
Akash Bhardwaj

72

ブリッジヘッダーファイルを手動で作成し、デフォルトの名前と場所を選択すると、ブリッジヘッダーがルートディレクトリの下のプロジェクトディレクトリに配置されることがわかりました。

これには、次の設定値が必要です。ターゲット> [アプリのターゲット]>ビルド設定> Swiftコンパイラ-コード生成> Objective-Cブリッジヘッダー

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

あなたのプロジェクトがSwiftモジュール(フレームワーク)である場合、コメントで指摘されているように、あなたは好むかもしれません:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hより一般的になります:)
gaussblurinc 2015

1
これが唯一の答えです!
Luca Davanzo、2015年

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hプロジェクトフォルダーまで正しいパスを取得していますが/$(PROJECT_NAME)、目的のパスに移動しないように追加しています。
iPeter 2017

同じ問題が発生する可能性のある他の人への注意-@gaussblurincコメントをコピー/貼り付けしたときに、文字列の「ヘッダー」部分に奇妙な文字がコピーされていました。回答から同じ文字列をコピー/貼り付けた後、うまくいきました。
アダムジョンズ

46

ブリッジヘッダーを外している方へ

私はここで他のほとんどの答えとは逆の方向に進んでいました。以前はブリッジヘッダーを使用していましたが、もう必要ありませんでした。プロジェクトから削除した後、質問に記載されているエラーが発生し始めました。私は問題を解決するために次の手順を実行しました。

  1. 行く>スウィフトコンパイラのターゲット> [iPhoneアプリターゲット]> [ビルド設定-一般> Objective-Cのブリッジングヘッダーとパスを削除します。(@Donamiteに感謝にます。)(検索ボックスに「ブリッジ」と入力するだけで検索できます。)
  2. 派生日付を削除します。行くのXcode>環境設定>拠点と派生データフォルダで灰色の矢印をクリックします。次に、プロジェクトフォルダを削除します。

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


22

ではスウィフト4.1

持っていないプロジェクト bridging-Header.hファイルでも、プロジェクトにはそのパスがあります。このためには、そのパスを削除する必要があります...

targetsファイルに移動しBuild Settings、----> を選択してSwift Compiler - General、を削除しbridging-Header.hます。以下のスクリーンショットに従ってください...ここに画像の説明を入力してください

bridging-Header.hSwiftコンパイラでファイルを削除する-一般

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

今あなたはこのようになりました...

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


14

SwiftプロジェクトにBridgeファイルを追加します。

手順1. [ファイル]> [Objective-Cファイルを含むCocoaを追加(一時的な目的)]に移動します。

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

ステップ2.次に、次のポップアップが表示されますここに画像の説明を入力してください

次に、ブリッジヘッダーの作成ボタンを押します。

DONE
YOUは、バンドルIN BRIGDEファイルを取得します
THANKS


13

これらは、ブリッジヘッダーを作成する手順です。

  1. File-> New-> iOS-> Header File、「yourProjectName-Bridging-Header.h」のようなブリッジファイル名を付けます

  2. Build-Settings-> Objective-C Bridging Header、「ProjectName-Bridging-Header.h」のようなブリッジヘッダーファイル名を指定するだけ

    注:ブリッジヘッダーファイルは、「。xcodeproj」ファイルが配置されていたプロジェクトのメインルートフォルダーに配置する必要があります。そうでない場合は、ブリッジングヘッダーファイルをプロジェクトのルートフォルダーに移動します。このようにして、Xcodeはブリッジファイルにアクセスできます。

  3. プロジェクトをビルドし、必要なファイルをブリッジヘッダーにインポートします。


12

私にとっては、ブリッジヘッダーファイルパスの前に$(SRCROOT)/ $(PROJECT_NAME)/を使用するのに役立ちました


1
これは正しい答えです。マークダウンされるべきではありませんでした。$(SRCROOT)と$(PROJECT_NAME)をガイドとして使用して正しい答えを得ることができますが、すべてのソリューションをコピーして貼り付けることはできません。
Tigeを

この回答で提示された解決策は実際に私の問題を解決しました。ありがとう、Srinivas Padidala
Wilson

$(SRCROOT)/ $(PROJECT_NAME)/YourProjectName-Bridging-Header.hがうまくいきます............ $(SRCROOT)/ $(PROJECT_NAME)/をそのまま貼り付けます..... $(PROJECT_NAME)の代わりにプロジェクト名を追加しない
ioSana

6

私にとって$(SRCROOT)は、Objective-Cブリッジングヘッダーパスの前で使用するのに役立ちました。

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

以下の手順に従ってください:

  1. ブリッジングヘッダーファイルを削除します。。。(たぶん手動で作成します)そして;
  2. Objective-C Projectで新しいSwiftファイルを作成します。。。(インポートではなく、最初に作成します)

多分これら二つの事はあなたの問題を解決するのに役立ちます。


5

以下は私のために働きました:

  1. ブリッジヘッダーファイルは、「。xcodeproj」ファイルが配置されていたプロジェクトのメインルートフォルダーに配置する必要があります。プロジェクトディレクトリに移動し、ブリッジヘッダーが他のフォルダー内にある場合は、それをルートにドラッグアンドドロップします。
  2. ヘッダー名のスペルミスを修正。
  3. 派生データをクリア
  4. ターゲット->ビルド設定-> Swift Compiler:General-> Add Obj C Header name。
  5. クリーンにして再度実行します。

2

ブリッジヘッダーファイルを手動で作成する

最初に、Xcodeが作成されたブリッジヘッダーファイルを削除します。そしてあなたのプロジェクトを選択してくださいgoto> Build Settings> Search the keyword。Swiftコンパイラ-コード生成。Objective-Cブリッジヘッダーをクリックし、そのパスを削除します。ここでプロジェクトをクリーンアップします。

次に、ナビゲーションバーでプロジェクト>ウィンドウを選択します。プロジェクトを選択し、そこから派生データを削除します。

ここで、新しいファイルを作成し、ソースを選択してから、ヘッダーファイルを選択し、ブリッジヘッダーファイルを作成します。ファイル名はあなたのプロジェクト-ブリッジング-ヘッダー.hでなければならず、それを作成します

プロジェクトgoto> Build Settings> Search the keywordを選択します。Swiftコンパイラ-コード生成。Objective-Cブリッジヘッダーをクリックし、projectname-Bridging-Header.hのように、このObjective-Cブリッジヘッダーにパスを追加します。

クラスをブリッジヘッダーファイルにインポートすると、コードを簡単にコンパイルできます。

ファイルを手動で作成している場合、ブリッジヘッダーファイルは次のようになります。


0

エラーメッセージに示されているパスにファイルを手動で移動するのに役立ちました。そう:

  1. ファイルを削除しました(ゴミ箱に移動しました)
  2. エラーメッセージでゴミ箱からパスに移動しました
  3. 後で私もプロジェクトをきれいにしなければなりませんでした
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.