web-dev-qa-db-ja.com

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

Objective-CプロジェクトでSwiftの使用を開始したい。そこで、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 Compiler-Code Generation]-> [Objective-C Briding Header]は、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
107
user2408952

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

ビルド設定に名前を正しく入力しましたが、 enter image description here

しかし、コンパイラはファイルを見つけられません。 enter image description here

したがって、プロジェクトのルートからの相対パスを追加する(つまり、./ProjectName/BridgerFileName.hを追加する)と、 enter image description here

これでコンパイルされ、Objective Cクラスのメソッドを呼び出すことができます。 enter image description here

175
James Toomey

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

これには、設定に次の値が必要です:Targets> [Your App Target]> Build Settings> Swift Compiler-Code Generation> Objective-C Bridging Header

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

プロジェクトがSwiftモジュール(フレームワーク)である場合、コメントで指摘されているように、次のようになります。

$(SRCROOT)/$(PROJECT_NAME)/$(Swift_MODULE_NAME)-Bridging-Header.h
68
DonVaughn

ブリッジングヘッダーを削除するユーザー向け

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

  1. Targets> [Your App Target]> Build Settings> Swift Compiler-General> Objective-C Bridging Headerに移動し、パス。 (アイデアのおかげで @ Donamite に感謝します。)(検索ボックスに「ブリッジ」と入力するだけで検索できます。)
  2. 派生日付を削除します。 Xcode> Preferences> Locationsに移動し、Derived Dataフォルダーの横にある灰色の矢印をクリックします。次に、プロジェクトフォルダを削除します。

enter image description here

43
Suragch

InSwift 4.1

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

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

Swiftコンパイラーのbridging-Header.hファイルを削除する-一般

enter image description here

これでこうなりました...

enter image description here

16
iOS

Swiftプロジェクトにブリッジファイルを追加するには。

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

enter image description here

ステップ2.その後、次のポップアップが表示されます enter image description here

ブリッジヘッダーの作成ボタンを押してください

完了
あなたはバンドル内のBRIDDEファイルを取得します
ありがとう

13

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

  1. ファイル->新規-> iOS->ヘッダーファイル、「yourProjectName-Bridging-Header.h」のようなブリッジングファイル名を指定します

  2. Build-Settings-> Objective-Cブリッジングヘッダー、ブリッジングヘッダーファイル名を「ProjectName-Bridging-Header.h」のように指定します。

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

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

12
Vishnuvardhan

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

12

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

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

次は私のために働いた:

  1. ブリッジングヘッダーファイルは、「。xcodeproj」ファイルがあるプロジェクトのメインルートフォルダーに配置する必要があります。プロジェクトディレクトリに移動し、ブリッジングヘッダーが他のフォルダー内にある場合は、ルートにドラッグアンドドロップします。
  2. ヘッダー名のスペルミスを修正します。
  3. 派生データを消去
  4. ターゲット->ビルド設定-> Swiftコンパイラー:一般-> Obj Cヘッダー名を追加します。
  5. クリーニングして、再度実行します。
5
A.G

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

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

たぶん、これら2つのことが問題の解決に役立つでしょう。

5
iHart

ブリッジングヘッダーファイルの手動作成

まず、Xcodeが作成されたブリッジングヘッダーファイルを削除します。プロジェクトを選択し、goto>ビルド設定>キーワードを検索します。 Swiftコンパイラ-コード生成。 [Objective-C Bridging Header]をクリックして、そのパスを削除します。プロジェクトをクリーンアップします。

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

新しいファイルを作成し、Sourceを選択してから、Header Fileブリッジングヘッダーファイルを作成します。ファイル名はprojectname-Bridging-Header.hにしてから作成する必要があります

プロジェクトを選択し、goto>ビルド設定>キーワードを検索します。 Swiftコンパイラ-コード生成。 [Objective-Cブリッジングヘッダー]をクリックして、このObjective-Cブリッジングヘッダーにprojectname-Bridging-Header.hのようなパスを追加します。

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

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

2
Mandeep Singh

私が助けたのは、エラーメッセージに記載されているパスにファイルを手動で移動することでした。そう:

  1. ファイルを削除しました(ゴミ箱に移動しました)
  2. エラーメッセージでゴミ箱からパスに移動しました
  3. 後で私もプロジェクトをきれいにしなければなりませんでした
1
jreft56