web-dev-qa-db-ja.com

Xcode 6 / Beta 4:フレームワークターゲットでのブリッジングヘッダーの使用はサポートされていません

Xcode 6ベータ4にアップグレードしたばかりで、ベータ2のライブビュー用にフレームワークを作成しました。別のSwift bug のため、Obj-Cコードを使用する必要がありました。 。ただし、アップグレードすると、次のエラーが表示されます。

エラー:フレームワークターゲットでのブリッジングヘッダーの使用はサポートされていません

リリースノートには何も記載されていません。または、他の移行パスも見つかりませんでした。他の誰かがこれを見て、解決策に到達しましたか?

Beta 3はライブビューのフレームワークの必要性を排除したことを認識していますが、私の場合、それを機能させることができれば理にかなっています。フォールバックとして削除することもできますが、ベータ4で完全に破損していない場合はフレームワークを使用することをお勧めします。

118
Chris Conover

エラーが示すように、フレームワークではブリッジングヘッダーは許可されません。 同じフレームワーク内からのコードのインポートターゲットセクションの Mix&Match Appleこれに関するドキュメントのヒント。彼らが言うように、「アンブレラヘッダーファイルで、Swiftに公開するすべてのObjective-Cヘッダーをインポートする」必要があります。

ただし、これらの特定のヘッダーも公開する必要がある場合があることを発見しました。この回答では、その理由と方法を確認します。 Swiftコンパイラエラー:「フレームワークモジュール内の非モジュラーヘッダー」

だから、これを行う:

  1. ブリッジングヘッダーファイルを削除します。
  2. フレームワークのビルド設定でブリッジングヘッダーファイルへの参照を削除します
  3. アンブレラファイル([ProductName] .h)に必要なヘッダーを追加します
  4. インクルードファイルを、その「ビルドフェーズ」のフレームワークの「ヘッダー」セクションで公開します。
  5. きれいにして再構築します。

:「傘ヘッダーファイル」は、フレームワークのすべてのパブリックヘッダーを一般的に表すファイル([ProductName] .hという名前)です。通常、フレームワークに含まれる他のヘッダーへの#importステートメントの単なるリストです。 Xcodeでは、UIKit.hを開くと、アンブレラファイルの良い例が表示されます。

207

2つの可能性があります。必要なヘッダーをアンブレラヘッダーファイルに追加してパブリックにすることは、1つの方法です。ただし、ヘッダーをSwiftで使用可能にする必要があるが、パブリックではない場合、これは問題です。

内部ヘッダーをSwiftで利用できるようにする2番目の可能性について詳しく説明します here 。基本的に、次のようなモジュールマップを作成する必要があります。

module AwesomeKitPrivate {  
  header "../InternalClass.h"
  export *
}

これは、設定を使用してXCodeに含めることができます。

Swift_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule  
22
Jan Rüegg

Objective-CのSwiftへのインポート を参照してください。

同じフレームワークからObjective-CコードをSwiftにインポートするには

  1. [ビルド設定]の[パッケージ化]で、そのフレームワークターゲットの[モジュールの定義]設定が[はい]に設定されていることを確認します。
  2. アンブレラヘッダーファイルで、Swiftに公開するすべてのObjective-Cヘッダーをインポートします。例えば:

     #import "XYZ/XYZCustomCell.h" 
     #import "XYZ/XYZCustomView.h" 
     #import "XYZ/XYZCustomViewController.h" 
    
  3. インクルードファイルを、その「ビルドフェーズ」のフレームワークの「ヘッダー」セクションで公開します。

  4. きれいにして再構築します。

Swiftは、アンブレラヘッダーで公開するすべてのヘッダーを表示します。そのフレームワークのObjective-Cファイルのコンテンツは、インポートステートメントなしで、そのフレームワークターゲット内のSwiftファイルで自動的に使用可能になります。システムクラスで使用するのと同じSwift構文でカスタムObjective-Cコードを使用します。

let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"

重要:「傘ヘッダーファイル」とは、ファイル{ModuleName} .hを意味します。ところで、ターゲット名は{ModuleName} .framework。

9
Ralph Shane