web-dev-qa-db-ja.com

モジュール「myFramework」のアンブレラヘッダーにヘッダー「otherFramework.h」が含まれていません

My Swift/iOS9フレームワーク 'viewer_protocol'は別の外部Objective-Cフレームワークを使用します( CocoaAsyncSocket )。Carthageを使用してCocoaAsyncSocketを構築しています。 :私のフレームワークXcodeプロジェクト内に、問題なくフレームワークを使用したサンプルアプリがあります。

ここで、Carthageを使用していますが、別のXcodeプロジェクトでフレームワークを使用します。フレームワークのみを依存関係として含め、Carthageは依存関係をCocoaAsyncSocketに自動的に解決します。両方のフレームワークをこの新しいXcodeプロジェクトに埋め込み、アプリをビルドします。ここではすべて正常に動作します-取り除くことができない警告が1つあります。

/Users/hibento/Repositories/viewer_protocol/<module-includes>:1:1: 
Umbrella header for module 'viewer_protocol' does not include header 'GCDAsyncSocket.h'

これは私のフレームワークヘッダーです。

#import <UIKit/UIKit.h>

//! Project version number for viewer_protocol.
FOUNDATION_EXPORT double viewer_protocolVersionNumber;

//! Project version string for viewer_protocol.
FOUNDATION_EXPORT const unsigned char viewer_protocolVersionString[];

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

ご覧のとおり、CocoaAsyncSocket.hがインポートされています。さらに、私のフレームワーク内にはCocoaAsyncSocket.hファイルが含まれています。

my framework's folder

ここで何が欠けていますか?私はフレームワーク内で他のいくつかの外部フレームワークを使用していますが、警告はありません-これらの外部フレームワークはすべてSwift-CocoaAsyncSocketは純粋なObjective-Cです。

これは私のフレームワークmodule.modulemapです:

 framework module viewer_protocol {
   umbrella header "viewer_protocol.h"

   export *
   module * { export * }
 }

 module viewer_protocol.Swift {
     header "viewer_protocol-Swift.h"
 }

更新

私は解決策を見つけました:フレームワークヘッダーのインポートステートメントを

#import <CocoaAsyncSocket/CocoaAsyncSocket.h>

#import "CocoaAsyncSocket/CocoaAsyncSocket.h"

これで、Xcodeはヘッダーファイルを検出し、警告が消えます。

45
hibento

私は最近同じ問題に遭遇しました。ターゲットメンバーシップでヘッダーファイルをpublicに設定したようですが、アンブレラヘッダーでは公開されていません。 projectの代わりにpublicアクセスでヘッダーファイルを作成することによる問題を修正しました。

25
AyJay

今日も同じ問題がありました

問題は

モジュールの傘ヘッダー 'HockeySDK'にはヘッダー 'BITHockeyBaseViewController.h'は含まれません

そして解決策は

1.プロジェクトをビルドして実行し、実行Report Navigator

2.警告を見て、クリックして詳細を展開

以下のスクリーンショットでわかるように、変更する必要のあるファイル名になります

enter image description here

したがって、AppDelegate.mファイルのimportステートメントを更新しました

新規

#import "HockeySDK/HockeySDK.h"

古い

#import <HockeySDK/HockeySDK.h>

そして、問題がなくなった..

これが誰かを助けることを願っています。解決のためにここに来ている人。

24
swiftBoy

同じ問題がありました。古いビルドファイルに関連しているようです。

標準のXcodeの問題修正プログラムは私のために働いた:

  1. クリーンプロジェクト
  2. 派生データを削除しました
  3. Xcodeを再起動する
16
Senseful

私にとっての解決策は次のとおりでした:

1)各Objective Cフレームワークには、以下をすべて含む1つのヘッダーファイルがあります。

#import ...
#import ...
#import ...

2)このファイルが欠落しているヘッダーをインポートすることを確認してください。

3)プロジェクトを再度ビルドします。警告が削除されます。

14
Oded Regev

ヘッダーが次の場所でパブリックに設定されている場合の完全性のために:

ビルドフェーズ>ヘッダー

あなたはどちらか

他の人が言及したように、インポートをメインヘッダーに含めます

OR

公開する必要がない場合は、そのヘッダーを「プライベート」に移動します

7
pflous

あるいは、フレームワークのビルドフェーズのPublicエリア内でファイルを公開している場合がありますが、実際にはProjectエリアに戻す必要があります。

これらのファイルをフレームワークのアンブレラヘッダー内に入れたくないので、一般にアクセスできるようにするには、これを元に戻すことができます。

Goto Framework-> Target-> Build Phasesとドラッグして、不要なヘッダーファイルをPublicからProjectに移動します。

Screenshot

7
iwasrobbed

最近これを入手しましたが、これはDerivedDataの破損によるものです。そのフォルダを削除すると、問題が修正されました。

4
AnneTheAgile

その他:私の場合、フレームワークから公開したいヘッダーを「プロジェクト」から「パブリック」に既に移動しています(フレームワークターゲットのビルドフェーズ)

次に、Xcodeがこの警告を出しました。

Xcodeは、フレームワークで作成されたパブリックヘッダーファイルに#import "警告のヘッダー名>"を追加する必要があることを伝えているため、(フレームワークの)クライアントはこのヘッダーを認識します。

修正:
1。フレームワークパブリックヘッダーファイル(フレームワークを作成したときにxcodeによって作成されたもの)に移動します。
2。 #import "警告のヘッダー名.h"を追加します。

0
user1105951

この投稿を見てください:

@ import vs #import-iOS 7

新しいモジュールのインポートの概念について説明します。私は独自のカスタムフレームワークを持っていて、objective-cフレームワークをインポートする新しい方法を採用した後

古い:#import <MyFramework/MyFramework.h>

新着: @import MyFramework;

警告を処理しました/

0
mjl007

私の場合(Obj-cフレームワーク):

Umbrella header for module 'opus' does not include header 'opus_multistream.h'

変更する必要がありました:

@import opus.opus_defines;

@import opus;

(私は#import "....h" または #import <....h>フレームワークの場合)

0
szubiszon