Swift Framework:Umbrella header '[…] .h' not found


114

Objective-CSwiftコードの両方を含むカスタムフレームワークでは、Swiftコンパイラーは次のエラーをスローします。

[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found
  umbrella header "bugtest.h"
                  ^
<unknown>:0: error: could not build Objective-C module 'bugtest'

回答:


240

これは通常、プロジェクトの名前変更などの後に発生します。問題は、アンブレラヘッダーがパブリックヘッダーとして表示されなくなったことです。添付画像を確認して、これを修正する方法を確認してください。

修正


7
「ビルドフェーズ」の「ヘッダー」セクションを表示するには、ポッドターゲットをクリックする必要があることを、今後の読者に伝えてください。メインのアプリターゲットには「ヘッダー」セクションは表示されません。
shmim

3
これで完全に修正されました。ありがとうございました。これは承認された答えであるはずです。
グジャミン、2016

16
私にとって-アクセスレベルは公開されていましたが、見つからない傘でも失敗しました。「ビルドフェーズ」の「ヘッダー」セクションを一番上に移動しましたが、機能し始めました。
アレクセイミナエフ2016

6
私の傘のヘッダーはすでに公開されていました。セクションを上に移動しても効果はありませんでした。
Rafael Bugajewski、2016

1
Carthageがインポートされたフレームワークの1つを更新したときに、同様の問題が発生していました。XCodeは、参照されているフレームワークパスの変更を監視するのに問題があると思います。単純なXCode再起動で問題が解決しました。
トニー

48

Xcode 7 BetaでSwift 2を使用すると、フレームワークヘッダーが「パブリック」として宣言されていない場合にも発生します

たとえば、ヘッダーファイルに「プロジェクト」の可視性が設定されたCocoaタッチフレームワークがあり、プロジェクトのすべてのSwiftファイルで「傘のヘッダー...が見つかりません」というエラーが発生しました。エラーは消えました


1
私の場合、私がこの問題に遭遇したとき、この答えは「より正しい」答えのようであり、私にとってはうまくいきました。
グレイマウス2015

1
私は同意します。これが正解です。<project> .hファイルに適切なターゲットメンバーシップとアクセスレベル(パブリック)があることを確認します。
user965972

@ Shadow_x99ヘッダーを「公開」に設定するにはどうすればよいですか。私の質問は、stackoverflow.com
questions / 36084291 /…に

これは実際には@arturgrigorの回答のバリエーションですが、Xcodeが変更自体を実行する点が異なります。最終結果は同じになるはずです。
original_username

40

これが発生する可能性のある方法は4つあり、以前のバージョンのXcodeのバグは無視されます

  • プロジェクトに$(TARGET_NAME).hというアンブレラヘッダーがありません
  • アンブレラヘッダーがありますが、パブリックとして設定されていません。arturgrigorの回答を見る
  • DEFINES_MODULE に設定されていません YES
  • CLANG_ENABLE_MODULES に設定されていません YES

3
私が見つけた5番目の原因:アンブレラ
_ヘッダー.h

3
このリストではすべてが正しく設定されていますが、失敗します。
Erik Aigner

25

これはAlways Search User Paths、フレームワークターゲットの設定が有効になっているときに発生します。

に設定するNoと、そのエラーが解決されます。

私見これはSwiftコンパイラのバグで、Appleにレーダーを提出しました。rdar:// 21038443を
参照してください


1
ありがとう!これも私を得たものです。
Chris Hatton、2015年

これでうまくいきました。追加の症状として、クリーンアップの直後に失敗したが、クリーンアップせずに再試行した場合は成功した。
Ben Leggiero

18

私にとって-アクセスレベルは公開されていましたが、見つからない傘でも失敗しました。「ビルドフェーズ」の「ヘッダー」セクションを一番上に移動しましたが、機能し始めました。ポッドファイルへのスクリプト:

post_install do |installer|
installer.pods_project.targets.each do |target|
    phase_name = 'Headers'
    target.build_phases.each do |phase|
        if (phase.display_name.include? phase_name)
            target.build_phases.unshift(phase).uniq! unless target.build_phases.first == phase
        end
    end
end

それがなぜ起こっているのか手がかりはありません。ダミープロジェクトを試してみました-発生していません。複数の依存関係がある大きなもののみ。アンブレラヘッダーをコピーする前にコンパイルしてください。


4
「ヘッダー」を「コンパイルソース」の上に移動するのがうまくいきました。xCode 8.2.1。
Rob Paterson

ヘッダーフェーズを一番上に移動することもうまくいきました。
セーレン・モーテンセン

無効なPodfileファイル:構文エラー、予期しない入力の終了、keyword_endが必要です。
Volodymyr Kulyk

13

間違いなく、フレームワークをパブリックに設定する必要があります。

ここに画像の説明を入力してください


1
完璧に動作します。どうもありがとう!
kkiermasz 2018

そのスクリーンショットのコンテキストは何ですか?あなたはそこに行くために何をクリックしますか?
pkamb

7

私は「Use Header Maps」を「NO」に設定して問題を解決しました


…そして私の場合、それをYESに設定すると問題が修正されました。残念ながら、この設定に関するドキュメントはないようですが、デフォルトはyesであり、ターゲットの1つでnoに設定された理由がわかりません。
robotspacer

7

もう1つの解決策:フォルダーの名前を変更した後、Xcodeのサイドバーを使用して場所を更新した場合でも、古い場所が.hファイルのプロジェクトファイルに表示されることがあります。この古い場所により、アンブレラヘッダーエラーが発生します。

簡単な解決策:.hファイルへの参照を削除して、再度追加します。(そして、それを再び公開することを忘れないでください!)


5

New Swift Build SystemとParallelize Buildを有効にすると、この質問のようなエラーが発生することがわかりました。解決策は、迅速なソースファイルにインポートされたフレームワークにリンクすることでした。(以前はシリアルビルドキューで以前にビルドされたものにフレームワークがリンクされていたため、以前はアプリがビルドされると思いました)

ワークスペース内のすべてのターゲットのすべてのインポートを実行し、それらのフレームワークがそのターゲットにリンクされていることを確認するスクリプトを作成しました。

https://github.com/Jon889/SwiftImportChecker


4

ここにはすでにいくつかの優れた答えがあります。@ Shadow_x99はとても役に立ちました。しかし、私自身の経験で補足することが許されれば。

アンブレラヘッダーは、ビルドプロセスで自動的に識別されます。ターゲットのビルド設定で指定されていないか、プロジェクト設定から継承されていません。

したがって、このエラーを回避するために-XCode 7の時点で -次のようになっています。

warning: no umbrella header found for target 'MyTarget', module map will not be generated

2つの重要なステップを実行する必要があります。

まず、アンブレラヘッダーの名前はtargetと同じにする必要があります。したがって、ターゲットがという名前のフレームワークMyTargetである場合、という名前のヘッダーが必要MyTarget.hです。

第2に、MyTargetその回答で述べたように、ビルドフェーズでは、ヘッダーファイルを上記のようにパブリックセクションにリストする必要があります。


1

私は同じ問題を抱えていて、提案された回答のいずれも私のケースでは役に立たなかったので、誰かが同じ問題を抱えている場合に備えて、これをここに残します。

「ビルドフェーズ」で「スクリプトの実行」を追加しましたが、それを削除してしまい、エラーが発生し始めました。

私のソリューションでは、プロジェクトをクリーンアップし、フレームワークを再構築してから、アプリプロジェクトを正しく構築する必要がありました。


1

私の経験では、プロジェクトのターゲットではなく、エラーを発生させているフレームワークをターゲットで選択する必要があります。
次にコンパイルします。コンパイルすると、プロジェクトターゲットで使用できるようになります。


0

Xcode 7.1とCocoaPods 0.39を使用している場合、一部のCocoaPods(Nimble、Quickなど)に影響するコンパイラの迅速な変更があるようです。このスレッドで指定されている解決策のいくつかを試してください:https : //github.com/ CocoaPods / CocoaPods / issues / 4420ただし、どちらも機能しない場合は、Xcode 7.0.1または7.2ベータ版を使用してみてください。どちらもhttps://developer.apple.com/downloads/から入手できます

編集:私の場合、問題を解決するために、CocoaPodsを0.38.2にダウングレードする必要もありました。

後の編集:Xcode 7.1とは関係がないようです。CocoaPodsを0.38.2にダウングレードするだけで役立つはずです。

sudo gem uninstall cocoapods -v 0.39
sudo gem install cocoapods -v 0.38.2

@Marius Ursacheに感謝します。あなたの指示に従って、私のために問題を解決しました。
Vick Swift

0

ヘッダーファイルは[Build Phases / Headers / Public]セクションにある必要があります。

ヘッダーファイルがすでに[ビルドフェーズ/ヘッダー/パブリック]セクションにある場合、多くの場合、休耕を行うことで問題が解決しました。

  1. プロジェクトをきれいにする
  2. ヘッダーファイルを「プライベート」または「プロジェクト」セクションに移動する
  3. ヘッダーファイルを「public」セクションに戻します
  4. すべてを再構築します

うわーこれはこれらの何十もの答えからうまくいった唯一のものであり、それは最も可能性が低いようです、ありがとう!
Paolo

0

module.modulemapの名前をmoduleXYZ.modulemapに変更し、プロジェクト設定のmodulemapファイル名を変更することで、これを解決しました


0

私の場合は、そのスキームを使用して特定のフレームワークを構築しました。そして、プロジェクト全体を再構築すると、問題が解決しました


-1

これらのファイルをプロジェクトのディレクトリから削除します。 .xcworkspace pods/そしてpodfile.lock

ポッドを更新してプロジェクトをビルドします。


-1

問題のあるフレームワークビルド設定のコンパイルモードをインクリメンタルにして修正しました。


-1

私の場合、問題はビルドフェーズのヘッダー削除スクリプトが原因でした

function removeHeaders() {  
    find $BUILD_ROOT/...  -name '*.h' -exec rm -f {} \;  
}  
removeHeaders

このスクリプトを削除すると問題が解決しました。


-2

9つの回答のどれも役に立たなかったため、バグを報告するためにAppleに送信できる新しいプロジェクトを作成しようとしました。問題を再現できないことに驚いた。ビルド設定を確認したところ、同等でした。どうやらこれはある種のバグです。

他に何も解決しない場合は、新しいプロジェクトを作成し、現在のプロジェクトから少なくともいくつかのObjective C&Swiftクラスをインポートして、フレームワーク関連のビルド設定を新しいプロジェクトのデフォルト値と比較し、最終的にすべてのファイルを新しいプロジェクト。


-2

私は一日のためにそれに取り組んできましたが、それの価値があるit.Iは、すべての方法を試してみましたここで、私はそれを解決しませんでした。新しいプロジェクト、実験を作成し、ユーザーヘッダーの検索パス$ {SRCROOT}再帰的に設定されていることを発見し、それを$ {SRCROOT}非再帰的に変更し、ブリッジヘッダーパスを変更しました(例 #import "SVProgressHUD.h" -> #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h")、エラーはなくなりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.