iOS-CocoaPodsがビルドに失敗し、ヘッダーファイルが見つからない


190

CocoaPodsを使用するiOSプロジェクトがあります。他の開発者が同じプロジェクトに取り組み始めるまで、すべてが順調に機能していました。彼はいくつかの変更を加え(私が知る限りコードにのみ)、リポジトリに新しいブランチを作成しました。私は彼のブランチをチェックアウトしてビルドしようとしましたが、エラーが発生しました:ASLogger / ASLogger.hファイルが見つかりません。

プロジェクト全体を削除して新しいコピーを作成し、「ポッドインストール」を使用しても、ビルドの失敗はまだ残っています。問題が発生する可能性のある場所について何か考えがありますか?さらに情報が必要な場合は、お問い合わせください。


3
二重引用符スタイルを使用する代わりに、#import "ASLogger.h"を使用しました。#import <ASLogger.h>そして、それは私のために機能しました:)
Baig

2
参考までに:Baigsの簡単な答えは、ヘッダーが見つからないという問題を解決しました。
ペドロインピース2014

回答:


205

更新

設定ファイルがないターゲットのPodfileインクルードを確認してくださいlink_with。Cocoapods は、デフォルトでは最初のターゲットのみを設定します。例えば

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------更新の終了


注:以下の手順については、[プロジェクト]-> [情報]-> [構成]を確認する必要があることに注意してください。


同様の症状があり、作成しようとしpods.xcconfigた特定のファイルにファイルが含まれていないことがわかりましたtarget。他の提案された解決策のいくつかは私にとってはうまくいきましたが、これは根本的な問題の一部に対処しているようです。

Pods.xcconfigが機能しない

単純な解決策は、1つのセットを持っていなかったターゲットの構成ファイルを変更することでした。

Pods.xcconfigが機能している


4
私にとっては、「ポッドインストール」はこれを最初のターゲットにのみ設定します。この回答で提案されているように行うと、問題が解決しました。
Troy

1
最後に解決策:ポッドは、さまざまなテストリリースターゲット(アルファ、ベータ、リリース候補)ではなく、最初のターゲットにのみ追加されました!ありがとうございます!
JOM 2013年

を使用link_withして他のターゲットを指定すると、うまくいきました。どうもありがとう。私はこれに数時間を費やしました。
ディランハンド

これは私のために働いた!既存のプロジェクトを複製し、ポッドを更新しました。だから私は更新ポッドがいくつかの設定を反転したと思います、または以前の開発者はxcode 5または何か(私はxcode 6にいます)を使用していました、ありがとう!!!
温室

4
link_withCocoapods 1.0以降ではサポートされていません。
2016年

90

更新

私は最初の回答以来これを更新しており、それが反対票を獲得したので、これが役に立てば幸いです。もしそうなら、うまくいけば、私の投票を取り戻すでしょう。

ヘッダーがインポートされていない場合は、で競合が発生している可能性がありますHEADER_SEARCH_PATHS$(inherited)ビルド設定のヘッダー検索パスに追加してみて、CocoaPodsから.xcconfigファイルに含まれている検索パスを確実に取得するようにしてください。

これにより、競合が解消され、ソースが正しくインポートされます。


2
私は問題に直面していました:アプリでPodファイルが検出されず、.svnサブディレクトリを削除または移動したときに発生する「svn obstructed folder issue」:解決策:次の手順で:1.アプリからCocoaPodsのみをアンインストールします。xcodeprojファイルが存在します(参照:stackoverflow.com/questions/16427421/…)2. podfilesを再度インストールしました(参照:raywenderlich.com/12139/introduction-to-cocoapods)3.ターゲット 'HEADER_SEARCH_PATHS'に$(inherited)フラグを追加し、アプリの「OTHER_LDFLAGS」。
アルフォンスR.ドゥーザ2014

1
$(inherited)をFRAMEWORK_SEARCH_PATHS設定に追加する必要がある場合もあります。
ジョージ

1
@ AlphonseR.Dsouzaあなたの解決策は私にとってうまくいきました-OTHER_LDFLAGSに$(inherited)を追加しました。
Nika Kasradze、2015

3
$(継承)をプロジェクト設定またはターゲット設定に追加する必要がありますか?
2015

同様の問題があり、ポッドを使った経験はありませんでした。Podfileでも、2つのターゲットについては言及しませんでした。はい、2つのターゲットがありました。2番目のターゲットについて言及し、Podファイルを更新すると、ターミナルは$ inherritedを追加するという提案と同様の警告を発しました。私はそうしました、そしてそれは完全に働きました。
Jasmeet 2016年

78

1.確認

ビルド設定->検索パス->ユーザーヘッダー検索パス->

  • "$ {PODS_ROOT} /"再帰的

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

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

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

2.あなたpodfileが設定している場合は、インポートスタイル(キーポイント)を確認してください

use_frameworks!

あなたのFile-Bridging-Header.h場合、フォーマッタはこのようにする必要があります

#import "MBProgressHUD.h"

さもなければ

#import <MBProgressHUD.h>

3.それは仕事でなければなりません!私を信じて


1
ほとんどのエラーは消えます。ただし、依存関係に#import <EARestrictedScrollView / EARestrictedScrollView.h>のようなインポート文がある場合、どうすればよいでしょうか。次に、コンパイラーは代わりに#import EARestrictedScrollView.hを書き込むように指示します。しかし、ポッドを変更することはできません。
productioncoder

62

ヘッダーファイル、あなたは私の死でしょう...

最後に(引用符を含む)追加することで機能しました

"${PODS_ROOT}/BuildHeaders"

ユーザーヘッダーの検索パスエントリに移動し、「再帰的」をチェックします。


6
ここでは引用符が非常に重要であることに注意してください。それらがなければ、私はそれを機能させることができませんでした。
DiscDev 2013

5
+1は既にありましたが$(inherited)(機能しませんでした)、これを追加するとうまくいきました。
iwasrobbされた2013

あなたが言おうとしていることを理解できませんでした。:/詳細について教えてください。
rohan-patel 2014年

もう1つの便利なトリックは、ワークスペースとポッドディレクトリ、およびポッドインストールを新しく消去することです。これは通常、より完全なソリューションです。
averydev 2014

1
これは最終的にAppCodeがすべてのヘッダーファイルインポートを正しく見つけるのに役立ちました。これがなければ、xCodeでは機能しましたが、AppCodeでは機能しませんでした。ありがとう!
sarsonj

52

${PODS_HEADERS_SEARCH_PATHS}は見つからず、それは私の開発gitブランチで定義されていないので"$(SRCROOT)/Pods/Headers/"、再帰的なヘッダー検索パスに追加しました

それでいい


これが私の答えでした。ココアポッドを更新しました。PODS_HEADERS_SEARCH_PATHSがなくなったと思います。私の解決策はこれに似ていましたが、「$(PODS_ROOT)/ Headers」を使用しました
Andrew Aitken

他の答えはうまくいきませんでしたが、これはうまくいきました。「」を含めなかったので、ヘッダー検索パスは次のようになります$(SRCROOT)/Pods/Headers
Blakedallen

@Hlungこんにちは、$(SRCROOT)/ Pods / Headers /をどこに追加する必要がありますか?感謝
VAAA

1
@VAAAターゲット>ビルド設定>ヘッダー検索パス
Hlung

これが正しい答えだと思います。何を受け入れるべきか、どう思いますか@Filip Majernik
Ratul Sharker

35

他の両方の答えはここでは役に立ちませんでした。私はそれを修正する可能性のある他の2つの問題を見つけました:

編集 この方法でシンボリックリンクをチェックできます。拡張子を付けずに「check」という名前のテキストファイルを作成します。これらの行をそれにコピーします:

file=/Users/youUserName/XcodeProjectName/Pods/BuildHeaders/SVProgressHUD/SVProgressHUD.h
if [[ ! -e $file &&  -L $file ]]; then
  echo "$file symlink is  broken!"
else
  echo "symlink works"
fi

次に、ターミナルに移動し、チェックファイルが置かれているフォルダーに移動して、次のように入力します。

bash check

どうもありがとうございました!最初のエントリーで解決しました。ポッドは、プロジェクトの最初のターゲットのみに設定されました。これは問題なくコンパイルされましたが、他のターゲットはそうではありませんでした。だから私はそれにポッド設定も追加しました、そして今問題はなくなりました。
mwidmann 2013年

設定に「ポッド」が表示されません。これは、シンボリックリンクが壊れていることを意味しますか?
アダムスキー2014年

35

これが私のために働いたものです:

[ターゲット]> [ビルド設定]タブに移動し、[ユーザーヘッダーの検索パス]設定を見つけます。

これを「$(BUILT_PRODUCTS_DIR)」に設定し、「再帰的」チェックボックスをオンにします。

ビルドされたターゲットは、ワークスペースの共有ビルドディレクトリを検索して、リンク可能なヘッダーファイルを見つけます。

====

更新

最近、似たような問題(少し異なります)が発生しました。.xcodeprojファイルではなくファイルを開いたため、Xcodeがポッドを見つけられないことがわかりました.xcworkspace。将来的に他の人を助けるかもしれません。


1
これは私にとってはうまくいきましたが、Xcodeを終了してを実行しpod install、再度開いた後にのみです。
ケンM.ハガティ2015年

@Snowcrashどのターゲット?ポッドターゲットまたはメインプロジェクトターゲット?
VAAA

19

上記のいずれもuse_frameworks!うまくいかず、Podfileでに切り替えたためにこのエラーが発生した場合は、以下をお読みください。

上記のすべての解決策を試してみましたが、特定のケースでは検索ヘッダーパスに関するものではないことがわかりました。use_frameworks!Podfileに切り替えると、ブリッジングヘッダーにフレームワークを含める必要がなくなり、実際、Xcodeは非常に役に立たない「ヘッダーが見つかりません」というエラーをスローします。

必要なのは、ブリッジヘッダーファイルからすべてのインポートを削除し、代わりにimport Module、Swiftフレームワークの場合と同様に、必要に応じて個々のSwiftファイルでSwift を使用することです。

さらに、Obj-Cクラスでフレームワークヘッダーのいずれかを使用している場合(私の場合、FBSDKを使用した便利なクラスがあります)、ローカルインポートからグローバルインポートに変更する必要があります(つまり、に変更#import "Module.h"します#import <Module/Module.h>。フレームワーク名を入力し始めたときにあなたのために<AFNetworking/AFHTTPRequestOperationManager.h>

編集:私はそれ以来、@import Moduleより安全なアンブレラファイルを使用することを学びました。


16

Cocoapodsスタイルをインポートしてみましたか?

#import <ASLogger.h>

サイトの情報は本当に明確ではありません、私はプルリクエストを提出しました:

https://github.com/CocoaPods/cocoapods.org/pull/34

更新:彼らは私の要求を引っ張った:)


二重引用符スタイルを使用する代わりに、#import "ASLogger.h"を使用しました。#import <ASLogger.h>そして、それは私のために機能しました:)
Baig

私は以前にこれを試しましたが、うまくいきましたが、うまくいかないときは別の問題が発生することがあります。少なくとも一部の状況では、<Podname / Filename.h>形式を使用することもできます。
funroll 2014年

はい、これも私にとってうまくいきました!派生したデータをクリーニングおよび削除してもそれは解決されませんでしたが、これはうまくいきました。
PostCodeism

10

ウィキは、この問題を解決する方法についてアドバイスを与えます:

Xcodeが依存関係のヘッダーを見つけられない場合:

ポッドヘッダーファイルがポッド/ヘッダーで正しくシンボリックリンクされており、HEADER_SEARCH_PATHSを上書きしていないかどうかを確認します(#1を参照)。それでもXcodeがそれらを見つけられない場合は、最後の手段として、#import "Pods / SSZipArchive.h"などのインポートを先頭に追加できます。


13
誰かが「ポッドヘッダーファイルがポッド/ヘッダーで正しくシンボリックリンクされているかどうかを確認する」方法を正確に詳しく説明できますか?
Dave Collins

シンボリックリンクをチェックする方法については、上記の私の回答を参照してください
ブレインレイ

importステートメントを壊す前に、構成に関するブレインレイの回答もご覧ください。
Rog

はい、一部のポッドが無効なディレクトリにリンクしています。$(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.hたとえば、iosフォルダーが余分にあります
Dong Ma

9

私がチームでこの同じ問題を経験した唯一の開発者でした。それは誰にとっても完璧に機能したので、それが私の環境でなければならないことに気付きました。私git cloneは別のディレクトリで同じプロジェクトを試してみましたが、完全にコンパイルされました。それから、プロジェクトパスのどこかにXcodeキャッシングが必要であることがわかりました。「どこか」はDerivedDataフォルダーであり、それを削除してクリーンビルドを行いますプロジェクト、それは私のために働いた。

次のようにして、パスを取得し、Finderでフォルダを開くこともできます。

Xcodeの - > 設定 - > 拠点- > ** DerivedData


1
私の場合、ポッドを更新した後に問題が発生したので、ココアポッドで問題を検索する必要があると思いました。私はここですべてのソリューションを運なしで試しましたが、ついにDerivedDataをクリアしました-そしてそれは助けになりました!ありがとう
Varrry

3

ビルド設定で以下を更新しますが、エラーは発生しませんでした。ココアポッドを更新するときに、これらを確認する必要があります。

ビルド設定

ビットコードを有効にする-はい(ビットコードを使用している場合)

マクロプリプロセッサ-$(継承)

その他のリンカーフラグ-objc、-lc ++、$(inherited)

ビルドアーキテクチャのみ

デバッグ-はい

リリース-いいえ

検索パス

フレームワーク検索パス-$(継承)$(PROJECT_DIR)

ライブラリ検索パス-$(継承)

ヘッダー検索パス-$(継承)


2

ポッドインストール」または「ポッドアップデート」の後にビルドエラーが発生した場合、以前のバージョンを使用しているときに、ポッドの1つがXCode 6.3ビルドされた可能性があります。

私の場合、Xcode 6.3を使用して問題を解決するには、OSXをmavericksからYosemiteに更新する必要がありました。


こんにちは@omaty、これが唯一の解決策ですか?私は現在、Xcode 6.2のMavericksで実行しています
goelv

1
こんにちは@goelv私の場合、それが私が見つけた唯一の解決策でした。私はマーベリックスとXcode 6.2の下であなたのようでした。
Omaty

私も同じ問題を抱えていると思います。私のチームメイトはヨセミテにXcode 6.3を持っていますが、彼にとってはうまく機能しますが、Xcode 6.2のMavericksでヘッダーが見つからない問題を取り除くのに苦労しています。
Sagar S. Kadookkunnan-2015

1
フォローアップ:マシンをYosemiteとXcode 6.3.1にアップグレードしました。問題なくビルドできました。
Sagar S. Kadookkunnan

1

私にとっての問題は、他のリンカーフラグの値にありました。何らかの理由で、のようなフラグに引用符がありませんでした-l"xml2" -l"Pods-MBProgressHUD"


LocalyticsのCocoapodに問題がありました。下Other Linker Flagsに2つのエントリが見つかりました:-|Localytics|-PodsLocalytics。それらを削除し、コンパイルすることができました。
Chris

1

私はgitハブからzipをダウンロードして、不足しているファイルをFinderのポッドの対応するパスにドラッグする必要がありました...


1

私にとってうまくいったのは、ポッドプロジェクトを選択し、ポッドプロジェクトのターゲットディレクトリでヘッダーが欠落しているターゲットフレームワークを見つけて選択し、ターゲットのビルド設定の[アーキテクチャ]で[アクティブアーキテクチャのみビルド]を[いいえ]に設定することでした。


1

私は同じ問題を抱えていますが、上記の解決策は機能しません。私はこれを行うことでそれを修正しました:

  1. プロジェクト全体を削除する
  2. プロジェクトのgit cloneを実行し、バンドルexec pod installを実行します
  3. peojectをcdして、リモート追加を実行しますyour-remote-rep-add
  4. git fetchアップストリーム
  5. gitチェックアウトマスター
  6. git mergeアップストリーム/マスター

そして、それは機能します。


1

私にとって、PodsプロジェクトのiOS展開ターゲットを修正したのは、プロジェクト自体よりも低かったです。プロジェクトと同じにすると、ヘッダーファイルを見つけることができました。


仲間!あなたは1000の賛成票に値します。私はこれに4時間行き詰まり、あなたの解決策が私を助けてくれました。たくさんありがとうたくさんありがとう!
warzone_fz

0

私はXcode 5.0のGMシードに参加しており、これらの答えをどれも機能させることができませんでした。私は、ココアポッドを使用したヘッダーのインポートに関する複数の異なる質問に対して、SOのすべての答えを試しました。

最後に私は私のために働いた解決策を見つけました:Mac AppStore(GMシードの上にインストールされています)を介してXcode 5.0にアップグレードし、ヘッダーのインポートが期待通りに機能しています。

私のシステムにはまだXcode 5のベータ版もあり、それも削除しました。多分それは2つのことの組み合わせだったかもしれませんが、うまくいけばこれは他の誰かを助けるでしょう。


0

これが私の答えでした。ココアポッドを更新しました。PODS_HEADERS_SEARCH_PATHSがなくなったと思います。私の解決策はこれに似ていましたが、「$(PODS_ROOT)/ Headers」を使用しました– Andrew Aitken

この回答をありがとうございました。問題を解決する方法を探すのに苦労しました。どうもありがとうございました。


0

答えはどれも役に立ちませんでした(ポッドをすべてのターゲットにリンクさせ、構成を適切にセットアップし、相関セットの検索パス "$(inherited)"などを設定しました)。

標準のinstall / updateコマンドを使用して、cocoapodsを最新のデバッグバージョンに更新した後、問題は自動的に解消しました。

   gem install cocoapods --pre

または:

   sudo gem install cocoapods --pre

(インストール時にsudoが使用された場合)。

cocoapodsのバグだったに違いありません。


0

簡単な回避策の1つは次のとおりです。1. PodsフォルダーとPodfile.lockファイルを削除します。ただし、Podfile 2は削除しないでください。プロジェクトのルートフォルダーで次のコマンドを実行します。

pod install

この解決策で問題を修正しました。
dobiho

0

別の理由は次のとおりです。すべてのヘッダーパスに問題はないようですが、プリコンパイル済み(.pch)ファイルでポッドヘッダーを読み取ろうとしてエラーが発生しました。

(つまり、#import <CocoaLumberjack / CocoaLumberjack.h>)。

未加工のビルド出力を見ると、.pchプリコンパイル済みヘッダーファイルもWatch OSターゲットにインポートしていて、失敗していたため、エラーが、作成中のメインターゲットではなく、Watch OS拡張ターゲットを壊していることがわかりました。そこ。付随するWatch OSターゲット設定が.pchファイルをインポートしようとしないことを確認してください(特に、私が行ったように、マスターターゲット設定からインポートを設定した場合!)


0

ライブラリをポッドインストールとして含めると、動的ライブラリに直接役立つことがわかりました。たとえば、Firebaseの場合:

pod 'RNFirebase', :path => 'path/to/node_modules/react-native-firebase/ios'

またはASLoggerの場合:

pod 'ASLogger', :path => 'path/to/node_modules/aslogger/ios' // path to header files

変更またはハードコーディングHEADER_SEARCH_PATHSは私を助けませんでした。エラーが再発する場合は、rm -rf node_modules、ポッドファイルなどを削除するません。キャッシュをクリアすると便利です。

反応ネイティブの場合、私は実行します

    rm -rf $TMPDIR/react-native-packager-cache-*
    rm -rf $TMPDIR/metro-bundler-cache-*
    rm -rf $TMPDIR/metro-* 
    rm -rf $TMPDIR/react-* 
    rm -rf $TMPDIR/haste-*
    rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
    npm start -- --reset-cache

Xcodeの場合、フォルダを削除します ~/Library/Developer/Xcode/DerivedData


0

究極の解決策は、にアクセスしBuild settings -> Search Path -> User Header Search Pathsてライブラリパスを見つけ、Finderで確認することです。インポートパスを含むすべてのパスが存在することを確認してください。

私にとって、パスはチュートリアルよりも短かった。チュートリアルではのようなものでしたが#import <SDK/path/to/sdk/File.h>#import <SDK/File.h>


-1

ここに他の解決策があります、

  1. Xcodeを終了
  2. Xcodeを開いてプロジェクトをクリーンアップ
  3. 最初にポッドプロジェクトをビルドする
  4. プロジェクトを構築する


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