iOS-构建失败,CocoaPods无法找到头文件


190

我有一个使用CocoaPods的iOS项目。一切工作都顺利进行,直到另一个开发人员开始从事同一项目。他做了一些更改(据我所知仅对代码进行了更改),并在存储库中创建了一个新分支。我已经签出他的分支并尝试构建它,但出现错误:找不到ASLogger / ASLogger.h文件。

即使删除整个项目并重新制作副本并使用“ pods install”。构建失败仍然存在。您知道问题可能在哪里吗?如果您需要更多信息,请询问。


3
我没有使用双引号样式,而是尝试了#import“ ASLogger.h”,#import <ASLogger.h>并为我工作了:)
Baig

2
仅供参考:Baigs简单的答案解决了我的问题,没有找到标题。
Pedroinpeace 2014年

Answers:


205

更新资料

确保您的目标Podfile包含link_with缺少配置文件的目标。否则,Cocoapods只会默认设置第一个目标。例如

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

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

------结束更新


注意:请注意,您必须在Project-> Info-> Configurations中查找以下步骤。


我有类似的症状,发现该pods.xcconfig文件未包含在target我尝试构建的特定文件中。其他一些建议的解决方案也对我有用,但是这个解决方案似乎解决了部分潜在问题。

Pods.xcconfig不起作用

一种简单的解决方案是为没有一组目标的目标更改配置文件集。

Pods.xcconfig工作


4
对我而言,“ pods install”仅将其设置在第一个目标上。按照此答案的建议进行操作可以解决我的问题。
Troy

1
最后一个解决方案:仅将Pod添加到第一个目标,而不添加到各种测试发布目标(alpha,beta,候选发布)!许多thanx!
JOM

使用link_with指定其他目标对我有用。非常感谢。我刚刚花了几个小时。
Dylan Hand

这对我有用!我克隆了一个现有项目,然后更新了Pod。所以我想更新Pod翻转了一些设置,或者previos开发人员正在使用xcode 5或其他东西(我在xcode 6上),谢谢!!!
温室

4
link_with在Cocoapods 1.0或更高版本中不受支持。
Vive

90

更新资料

自从我的原始答案以来,我已经对此进行了更新,得到了好评,所以我希望这会有所帮助。如果可以的话,希望它能使我重新投票。

如果未导入标头,则您可能在中存在冲突HEADER_SEARCH_PATHS。尝试$(inherited)在“构建设置”中添加到标题搜索路径,以确保它从CocoaPods中提取.xcconfig文件中包含的所有搜索路径。

这将有助于解决任何冲突,并正确导入您的源。


2
我遇到了一个问题:在应用程序中未检测到Pod文件,并且在删除或移动.svn子目录时发生了“ svn文件夹阻塞”问题:解决方案:请按照以下步骤操作:1.仅从app卸载CocoaPods。xcodeproj文件存在(请参阅:stackoverflow.com/questions/16427421/…)2.再次安装了Podfile(请参阅:raywenderlich.com/12139/introduction-to-cocoapods)3.在目标“ HEADER_SEARCH_PATHS”中添加了$(继承)标志,应用的“ OTHER_LDFLAGS”。
Alphonse R. Dsouza 2014年

1
您可能还需要向FRAMEWORK_SEARCH_PATHS设置中添加$(继承)。
乔治,

1
@ AlphonseR.Dsouza您的解决方案为我工作-向OTHER_LDFLAGS添加$(继承),谢谢!
Nika Kasradze 2015年

3
应该在项目设置或目标设置中添加$(继承)?
2015年

我有类似的问题,我以前没有使用豆荚的经验。在Podfile中,我也没有提到2个目标。是的,我当时有两个目标。一旦我提到第二个目标并更新了Pod文件,终端就会发出一些警告,类似于您建议添加$ inherrited的警告。我做到了,而且效果很好。
贾斯梅特(Jasmeet)

78

1.检查

构建设置->搜索路径->用户标题搜索路径->

  • “ $ {PODS_ROOT} /”递归

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明 在此处输入图片说明

2.检查导入样式(KEY POINT)(如果podfile已设置)

use_frameworks!

在您看来File-Bridging-Header.h,格式化程序应该像这样

#import "MBProgressHUD.h"

否则应该在下面

#import <MBProgressHUD.h>

3.那一定行得通!相信我


1
大多数错误消失了。但是,当依赖项具有以下导入语句时,我该怎么办:#import <EARestrictedScrollView / EARestrictedScrollView.h>。然后,编译器告诉我改写#import EARestrictedScrollView.h。但是我无法修改我的广告连播。
生产编码器

62

头文件,您将成为我的死...

最终通过添加(包括引号)使其生效

"${PODS_ROOT}/BuildHeaders"

到“用户标题搜索路径”条目,然后选中“递归”。


6
请注意,引号在这里非常重要。没有他们,我无法使它发挥作用。
DiscDev 2013年

5
我已经有+1了$(inherited)(没有工作),但是添加了这个功能对我有用。
iwasrobbed

没有得到您想要说的话。:/请您详细说明一下?
rohan-patel 2014年

另一个方便的技巧是删除工作区和pods目录,并重新安装pod。通常这是一个更完整的解决方案。
averydev 2014年

1
最终,这有助于AppCode正确找到所有头文件导入。没有它,它只能在xCode中工作,而不能在AppCode中工作。谢谢!
sarsonj'1

52

我发现${PODS_HEADERS_SEARCH_PATHS}缺少它,并且在我的开发git分支中未定义它,因此我"$(SRCROOT)/Pods/Headers/"以递归方式添加 了标题搜索路径

对我来说没关系


这就是我的答案,我更新了cocoapods,我认为这使PODS_HEADERS_SEARCH_PATHS消失了。我的解决方案与此类似,但是我使用了“ $(PODS_ROOT)/ Headers”
Andrew Aitken

其他答案对我不起作用,但是这个答案对我有用。我会注意到我没有包括“,所以我的标题搜索路径如下所示$(SRCROOT)/Pods/Headers
Blakedallen 2015年

@Hlung嗨,我必须在哪里添加$(SRCROOT)/ Pods / Headers /?赞赏
VAAA

1
@VAAA目标>构建设置>标头搜索路径
Hlung

我认为这是正确的答案,应该接受什么,您认为@Filip Majernik
Ratul Sharker '18

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

非常感谢你!第一个条目为我解决了它。只能将Pods设置为我们项目中的第一个目标。这样编译就可以了,但是另一个目标却没有。因此,我也向其中添加了Pods配置,现在问题已经解决了。
mwidmann 2013年

我在配置中没有看到“豆荚” ..这是否意味着我的符号链接已损坏?
亚当斯基2014年

35

这对我有用:

转到“目标”>“构建设置”选项卡,然后找到“用户标题搜索路径”设置。

将此设置为“ $(BUILT_PRODUCTS_DIR)”,然后选中“递归”复选框。

现在,构建目标将搜索工作空间的共享构建目录以找到可链接的头文件。

====

更新

最近我遇到了类似(尽管略有不同)的问题。原来Xcode找不到Pod,因为我打开的是.xcodeproj文件而不是.xcworkspace文件。将来可能会帮助他人。


1
这对我有用,但仅在退出Xcode,运行pod install并重新打开后才可以。
肯·哈格蒂

@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

是的,这也对我有用!无需大量清理和删除派生数据就可以解决此问题,但这是可行的。
PostCodeism

10

维基对如何解决这一问题的建议:

如果Xcode找不到依赖项的标头:

检查Pod头文件中Pod头文件是否正确符号链接,并且您没有覆盖HEADER_SEARCH_PATHS(请参阅#1)。如果Xcode仍然找不到它们,那么作为最后的选择,您可以添加导入内容,例如#import“ Pods / SSZipArchive.h”。


13
有人可以详细说明如何“检查Pod头文件在Pod / Header中是否正确符号链接”吗?
戴夫·柯林斯

请参阅上面的答案,了解如何检查符号链接
brainray

在修改导入语句之前,还请参阅Brainray关于配置的答案。
Rog 2013年

是的,有些吊舱链接到无效的目录,例如$(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h,还有一个额外的ios文件夹...
Dong Ma

9

我是团队中唯一遇到相同问题的开发人员,它对每个人都适用,因此我意识到这必须是我的环境。我git clone在另一个目录中尝试了同一个项目,并且完美地编译了它,然后我意识到它必须是Xcode将东西存放在我的项目路径中,“某处”是DerivedData文件夹,只需将其删除并做一个干净的构建即可项目,它为我工作。

您可以通过以下方法获取路径,甚至在finder中打开文件夹:

Xcode中 - > 首选项 - > 位置- > ** DerivedData


1
就我而言,问题是在更新Pod之后出现的,所以我认为应在cocoapods中搜索问题。我在这里没有运气就尝试了所有解决方案,最后只是清除了DerivedData-它有帮助!谢谢
Varrry '16

3

我将在“构建”设置中更新以下内容,但没有收到任何错误。在更新您的cocoapods时要检查这些。

构建设置

启用位码-是(如果您使用位码)

宏预处理器-$(继承)

其他链接器标志-objc,-lc ++,$(继承)

仅构建架构

调试-是

Relese-否

搜索路径

框架搜索路径-$(继承)$(PROJECT_DIR)

图书馆搜索路径-$(继承)

标头搜索路径-$(继承)


2

如果在“ Pod安装 ”或“ Pod更新 ” 之后出现构建错误,则可能是您的一个Pod已使用XCode 6.3构建,而您仍在使用版本。

就我而言,我必须将OSX从特立独行的系统更新为优胜美地系统,以使用Xcode 6.3并解决问题


嗨@omaty,这是唯一的解决方案吗?我目前正在使用Xcode 6.2在Mavericks上运行
goelv

1
您好@goelv在我的情况下,这是我找到的唯一解决方案。在Mavericks和Xcode 6.2下,我就像你一样。
Omaty 2015年

我想即使我也有同样的问题。我的队友在优胜美地拥有Xcode 6.3,对他来说效果很好,而我正在努力摆脱Xcode 6.2中Mavericks中未发现的标题。
Sagar S. Kadookkunnan 2015年

1
后续:我也将机器升级到Yosemite和Xcode 6.3.1,现在我可以进行构建了,没有任何问题。
Sagar S. Kadookkunnan 2015年

1

对我来说,问题出在“其他链接器”标志值中。出于某种原因,我在诸如这样的标志中没有引号-l"xml2" -l"Pods-MBProgressHUD"


我在使用Localytics的Cocoapod时遇到了问题。在下面,Other Linker Flags我找到了两个条目:-|Localytics|-PodsLocalytics。我删除了这些内容,然后进行了编译。
克里斯

1

我不得不从git hub下载zip并将丢失的文件拖到Pod /中相应路径的Finder中...


1

对我有用的是选择Pods项目,在Pod项目的目标目录中查找并选择缺少标头的目标框架,然后在目标的构建设置中的“体系结构”下将“仅构建活动体系结构”设置为“否”。


1

我遇到了同样的问题,但是上述解决方案无法正常工作。我已通过执行以下操作修复了该问题:

  1. 删除整个项目
  2. 运行git clone项目并运行bundle exec pod install
  3. cd peoject并运行远程添加上游your-remote-rep-add
  4. git从上游获取
  5. git checkout主
  6. git merge上游/主

然后工作。


1

对我而言,固定的Pods项目的iOS部署目标低于项目本身。与项目相同后,便可以找到头文件。


兄弟!你应该得到1000个投票。我坚持了4个小时,您的解决方案帮助了我。非常感谢兄弟,非常感谢!
warzone_fz

0

我当时使用的是Xcode 5.0的GM种子,但无法获得所有这些答案。我尝试了关于SO标头导入cocoapods的多个不同问题的SO的每个答案。

最终,我找到了一个适用于我的解决方案:我通过Mac AppStore(安装在GM种子之上)升级到Xcode 5.0,现在头文件导入已按预期工作。

我的系统上仍然有Xcode 5的beta版,我也删除了它。也许这是两者的结合,但是希望这对其他人有帮助。


0

这就是我的答案,我更新了cocoapods,我认为这使PODS_HEADERS_SEARCH_PATHS消失了。我的解决方案与此类似,但是我使用了“ $(PODS_ROOT)/ Headers” – Andrew Aitken

非常感谢您的回答。我很难找到解决问题的方法。非常感谢你。


0

没有一个答案对我有帮助(我的吊舱已与所有目标链接,正确构建了配置设置,正确设置了搜索路径“ $(继承)”,等等)。

使用标准的install / update命令将cocoapods更新为最新的调试版本后,问题自行消失了:

   gem install cocoapods --pre

要么:

   sudo gem install cocoapods --pre

(如果在安装过程中使用了sudo)。

一定是cocoapods的bug。


0

一种简单的解决方法是:1.删除Pods文件夹和Podfile.lock文件。但是不要删除Podfile2。在项目根文件夹中运行以下命令:

pod install

我解决了这个问题。
dobiho

0

这是另一个原因:所有标头路径似乎都很好,但是在尝试读取Pod标头的预编译(.pch)文件中仍然存在错误

(即#import <CocoaLumberjack / CocoaLumberjack.h>)。

在查看原始构建输出时,我终于注意到该错误破坏了我们的Watch OS扩展目标,而不是我们正在构建的主要目标,因为我们还将.pch预编译的头文件导入了Watch OS目标,并且失败了那里。确保您随附的Watch OS目标设置不要尝试导入.pch文件(特别是如果您像我一样从主目标设置中设置了该导入!)


0

我发现将库作为Pod安装直接包含在内对动态库有帮助。例如,对于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删除Pod文件等,我发现清除缓存非常有用。

对于本机,我运行

    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. 首先建立Pods项目
  4. 建立项目


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.