Xcode 6で作成されていないObjective-CヘッダーへのSwift


242

私は最近、Swiftを既存のプロジェクトに追加して、実際の方法で試してみることに取り組んでいます。

Swiftソースファイルをプロジェクトに追加すると、「ブリッジヘッダー」、つまりObjective-CからSwiftを取得することに問題はありません。

しかし、*-Swift.hマークされた、@objcまたはObjCクラスのサブクラスであるSwiftクラスを公開することになっているヘッダーファイルはどこにもありませんにも見つかり :-(

Swiftで記述された新しいサブクラスをメインアプリのコード(Objective-Cのまま)で使用するための具体的な指示がありません。

私が開発を主導しているアプリのコードベースはかなり大きい(70.000行)ので、一度に移行することは問題外です。


5
はい、そうです。これは、Swiftコードを既存のObjCプロジェクトに追加するときに「デフォルトで」発生しないため、XCode IDEでこのSwift-> ObjCを作成するために何かを行う必要がある場所を本当に求めています。
David Kristensen 2014年

5
@ポパイ私は同意しません。この場合、ファイルを編集してコマンドラインからコンパイルすると、この問題は発生しません。問題となっているのは、ユーザーに代わって実行している(または実行することになっている)IDEです。これは、おそらく間違いなく、IDEの機能であるプロジェクトの設定に関連している
gaigeは

11
@Popeye From the docs(PDF)SwiftコードをObjective-Cにインポートする場合、Xcodeで生成されたヘッダーファイルを使用して、それらのファイルをObjective-Cに公開します。(私の太字、Appleのイタリック体)これは明らかに、SwiftとObjective-Cを一緒に使用するのに役立つXcodeの機能に関する質問であり、3つすべてのタグが確かに適切です。
カレブ

3
gaigeとドキュメントの助けを借りて解決しました。そして、私は単にタグを投げるだけではありません。この場合、ヘッダーファイルはXCodeによって作成され、XCodeから見えるようにする必要があります(SHOULD)。そうではなかったため、エラーが発生しました。
David Kristensen 2014年

3
@Popeye間違った説明はありません-46ページから直接引用をコピーしました。多かれ少なかれ同じことを言っている、似ているが異なる文章を見つけました。
Caleb

回答:


165

今では動作します。

  1. プロジェクトに、スペースを含まない製品モジュール名が必要です。
  2. Defines Moduleは、Building SettingsのPackagingでYesに設定する必要があります。

最後に動作します。助けてくれたみんなに感謝します:-)


64
Build Settings下でPackaging、私Defines Moduleはに設定Yesされ、Product Module Nameスペースなしでを作成しました。「* -Swift.h」はXCode 6では生成されません。
Loozie 2014年

25
もう1つ注意点:最初に、ターゲットレベルで上記のプロパティを設定しようとしましたが、機能しませんでした。 "*-Swift.h"ファイルが生成されませんでした。プロジェクトレベルで設定するとうまくいきました。
Marcin

22
私も同じ問題を抱えています。私がしているDefines Moduleに設定されYesたプロジェクトとターゲットの両方のために、とProduct Module Nameして、定義されていないスペースが、私は、このファイルが生成されますように見えることはできません。
Craig Otis

8
他の人が私と同じように混乱している場合に備えて...オートコンプリートされないため、ここで盲目的に運んでヘッダーをインポートする必要がありました。
shawnwall、2014

14
実装でのみヘッダーファイル(.h)に-swiftをインポートすることはできません。
zirinisp 2014

122

私は同様の問題を抱えており、あなただけが追加できることがわかりました

#import "ProductModuleName-Swift.h"

アンブレラヘッダーを見つけるための.hファイルではなく、obj-c .mファイルに


2
これは正しいです。そして、objcヘッダーでSwiftクラスを使用する必要がある場合はどうなりますか?前方宣言で試しましたが、うまくいきません。
Ixx

2
おっと、申し訳ありませんが、前方宣言は機能します。セミコロンを追加するのを忘れた:P
Ixx

14
将来の検索者向け:ヘッダーで、(包括的ヘッダーをインポートするのではなく).hファイルの先頭で@class YourSwiftClassを実行して前方宣言を行います
rogueleaderr

4
ヘッダーファイルでSwift列挙型を使用する必要がある場合はどうなりますか?
jakecraige、2015

1
さらに、「#import ProductModuleName-Swift.h」がヘッダーファイルにある場合、ProductModuleName-Swift.hファイルはまったく生成されないため(Xcode 7.2以降)、削除された場合(ビルドのクリーニングなど)フォルダー)すると、.mファイルの場合でも、ファイルがインポートされるすべての場所にエラーメッセージが表示され、混乱が生じます。
ルネ

59

ファイルを生成する前に、すべてのビルドエラーを修正する必要があることがわかりました。

私にとっての問題は、それが鶏肉/卵の問題であり、実際に#importステートメントをコメントアウトするまでビルドエラーが発生しなかったことです。

//#import "ProductModuleName-Swift.h"

これにより、私のSwiftコードに他の多くのエラーが明らかになりました。

これらの新しいエラーを修正してソースのビルドが成功したら、#importとbingoのコメントを外しました!ヘッダーが作成され、正しくインポートされました:)


おかげで、これがまさに私を支えていたものです。迅速なビルドエラーを修正した後、私は行って良かった。(Xcodeバージョン6.1.1)
Rick Roberts

10
これは素晴らしい点であり、Xcodeで「エラー後のビルドを続行する」設定をオンにするのに十分な理由です。
Kendall Helmstetter Gelner、2015

それはまさに私のケースでもあります:不足している-Swift-hは、迅速なソースコードの同じ変更後に発生しました
Giorgio Calzolato

3
鶏肉/卵の問題を見た後 、私は自分の問題を理解します、良いアナロジー
d0ye

この問題は常に私(Xcode10)に戻り、Xcodeをバグがあると解釈しました。これが答えでした
SumakuTension

44

私のような人なら、おそらくヘッダー名が間違っているでしょう。しばらく頭をぶつけた後、DerivedDataでファイルを探し、十分にあることを確認しました。私のセットアップでは(標準の派生データフォルダーを使用すると思います):

cd ~/Library/Developer/Xcode/DerivedData
find * -iname '*Swift.h'

それを見つけるでしょう。そのフォルダーに一致するものがなければ、Xcodeはそれを生成していません。

Xcodeバージョン6.2(6C86e)を使用しています


これでうまくいきました。オートコンプリートはそれがなかったと思っただけでそれを拾うと思っていました。ディレクトリを見ると物事が片付いた。
2015

時々見ることは信じています。推奨される回答に従うまでは物事を機能させることができませんでした。次に、これらの手順を使用して生成されたヘッダーを見つけました。このヘッダーは、驚いたことに、-Swift.h実際のSwiftファイルの名前ではなく、後置されていました。ありがとうございました!
Josh Habdas 2015年

ありがとう!多くの時間を節約してくれました
estemendoza

43

プロジェクトモジュール名にスペースが含まれている場合、スペースをアンダースコアに置き換える必要があります。

たとえば、プロジェクト名が「My Project」の場合、次を使用します。

#import "My_Project-Swift.h"


12
プロジェクトモジュール名にハイフンが含まれている場合は、それらもアンダースコアに置き換える必要があります。したがって、プロジェクト名が "My-Project"の場合は、#import "My_Project.h"を使用します
Jeff Ames

6
また、プロジェクトモジュール名が数字で始まる場合は、アンダースコアに置き換える必要があります。"1st Project"は "_st_Project-Swift.h"になります
Danation '18年

31

*唯一重要なことは:*

ターゲットで定義された「製品モジュール名」を使用し、その後に-Swift.hを使用します

#import <Product Module Name>-Swift.h

// in each ObjectiveC .m file having to use swift classes
// no matter in which swift files these classes sit.

「Defines Module」パラメータが「Yes」または「No」に設定されているか、または「Product Module Name」プロジェクトが設定されていないかに関係なく。

注意:ObjectiveC / Foundationに公開するには、SwiftクラスがNSObjectから派生するか、@ objc属性でタグ付けされている必要があります。ココア ...


1
そのとおりです。プロジェクトまたはターゲットに「モジュールを定義」する必要はありません
Giorgio Calzolato 2015年

25

私はあなたがこれで問題を見つけるかもしれないもう一つの理由を加えたかった-私はSwiftとObjective-Cコードを混合したフレームワークを作成していた。フレームワークの外にSwiftクラスをインポートできませんでした--Swift.hファイルを確認したところ、生成されていましたが空でした。

問題は非常に単純であることが判明しました-私はSwiftクラスをpublicと宣言していませんでした!クラスにpublicキーワードを追加するとすぐに、フレームワーク内外のクラスからそれらを使用できるようになりました。

また、フレームワーク内(別の回答が言及しているように.mファイル内のみ)では、-Swift.hファイルを次のようにインポートする必要があります。

#import <FrameworkName/FrameworkName-Swift.h>

2
フレームワークでは、Swiftクラスを使用するには、NSObjectから継承する必要があり(@objcでも役に立たない)、すべてのメソッド/プロパティをパブリックにする必要があることにも注意します。
dmitrynikolaev 2015年

3
少なくとも現在のXCode 7プレリリースでは、NSObjectから継承するまで、生成されたSwiftヘッダーでは使用できません。
dmitrynikolaev 2015年

100%は私の問題を解決しませんでした。すべての解決策は、「クラスを公開する」ことです。これは私がしました。限目。それでも、フレームワークを使用するプロジェクトのSwiftクラスは明らかになりません。
datWooWoo 2015年

@lespommes、あなたは質問を書いて、問題を示すどこかにサンプルプロジェクトを置くべきです、誰かが何が起こっているのかを理解することができます...それは私が最もよくする可視性の間違いなので、私は一つの可能​​な解決策として私の答えを与えました頻繁に。
Kendall Helmstetter Gelner、2015

2
ああ、そうです、インポートに関するヒントがついに私にトリックをもたらしました!どうもありがとう!
endowzoner 2016

14

私も同じ問題を抱えていました。最初のSwiftファイルを追加する前に、設定(Defines Module and Product Module Name)を調整する必要があるようです。

後でそれを行うと、さらにSwiftファイルを追加したり、Swiftファイルを削除して新しいファイルを作成したりしても、このプロジェクトの「* -Swift.h」ファイルは生成されません。


それが本当かどうかはわかりません。多くのSwiftファイルを作成するまでは、 'Defines Module'を有効にすることを決めていなかったため、-Swift.hを正常に取得できました。
マイケルピーターソン

私は実際にこれはまさに私が私の.swiftを削除して再追加する必要がありましたし、すべての仕事を持っていた:(問題で報告することを悲しまだ。
STUFF MC

2
それで?私はSwiftとObjCの両方のコードを変更している最中です。Project-Swift.hが更新されません。ヘッダーファイルを削除しようとしました。
Suhail Bhat

2
私はこれをdev.iachieved.it/iachievedit/?p=980に書く必要がありました。Swiftファイルを追加する前にビルド設定を更新するヒントは、私にとって重要でした。
Joe、

これを行わなかった場合、プロジェクトを再作成してすべてを追加し直す必要があることを意味しますか?どうしても、*-Swift.hファイルが生成されないようです。
kgreenek 2015年

13

古いobjcプロジェクトでSwiftを使用した経験を共有できます。に設定Defines moduleする必要はありませんでしたYES

私の場合、objcブリッジヘッダーがあることを手動で確認する必要がありました。生成されたインターフェイスヘッダー名のみがビルド設定に含まれていました。

Missing bridging header

これにより、MyApp-Swift.hファイルが生成されますが、Swiftクラスの痕跡はありません。

Appleのドキュメントによると、最初のSwiftファイルを追加するときに、ブリッジヘッダーを作成するように求められます。まあ、そうではなかった。MyApp-Bridging-header.hファイルを手動で追加し、「Objective-Cブリッジヘッダー」フィールドでそのファイルをポイントしました。これにより、MyApp-Swift.hファイルにSwiftクラスが追加されました。

ドキュメント:Objective-CへのSwiftのインポート


はい、なんらかの理由で、プロジェクトに空のブリッジングヘッダーファイルを追加した後でのみ、ObjC Swift.hファイルがSwiftクラスヘッダーで生成されました!
Andrew

こっちも一緒。空のObjective-Cブリッジングヘッダーファイルを追加するまで、Swiftコードは生成された* -Swift.hファイルにインポートされませんでした。
Nik

12

生成されないmoduleName-Swift.hの別のバリエーションを次に示します。

プロジェクトにIOSチャートを含めることにしましたが、同じディレクトリにソースを混在させたくなかったため、コードのプロジェクトフォルダーの横にチャートプロジェクトフォルダーを配置しました。Chartsプロジェクトをプロジェクトのナビゲーターバーにドラッグし、フレームワークをプロジェクトターゲットの[一般的なプロジェクト設定]の [ 埋め込みバイナリ]リストに含め、[ ビルドオプション ] セクションのプロジェクトの[ビルド設定 ]タブで[ 埋め込みコンテンツにSwiftコードを含む]スイッチを[はい]に設定しました。

私のプロジェクトのmoduleName-Swift.hファイルは、ここで提案されている他のスイッチや設定に関係なく生成されません。最後に、Lou Zの-Swift.hファイルを探す方法を使用して、Charts-Swift.hファイルがプロジェクトのxcode BuildディレクトリのCharts.framework / Headers /の深いところに生成されているのがわかりました。

プロジェクトのソースディレクトリにコードを含めずにDaniel Gindiのios-charts Swiftパッケージを使用する解決策は、以下を追加することです。

#import "Charts/Charts-Swift.h"

プロジェクトのデータをグラフ化するモジュールに。


IOSチャートのツールチップを変更/カスタマイズすることは可能ですか?はいの場合、1つの例を挙げられますか?
Amit Chauhan 2017

12

ファイル名の前には常にターゲット名が付きます。これは製品名と呼ばれますが、実際にはターゲット名です。新しいターゲット用にビルドする場合は、期待できるように準備してくださいthat_target-Swift.hファイル。

これを処理する1つの方法は

  1. ターゲット自体の名前(スペースなし)である各ターゲットのプリプロセッサーを追加します。例 MY_TARGET=1。これを、プロジェクトの設定->ビルド設定->各ターゲットのプリプロセッサマクロで追加します。
  2. PCHファイルを使用している場合、

これらの行をPCHファイルに追加します。

#if MY_TARGET==1
#include "My_Target-Swift.h"
#elif THAT_TARGET==1
#include "That_Target-Swift.h" 
#endif

PCHファイルを使用する利点は、どこにでもヘッダーを含める必要がないことです。

  1. PCHファイルを使用しない場合は、これらの同じ行を単一のヘッダーに追加し、Swiftクラスを使用する必要がある場合はそのヘッダーを含めます。

これは問題なく動作するはずです。


ヘッダーをソースに直接インポートするよりも、このソリューションを使用するのが本当に好きです。同じソースコードが複数のターゲット/プロジェクトで使用されている複雑なプロジェクト構造があります。これにより、コード全体に乱雑な#if #elseステートメントを追加する必要がなくなります。答えてくれてありがとう!
Ryan

これは私の日を救った。5行のコードを "Something-Swift-Headers.h"ファイルに(そのinclude中に)入れました。次に、この新しいファイルを必要な場所からインポートします。循環依存を回避し、.mファイルで便利なヘッダーを使用するために、これをPCHまたは.hファイル内に配置しないことをお勧めします。
ctietze

これは非常に多くのレベルで間違っています。まず、.pchファイルの使用を強くお勧めしません。次に、ファイル名には製品が含まれ、ターゲット名は含まれません。同じことは偶然かもしれませんが、製品名を使用しています!
Iulian Onofrei 2016年

10

Xcodeが実際に-Swift.hヘッダー(DerivedDataの奥深く)を生成しているが、Swiftクラスを参照していない場合は、ブリッジングヘッダーも定義されていることを確認してください。私がドキュメントを読む方法は、SwiftからObjective-Cを呼び出すためにそれだけが必要であることを暗示していましたが、Objective-CからSwiftを呼び出すためにも必要であるようです。

私の答えをご覧くださいhttps : //stackoverflow.com/a/27972946/337392

編集:それは私が最終的にAppleのドキュメントで説明されているのを見つけたので、パブリックと内部のアクセス修飾子が原因です:-

デフォルトでは、生成されたヘッダーには、public修飾子でマークされたSwift宣言のインターフェースが含まれています。アプリターゲットにObjective-Cブリッジヘッダーがある場合は、内部修飾子でマークされたものも含まれます。


はい、これは本当に役に立ちました。知らなかった。SwiftのユースケースのObj-Cに必要なだけだと思いました。
nodepond

お力になれて、嬉しいです。この動作の理由がわかったので、私は回答を編集しました。
エシェロン2015

7

多くの人々がここに持っているものを支持して、適切なスクリーンショットを追加します。SwiftとObj-Cコードは確実に共存できます。それはすべてまたはなしのゲームではありません。

Objective-CのSwiftファイルにアクセスするには、この呼び出しをObj-Cファイル(.m /実装ファイル内)に追加するだけです。

#import "{product_module_name}-Swift.h"

({product_module_name}はプロジェクトの製品モジュール名を表します)。製品モジュール名を推測したり、スペースや特殊文字でコーナーケースを見つけたりするのではなく、プロジェクトのビルド設定タブに移動して「製品モジュール名」と入力するだけです。インスペクターがあなたに明らかにします。鉱山は思っていなかったものでした。混乱している場合は、このスクリーンショットを確認してください。

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

また、SwiftでObj-cコードを機能させるには、ブリッジングヘッダーファイルを追加して、関連するObj-Cヘッダーをそこにインポートするだけです。


1
そうじゃないの#import
Iulian Onofrei 2016年

プロジェクト名がABCで、「ABC-Swift.h」がプロジェクトに存在している必要があるとしましょう。見つかりません。手動で作成する必要がありますか?私は自分でSwiftファイルを作成していません。Swiftで記述されたカカオポッドを含めているだけです。
nr5 '18 / 10/18

ブリッジヘッダー(この場合、ABC-Swift.h)は自動的には作成されません。Obj-Cプロジェクトで最初のSwiftファイルを作成しようとすると、通常、Xcodeは追加するように求めます。:ここに示した(「ヘッダを橋渡し」のコントロール+ F)のようにしても自分でブリッジングヘッダーを作成することができますdeveloper.apple.com/library/content/documentation/Swift/...
ブライアンSachetta

5

最も重要なことは、このファイルは見えないということです!!! 少なくとも、それはXcode6 beta5にあります。ワークスペースには、「YourModule-Swift.h」という名前のファイルはありません。モジュール名があり、モジュールがyesに設定されていることを確認して、Objective-Cクラスで使用してください。


5

OK、本当に必要なものはすべてここにあります!

1.追加したすべてのswiftファイルを削除し、エラーなしでコードをコンパイルします。

----------

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

----------

2.「プロジェクト」ビルド設定に移動し、製品モジュール名を設定します。プロジェクトには、スペースを含まない製品モジュール名が必要です。

----------

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

----------

3.Defines Moduleは、ターゲット設定ではなく、プロジェクトのBuild Settings、PackagingでYesに設定する必要があります!

----------

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

----------

4. file-> newFile->で、swiftファイルまたはビューコントローラーを作成します。

----------

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

----------

ブリッジングヘッダーの作成を要求し、作成できるようにします。一度拒否した場合は、手動で-Bridging-Header.hを追加する必要があります

5.コントローラーに@objcを追加して、ObjectiveCに公開する必要がある迅速なファイルがあることをコンパイラーに通知します。

----------

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

----------

6.プロジェクトをビルドし、objectiveCコントローラーのいずれかに#import "-Swift.h"をインポートすると、動作します!コマンドキーを押しながらクリックすると、実際のファイルが表示されます。

----------

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

----------

お役に立てれば!


>> Command-クリックして実際のファイルを見ることができます!これはかっこいい
Jagan

4

この回答は、Swiftクラスを呼び出すObjective-Cコードが既にあり、このエラーの受信を開始するユースケースに対処しています。

問題を修正する方法

次の手順で、最終的にすべての問題が解決されました。私は「鶏と卵」に言及している誰かの上で読んだ、そしてまさにこの手順に私を導いたのはまさにその概念である。この明示的なプロセスは、ヘッダーが生成されるまで、Swiftクラスを参照するObjective-Cコードを削除する必要があることを示しています。

  1. Objective-C実装ファイルの#import "ProductModuleName-Swift.h"ステートメントをコメント化します。
  2. Objective-C実装ファイル内の参照をSwiftクラスにコメント化します。
  3. クリーン&ビルド
  4. すべてのエラー/警告を解決する
  5. #import "ProductModuleName-Swift.h"ステートメントのコメントを削除します
  6. クリーン&ビルド(正常に完了するか、残っているエラーを修正しますこの時点でObjective-CのSwiftクラスを参照していないことを確認してください。そうであれば、一時的にコメント化してください)
  7. #import "ProductModuleName-Swift.h"ステートメントのクラス名でCmd-Clickingをクリックして、"ProductModuleName-Swift.h"が生成されていることを確認します
  8. Objective-C実装ファイル内のSwiftクラスを参照するコードのコメントを削除します。
  9. 通常どおりクリーン&ビルド( "ProductModuleName-Swift.h"を生成し、Swiftクラスを参照するObjective-Cコードを通常どおり使用できます)

Nota Bene:上記のようにスペースをアンダースコアに変更し、Defines ModuleをYESに変更することに関する回答は、Appleドキュメントで指定されているルールと同様に、このプロセスを実行するときにも適用されます

ヘッダーパスのブリッジ

1つのエラーで、ビルドプロセス中にProductModuleName-Bridging-Header.hファイルが見つかりませんでした。この事実によりエラーが発生しました

<不明>:0:エラー:ブリッジングヘッダー '/Users/Shared/Working/abc/abc-Bridging-Header.h'は存在しません

エラーを詳しく調べたところ、ファイルは実際には(間違ったパス)にあるため、記述された場所に存在することはありませんでした。

'/Users/Shared/Working/abc/abc/abc-Bridging-Header.h'。ターゲット/プロジェクトのビルド設定を簡単に検索して手動で修正を行うと、abc-Swift.hファイルが再び自動生成されました。

ビルド設定


1
プロジェクトが大きすぎて、目的のcのすばやいコードのすべての参照をコメント化することが実用的でない場合はどうなりますか?
Andrew Morris

3

次のObjective-Cクラスにヘッダーをインポートする必要があります。

#import “ProductModuleName-Swift.h”

これは、「ターゲット内のすべてのSwiftファイルは、このインポートステートメントを含むObjective-Cの.mファイルに表示されます」というリファレンスで自動的に生成されます。


24
しかし、それを行うとビルドエラーが発生し、AppName-Swift.hが存在しません。一方、AppName-Bridging-Header.hは存在します。
David Kristensen 2014年

5
@DavidKristensen:私は同じ問題で立ち往生しているとして、あなたは?それのソリューションを手に入れた
バシャ

2

プロジェクト内の実際のファイルは作成されません([ProductModuleName] -Swift.h)。Cmd +インポートをクリックすると、オンザフライ(およびメモリ内)で生成されるため、リンケージがどのように行われるかを確認できます。または、Xcodeキャッシュディレクトリのどこかにファイルを開きますが、プロジェクトディレクトリにはありません。

モジュールのターゲット設定の)Defines ModuleプロジェクトプロップをYesに設定する必要がありますます。モジュール名にスペースまたはダッシュがある場合は、[ProductModuleName] -Swift.hファイルのすべてのインポートで_を使用します。

swiftタイプを使用するすべての.hおよび.mファイルにインポートするか、.pchにインポートできます。

したがって、私のモジュール(プロジェクト)の名前が "Test Project"の場合、次のように、プロジェクトの.pchファイルにインポートします(そこにあります)。

#import "Test_Project-Swift.h"

2

"。"を使った人は誰でも頭を上げます。そこにプロジェクト名。Xcodeが「。」を置き換えます。ブリッジヘッダーファイルのSwiftバージョンの場合は、アンダースコア「_」を使用します。奇妙なことに、生成されるBridging-Header.hはピリオドをアンダースコアに置き換えません。

たとえば、My.Projectという名前のプロジェクトには、次のブリッジヘッダーファイル名があります。

Bridging-Header.h(自動生成)

My.Project-Bridging-Header.h

Swift.h

My_Project.h

これが、ピリオドを使用していて、私と同じように行き詰まっている人にとって役立つことを願っています。このファイルは次の場所にあります。

Macintosh HD /ユーザー/ ユーザー /ライブラリ/Developer/Xcode/DerivedData/My.Project-fntdulwpbhbbzdbyrkhanemcrfil/Build/Intermediates/My.Project.build/Debug-iphonesimulator/My.Project.build/DerivedSources

気を付けて、

ジョン


2

プロジェクトには、スペースを含まないモジュール名が必要です。定義モジュールは、パッケージングの下のビルド設定ではいに設定する必要があります。#importステートメントをコメントアウトしました:

それでも「ProductModuleName-Swift.h」のインポートでエラーが発生する場合は、

//#import "ProductModuleName-Swift.h"

これにより、私のSwiftコードに他の多くのエラーが明らかになりました。

これらの新しいエラーを修正してソースのビルドが成功したら、#importとbingoのコメントを外しました!ヘッダーが作成され、正しくインポートされました:)


私の問題は、Swiftコードにもエラーがあったことですが、-Swift.hファイルのコメントを解除するまでそれを知りませんでした。ありがとう!
ウィル

1

いつもうまくいくトリックを見つけました。

  1. appDelegate.hファイルとProductName-Prefix.pchファイルに#import "ProductModuleName-Swift.h"を作成します。Xcode 6にない場合は、次の方法で作成できます。なぜProjectName-Prefix.pchがXcode 6で自動的に作成されないのですか?
  2. Command + shift + kを使用してコードをクリーンアップし、「ProductModuleName-Swift.h」に関するエラーを受け取った場合は、appDelegate.hファイルからコードを削除します。
  3. コードをもう一度クリーンアップします。今、すべてが魅力のように機能します
  4. 「ProductModuleName-Swift.h」に関するエラーが再び表示される場合は、appDelegate.hファイルに再度作成して、コードを再度クリーンアップしてください。

このエラーが表示されるたびに、この作業(appDelegate.hファイルから "ProductModuleName-Swift.h"を削除して作成し、コードをクリーンアップ)してください。


1

私はこの解決策を見つけました

  • SwiftBridge.hを作成する
  • #import“ ProductModuleName-Swift.h”を配置します
  • この.hファイルを公開します(重要)ファイルを選択します->ファイルインスペクターを表示(右バー)->公開します

今できる

#import "SwiftBridge.h"

ProductModuleName-Swift.hの代わり

これは回避策の解決策です。Xcodeの次のバージョンでは、この問題は解決されると思います。幸運を


動作しません。試してみただけです。この行#import “ProductModuleName-Swift.h”は、元のObjective-Cコードファイルではなく、SwiftBridge.hファイルにエラーを表示するだけです。
Supertecnoboff 2015年

1

モジュール名/ objective-cのSwiftヘッダーのインポートを決定するのに苦労していました。ここでもたくさんの記事を読みました。

しかし、含まれているすべての特殊文字(「。」または数値またはスペース)を含むプロジェクト名の明確な答え- ターゲットのビルド設定の下の「製品モジュール名」で役立つテキストを見つけることができます。

たとえば、私のターゲット名は数字で始まっています-"1mg"そして、上記のフィールドは私のモジュール名として "_mg"を示していました。

だから私は#import "_mg-Swift.h"を使用し、それはうまくいきました。

ターゲットのビルド設定の製品モジュール名は、プロジェクトで機能する正しいモジュール名を提供します


スクリーンショットへのリンクを編集できる場合は、回答を編集して表示することができます。
SuperBiasedMan 2015

1

私の場合、展開ターゲットを少なくとも「OS X 10.9」に設定する必要-Swift.hがあり、ヘッダーが自動的に生成されました。特に、古くて非常に大きなObjective Cコードベースがある場合、デプロイメントターゲットのバージョンを変更すると、多くの非推奨警告が表示される可能性があることに注意してください。私たちの場合、XIBファイルとビュークラスでやるべきこともたくさんありました。


2
その他の場合-ターゲットのビルド設定を確認し、正確な名前「MyProject-Swift.h」を取得します。これは、適切なObjcファイルに「#include "MyProject-Swift.h」として含める必要があります。BTW、これ答えは本当に私を助けました-古いObjectiveCオープンソースを変換する作業
David H

0

以前にプロジェクトをビルドでき、“ProductModuleName-Swift.h” not foundエラーに関連する問題がなく、今は再び厄介なエラーが発生している場合、その理由は最近の変更にある可能性があります。

私にとっては、これは(誤って)誤った.swiftファイルエンコーディングによるものでした。変更を元に戻し、手動で元に戻すことができます。


0

これは明白なポイントかもしれませんが(多分明白すぎるかもしれません)、ヘッダーを生成するには、プロジェクトに少なくとも1つのswiftファイルが必要です。後で迅速に書くつもりで定型コードまたは構成コードを書いている場合、インポートは機能しません。


0

私はObjective CプロジェクトからWatchOS2の迅速なコードを削除する必要がありました。そしてその後、XCodeは-Swift.hを生成することを提案しました


0

私は同様の問題を抱えていましたが、私のプロジェクトは以前にコンパイルされていて、いくつかのファイルのコード変更後に突然エラーが発生しました。myproject-swift.hファイルで「ファイルが見つかりません」というエラーが発生する理由を理解するのに時間がかかりました。私が行ったコードの変更にはいくつかのエラーがありました。Xcodeは、「ファイルが見つかりません」というエラーを常に表示する代わりに、これらのエラーを指摘しませんでした。次に、以前のバージョンのコードのコピーを取得し、新しいコードと比較して、ファイルを1つずつマージしました。各ファイルのマージがエラーを見つけるためにプロジェクトをコンパイルした後。つまり、コードにエラーがある場合、Xcodeはmyproject-swift.hファイルに対して「ファイルが見つかりません」というエラーを表示するだけかもしれません。ほとんどの場合、プロジェクトにコンパイルエラーがあります。それらのエラーをクリーンアップすると、機能します。


0

Cocoapodsのようなものを使用している(そしてプロジェクトではなくワークスペースで作業している)場合は、ワークスペースを開いてビルドする前に、プロジェクトを開いてビルドしてみてください。YMMV。


0

場合によっては、obj-c .mファイルのターゲットメンバーシップを設定解除してから再度設定する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.