私はSwiftクラスを(ターゲット 'MyApp'の)Objective Cからimportステートメント経由で正常に呼び出しています:
#import "MyApp-Swift.h"
「MyAppLite」という新しいターゲットを作成しました
新しいターゲットをコンパイルすると、コードに「MyApp-Swift.h」が必要ですが、コンパイラが「MyAppLite-Swift.h」を作成しているため、エラーが発生します
したがって、条件付きSwift/ObjCヘッダーを作成する必要があります#import
私がコンパイルしているターゲットに対して。
どのようにこれを行うことができますか、またはより良い方法がありますか?
Product Module Name
のBuild Settings
設定をモジュール全体で同じに設定することもできます($(PROJECT_NAME)
に設定します)。これにより、生成される<project>-Swift.h
ファイルはすべてのモジュールで同じ名前になります。これにより、プリプロセッサマクロを追加/確認する必要がなくなります。
この問題に対処するために私が見つけた最良の方法は、Xcodeの共有プロジェクト設定です。次の設定を検索できます。
Objective-Cで生成されたインターフェイスヘッダー名*
その値を「MyProject-Swift.h」などの共通のヘッダー名に設定すると、各ターゲットに適用され、Objective-Cファイルでインポート宣言を安全に使用できます。これにより、必要に応じて、ターゲットごとに一意の製品モジュール名を引き続き使用できます。
Xcodeバージョン6.4(6E35b)でこれをテストしました。
*注意:これは、Swiftコンパイラー設定の下に表示されます。この設定は、Swiftソースファイルをプロジェクトに追加した場合にのみ表示されます。 Swiftソースが関連付けられていない場合、Swiftコンパイラオプションはそのターゲットのビルド設定に対して表示されません。
がんばろう!
ターゲットまたはプロジェクトの名前を変更する場合、または_Swift_MODULE_NAME
_を意図したとおりに使用する場合、以前の回答にはいくつかの問題があります。
最も普遍的なソリューションは、ターゲットではなくプロジェクトのビルド設定で_Swift_OBJC_INTERFACE_HEADER_NAME
_(「Objective-C Generated Interface Header Name」)を次のように変更することです。
$(PROJECT_NAME)-Swift.h
—プロジェクトごとに1つ。$(Swift_MODULE_NAME)-Swift.h
—モジュールごとに1つ(デフォルト値)。まあ、私が修正できる唯一の方法は...
#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif
製品モジュール名に「違法」な文字が含まれている場合は、アンダースコアに置き換える必要があることに注意してください。
お役に立てば幸いです!
適切な#import <project> -Swift.hステートメントを、各ビルド(ターゲット/スキーム)に対して定義/追加されたプレフィックスヘッダーファイル(<project> -Prefix.pch)に入れます。
唯一の作業方法は次のとおりです。
1-最初のターゲットから(動作中のブリッジがあります)ビルド設定 select Objective Cブリッジングヘッダー
2-コピー目的Cブリッジングヘッダー
3-他のターゲットを開く ビルド設定
4-貼り付け5-ヘッダーファイルを新しいヘッダーファイルに変更します(ターゲットB.h)
(2つのターゲットに対してこのオプションがあります)