web-dev-qa-db-ja.com

Swiftでポッドを作成すると、別のObjective-Cポッドに依存する

Overview of my condition

画像で説明したように、Swiftにポッドライブラリを作成します。これには、Objective-cで記述された別のポッドライブラリ依存関係があります。
これでSwiftでObjective-Cコードを使用するには、ブリッジファイルが必要で、それも作成しました。しかし、それをポッドのビルドフェーズに設定すると、このエラーが発生しました<unknown>:0: error: using bridging headers with framework targets is unsupported

インターネットで.hファイルをpod-umbrella.hファイルに挿入する必要があるというヒントを得ましたが、それでもエラーInclude of non-modular header inside framework module 'DemoPod'が発生しました

  1. 以前に同様の問題があり、それを解決した場合は、私を助けてください。
  2. いくつかのヒント/提案も大歓迎です。

あなたが遊んでみたいなら、これが私のdemopodプロジェクトです。
デモポッドプロジェクト

[〜#〜] edit [〜#〜]Ashsisの提案に従って、以下のコードをDemoPod.modulemapに追加しました

framework module AdaptiveCard {
  umbrella header "/Users/jageen.shukla/Documents/Project/ai answer/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
  requires ios
  export *
}

しかし、それでもモジュール「AdaptiveCard」が見つからないターゲットプロジェクトでエラーが発生するため、プロジェクトをビルドできません。 enter image description here

DemoPod.modulemapのコードを変更します

framework module DemoPod {
  umbrella header "DemoPod-umbrella.h"
  
  // Solution 2
  framework module AdaptiveCard {
      umbrella header "/Users/jageen.shukla/Downloads/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
      export *
      module * { export * }
  }
  // ----
  
  export *
  module * { export * }
}



3
Jageen

ブリッジヘッダーは、SwiftのObjective CおよびCPPファイルにアクセスするために、App TargetおよびApp Testターゲットでのみ推奨されます。モジュールマップを使用して、ObjcおよびCPP機能をSwiftライブラリに公開する必要があります。これは、静的ライブラリまたはフレームワークに関しては、ここでモジュールマップの使用方法をコード実装で確認してください。 https:/ /github.com/ashislaha/Swift-ObjectiveC-Interoperability

1
Ashis Laha

エラーが示すように、ブリッジングヘッダーはフレームワークでは許可されず、アプリケーションでのみ許可されます。

詳細なドキュメントは ここ です

Swiftコードは、フレームワークのパブリックアンブレラヘッダーに含まれているobjcからすべてにアクセスできるようになります

// In this header, you should import all the public headers of your framework using statements like #import <YourFramework/PublicHeader.h>  

フレームワークをコンパイルするには、ビルド設定で追加した場所からブリッジヘッダーを削除する必要があります。

あなたは今何をすべきですか?

これを行う:

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

  5. クリーンして再構築します。

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

0
Moumen Alisawe