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
ブリッジングファイルが他のクラスと同じレベルで作成される場合、これらの画像が示すように、相対パスを追加する必要があります。ここで、ブリッジングファイルは他のクラスと同じレベルで作成されることに注意してください。
ビルド設定に名前を正しく入力しましたが、
しかし、コンパイラはファイルを見つけられません。
したがって、プロジェクトのルートからの相対パスを追加する(つまり、./ProjectName/BridgerFileName.h
を追加する)と、
これでコンパイルされ、Objective Cクラスのメソッドを呼び出すことができます。
ブリッジングヘッダーファイルを手動で作成し、デフォルトの名前と場所を選択すると、ブリッジングヘッダーがルートディレクトリの下のプロジェクトディレクトリに配置されることがわかりました。
これには、設定に次の値が必要です: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
ここでの他のほとんどの答えとは反対の方向に進んでいました。以前はブリッジングヘッダーを使用していましたが、もう必要ありませんでした。プロジェクトから削除した後、質問に記載されているエラーが表示され始めました。問題を解決するために、次の手順を実行しました。
これらは、ブリッジングヘッダーを作成する手順です。
ファイル->新規-> iOS->ヘッダーファイル、「yourProjectName-Bridging-Header.h」のようなブリッジングファイル名を指定します
Build-Settings-> Objective-Cブリッジングヘッダー、ブリッジングヘッダーファイル名を「ProjectName-Bridging-Header.h」のように指定します。
注:ブリッジングヘッダーファイルは、「。xcodeproj」ファイルがあるプロジェクトのメインルートフォルダーに配置する必要があります。ブリッジヘッダーファイルをプロジェクトのルートフォルダーに移動しない場合。このようにして、Xcodeはブリッジファイルにアクセスできます。
プロジェクトをビルドし、必要なファイルをブリッジングヘッダーにインポートします。
私にとっては、ブリッジヘッダーファイルパスの前に$(SRCROOT)/ $(PROJECT_NAME)/を使用するのに役立ちました
私にとっては、Objective-Cブリッジングヘッダーパスの前で$(SRCROOT)
を使用するのに役立ちました。
$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
次は私のために働いた:
以下の手順に従ってください:
たぶん、これら2つのことが問題の解決に役立つでしょう。
ブリッジングヘッダーファイルの手動作成
まず、Xcodeが作成されたブリッジングヘッダーファイルを削除します。プロジェクトを選択し、goto>ビルド設定>キーワードを検索します。 Swiftコンパイラ-コード生成。 [Objective-C Bridging Header]をクリックして、そのパスを削除します。プロジェクトをクリーンアップします。
次に、ナビゲーションバーでプロジェクト>ウィンドウを選択します。 [プロジェクト]を選択し、そこから派生データを削除します。
プロジェクトを選択し、goto>ビルド設定>キーワードを検索します。 Swiftコンパイラ-コード生成。 [Objective-Cブリッジングヘッダー]をクリックして、このObjective-Cブリッジングヘッダーにprojectname-Bridging-Header.hのようなパスを追加します。
クラスをブリッジングヘッダーファイルにインポートすると、コードを簡単にコンパイルできます。
私が助けたのは、エラーメッセージに記載されているパスにファイルを手動で移動することでした。そう: