Xcode 6ベータ4にアップグレードしたばかりで、ベータ2のライブビュー用にフレームワークを作成しました。別のSwift bug のため、Obj-Cコードを使用する必要がありました。 。ただし、アップグレードすると、次のエラーが表示されます。
エラー:フレームワークターゲットでのブリッジングヘッダーの使用はサポートされていません
リリースノートには何も記載されていません。または、他の移行パスも見つかりませんでした。他の誰かがこれを見て、解決策に到達しましたか?
Beta 3はライブビューのフレームワークの必要性を排除したことを認識していますが、私の場合、それを機能させることができれば理にかなっています。フォールバックとして削除することもできますが、ベータ4で完全に破損していない場合はフレームワークを使用することをお勧めします。
エラーが示すように、フレームワークではブリッジングヘッダーは許可されません。 同じフレームワーク内からのコードのインポートターゲットセクションの Mix&Match Appleこれに関するドキュメントのヒント。彼らが言うように、「アンブレラヘッダーファイルで、Swiftに公開するすべてのObjective-Cヘッダーをインポートする」必要があります。
ただし、これらの特定のヘッダーも公開する必要がある場合があることを発見しました。この回答では、その理由と方法を確認します。 Swiftコンパイラエラー:「フレームワークモジュール内の非モジュラーヘッダー」 。
だから、これを行う:
注:「傘ヘッダーファイル」は、フレームワークのすべてのパブリックヘッダーを一般的に表すファイル([ProductName] .hという名前)です。通常、フレームワークに含まれる他のヘッダーへの#importステートメントの単なるリストです。 Xcodeでは、UIKit.hを開くと、アンブレラファイルの良い例が表示されます。
2つの可能性があります。必要なヘッダーをアンブレラヘッダーファイルに追加してパブリックにすることは、1つの方法です。ただし、ヘッダーをSwiftで使用可能にする必要があるが、パブリックではない場合、これは問題です。
内部ヘッダーをSwiftで利用できるようにする2番目の可能性について詳しく説明します here 。基本的に、次のようなモジュールマップを作成する必要があります。
module AwesomeKitPrivate {
header "../InternalClass.h"
export *
}
これは、設定を使用してXCodeに含めることができます。
Swift_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule
Objective-CのSwiftへのインポート を参照してください。
同じフレームワークからObjective-CコードをSwiftにインポートするには
アンブレラヘッダーファイルで、Swiftに公開するすべてのObjective-Cヘッダーをインポートします。例えば:
#import "XYZ/XYZCustomCell.h" #import "XYZ/XYZCustomView.h" #import "XYZ/XYZCustomViewController.h"
インクルードファイルを、その「ビルドフェーズ」のフレームワークの「ヘッダー」セクションで公開します。
きれいにして再構築します。
Swiftは、アンブレラヘッダーで公開するすべてのヘッダーを表示します。そのフレームワークのObjective-Cファイルのコンテンツは、インポートステートメントなしで、そのフレームワークターゲット内のSwiftファイルで自動的に使用可能になります。システムクラスで使用するのと同じSwift構文でカスタムObjective-Cコードを使用します。
let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"
重要:「傘ヘッダーファイル」とは、ファイル{ModuleName} .hを意味します。ところで、ターゲット名は{ModuleName} .framework。