web-dev-qa-db-ja.com

import Swift Objective-cのクラス、<myModule> -Swift.hファイルが見つかりません

Objective-Cで記述されたiOSプロジェクトがあります。プロジェクトでSwiftクラスを作成しました。SwiftでObjective-Cにアクセスするためのブリッジングヘッダーファイルが正常に生成され、正常に動作します。

私の問題は逆です。 Swift Objective-Cコードのクラスをインポートします。

Xcodeでは、ターゲット->ビルド設定-> Swift Compilerセクション、私はObjective-C Generated Interface Header Nameフィールドに値myModule-Swift.h、しかし、このヘッダーをobjective-cクラスにインポートすると:

#import "myModule-Swift.h"

コンパイラエラーが発生します。

myModule-Swift.h file not found

プロジェクトでも、このファイルは見つかりません。この問題を解決するにはどうすればよいですか?

私のXcodeバージョンは6.4です

39
user842225

2018年5月に更新されたXcode 9.3


  1. ビルド設定-> Objective-C生成されたインターフェイスヘッダー名
    そして値をYourModule-Swift.hに設定します(これは通常すでに設定されています。これは.m file #import "YourModule-Swift.h"

(例、CDataという名前のプロジェクト)

Example

  1. ステップ1と同じで、ビルド設定に移動して「モジュールの定義」を検索し、両方の値をYESに設定します

  2. .SwiftファイルでNSObjectを拡張するクラスを作成します

Example

  1. プロジェクトを再度ビルドします

  2. YourModule-Swift.hファイルを.mファイルにインポートします(大文字と小文字が区別されることに注意してください、Mymodule!== MyModule

enter image description here

71
Daniel Krom

OMG ..実際のインポート文は「class-Swift.h」ではなく「projectname-Swift.h」でした

ビルド設定-> Swift Compiler Code Generation-> Objective-C Generated Interface Header Nameの下を見ると、ファイルの名前を見つけることができます

SwiftソースをGUIにドラッグしたとき、ファイルは生成されませんでした。右クリックして[ファイルを「プロジェクト」に追加するときのみ。

9
killerz

この問題に何時間も費やしてもまだ解決されない理由を誰かが疑問に思っている場合は、アプリではなくframeworkを実際に開発している私の状況に似ているかもしれません。

このような場合、Objective-C Generated Interface Headerのインポート文の形式は次のとおりです。


#import <ModuleName/ModuleName-Swift.h>
8
Karol Kulesza

ダニエルクロムスへの私の答え:

  • -Swift.hヘッダーをヘッダーに追加しないでください。動作しているように見えても。 .mファイルのみにインポートを追加してください!

  • ヘッダーSwiftクラスで使用する場合、@ interfaceの前に@class swiftclassnameを使用して前方宣言を行います

その後、コードに実際のエラーが表示されます。

5
ThorstenC

私にとって、問題はビットコードをオンにしていたことです。 「推奨プロジェクト設定に更新」をクリックすると、おそらく犯人であるいくつかの設定が変更されました。ビルド設定で「有効なビットコード」を「いいえ」に変更しましたが、現在修正されています。

enter image description here

3
Gomfucius

私はこれを長い間積み重ねました。私の場合、ターゲット名はダッシュをターゲット名の一部として使用する「my-app」のようなものです。 #import "my-app-Swift.h"を試みましたが、Xcodeがエラーを出し続けました。

「DerivedData」フォルダーの下を掘ってみると、「my_app-Swift.h」が見つかりました。したがって、ターゲット名に興味深い文字を使用している場合。これらをアンダースコア_に置き換えてみてください。

1
Kaz Yoshikawa

昨日同じ問題にぶつかり、何時間も無駄に修正するために働いた。他の人は私と同じ船に乗っていた可能性があります。上記のすべての手順を実行しましたが、何も機能しませんでした。

鉱山破壊の原因は、プロジェクト全体のプロジェクト名のアーティファクトが原因でした(以前の名前の不適切な変更による)。

上記の手順がすべて失敗した場合は、Xcodeが何かをリセットできるように、プロジェクトの名前を変更することをお勧めします...これで問題は解決しました。そうすることは魅力的でした!

0
Travis Tubbs