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

时间:2012-08-17 09:08:03

标签: objective-c ios cocoa build cocoapods

我有一个使用CocoaPods的iOS项目。一切都在顺利进行,直到另一位开发人员开始在同一个项目上工作。他做了一些更改(据我所知只对代码)并在回购中创建了一个新的分支。我检查了他的分支并尝试构建它,但是我收到一个错误:找不到ASLogger / ASLogger.h文件。

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

28 个答案:

答案 0 :(得分:204)

更新

确保您的Podfile包含link_with目标丢失配置文件。 Cocoapods只有sets the first target by default。 e.g。

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

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

------结束更新


注意:请注意,您必须查看项目 - >信息 - >配置以了解以下步骤。


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

Pods.xcconfig not working

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

Pods.xcconfig working

答案 1 :(得分:88)

更新

我已经更新了这个,因为我的原始答案,得到了downvote,所以我希望这有帮助。如果确实如此,希望它会得到我的投票。

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

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

答案 2 :(得分:75)

1.检查

  

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

  • “$ {PODS_ROOT} /”递归

enter image description here

enter image description here

enter image description here enter image description here

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

<强> use_frameworks!

在你的File-Bridging-Header.h中,格式化程序应该喜欢这个

<强> #import "MBProgressHUD.h"

否则应低于

<强> #import <MBProgressHUD.h>

3.那一定要工作!相信我

答案 3 :(得分:57)

标题文件,你将成为我的死...

最后通过添加(包括引号)

使其工作
"${PODS_ROOT}/BuildHeaders"

到用户标题搜索路径条目,并检查'​​递归'。

答案 4 :(得分:52)

我发现${PODS_HEADERS_SEARCH_PATHS}缺失了,并且没有在我的开发git分支中定义,所以我为递归的标题搜索路径添加了"$(SRCROOT)/Pods/Headers/"

对我来说没关系

答案 5 :(得分:35)

其他两个答案在这里没有帮助。我发现了另外两个可能解决它的问题:

修改 您可以通过以下方式检查符号链接:创建名为“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

答案 6 :(得分:35)

这对我有用:

转到目标&gt; “构建设置”选项卡,找到“用户标题搜索路径”设置。

将其设置为“$(BUILT_PRODUCTS_DIR)”并选中“递归”复选框。

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

====

更新

我最近遇到了类似的问题(虽然略有不同)。事实证明,Xcode找不到Pod,因为我打开了.xcodeproj文件而不是.xcworkspace文件。将来可能会帮助别人。

答案 7 :(得分:18)

如果以上所有内容都不适用于您并且您因为刚刚切换到Podfile中的use_frameworks!而发现此错误,请继续阅读:

在我了解到在我的特定情况下根本没有关于搜索标题路径之前,我尝试了上面的所有解决方案以及更多解决方案;当你在你的Podfile中切换到use_frameworks!时,你不再需要在你的桥接头中包含框架,事实上Xcode会抛出非常无用的#34;无法找到标题&#34;错误。

您需要做的是从桥接头文件中删除所有导入,而是根据需要在各个Swift文件中使用Swift import Module,就像使用Swift框架一样。

如果您正在使用Obj-C类中的任何框架头文件(在我的情况下,我们有一个使用FBSDK的便利类),您需要将其从本地导入更改为全局导入(这意味着更改{{ 1}}到#import "Module.h",当您开始输入框架名称时,它应自动完成。在我的情况下,它是#import <Module/Module.h>)。

编辑:我已经知道做<AFNetworking/AFHTTPRequestOperationManager.h>使用更安全的伞文件了。

答案 8 :(得分:16)

您是否尝试导入Cocoapods风格?

#import <ASLogger.h>

网站上的信息不是很清楚,我提交了拉取请求:

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

更新:他们提出了我的请求:)

答案 9 :(得分:10)

wiki提供了有关如何解决此问题的建议:

  

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

     

检查Pods / Headers中的pod头文件是否正确符号链接   而且你没有改写HEADER_SEARCH_PATHS(见#1)。如果是Xcode   仍然找不到它们,作为最后的手段,你可以添加你的进口,   例如#import“Pods / SSZipArchive.h”。

答案 10 :(得分:9)

我是团队中唯一遇到同样问题的开发人员,它对每个人都很有效,所以我意识到它必须是我的环境。我在另一个目录中尝试了同一项目的git clone并且编译得很完美,然后我意识到它必须是我的项目路径的Xcode缓存内容,“某处”是DerivedData文件夹,只需删除它并执行一个干净的项目构建,它对我有用。

您可以通过转到:

获取路径,甚至在finder中打开文件夹

Xcode - &gt; 偏好设置 - &gt; 地点 - &gt; ** DerivedData

答案 11 :(得分:2)

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

构建设置

  

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

     

宏预处理器 - $(继承)

     

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

仅构建架构

  

调试 - 是

     

Relese - 否

搜索路径

  

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

     

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

     

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

答案 12 :(得分:2)

如果您在“广告连播安装”或“广告连播更新”后出现构建错误,则可能是您的某个广告连播已构建为 XCode 6.3 ,当您仍在使用以前的版本时。

在我的情况下,我不得不将我的OSX从mavericks更新到Yosemite以获得Xcode 6.3并解决问题

答案 13 :(得分:1)

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

答案 14 :(得分:1)

对我来说问题出现在Other Linker标志值中。出于某种原因,我在-l"xml2" -l"Pods-MBProgressHUD"等标记中没有引号。

答案 15 :(得分:1)

我遇到了同样的问题,但上述解决方案无法解决问题。 我通过这样做修复了它:

  1. 删除整个项目
  2. 运行git clone项目并运行bundle exec pod install
  3. cd peoject并运行remote add your your-remote-rep-add
  4. git fetch upstream
  5. git checkout master
  6. git merge upstream / master
  7. 然后它有效。

答案 16 :(得分:0)

没有一个答案对我有帮助(我的pod与所有目标相关联,构建配置正确,相关设置搜索路径&#34; $(继承)&#34;等等......)。

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

   gem install cocoapods --pre

或:

   sudo gem install cocoapods --pre

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

一定是cocoapods的错误。

答案 17 :(得分:0)

这是我的答案,我更新了cocoapods,我认为这使得PODS_HEADERS_SEARCH_PATHS消失了。我的解决方案与此类似,但我使用&#34; $(PODS_ROOT)/ Headers&#34; - Andrew Aitken

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

答案 18 :(得分:0)

对我来说有用的是选择Pods项目,在Pod项目的目标目录中找到并选择缺少标题的目标框架并设置&#34;仅构建活动架构&#34;到&#34;不&#34;在&#34;架构&#34;在目标的构建设置中。

答案 19 :(得分:0)

我是Xcode 5.0的转基因种子,我无法得到任何这些答案。关于标题导入w / cocoapods的多个不同问题,我在SO上尝试了每一个答案。

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

我的系统上还有Xcode 5的测试版,我也删除了它。也许这是两件事的组合,但希望这有助于其他人。

答案 20 :(得分:0)

这是另一个原因:所有标题路径似乎都很好,但我们仍然在预编译(.pch)文件中尝试读取pod标题时出错

(即#import&lt; CocoaLumberjack / CocoaLumberjack.h&gt;)。

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

答案 21 :(得分:0)

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

答案 22 :(得分: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文件等,我发现清除缓存很有用。

对于react-native,我运行

    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中的文件夹

答案 23 :(得分:0)

我认为最终的解决方案是转到Build settings -> Search Path -> User Header Search Paths,找到您的库路径,然后在Finder中进行查找。确保所有路径都存在,包括导入路径。

对我来说,我的道路比教程中的短。在教程中,它类似于#import <SDK/path/to/sdk/File.h>,但事实证明它只是#import <SDK/File.h>

答案 24 :(得分:-1)

我通过我想要使用的拖放框架解决了Xcode 8.2.1的这个问题。

答案 25 :(得分:-1)

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

pod install

答案 26 :(得分:-1)

我在这里还有其他可行的解决方案,

  1. 退出Xcode
  2. 打开Xcode并清理项目
  3. 首先构建Pods项目
  4. 构建项目

答案 27 :(得分:-2)

尝试为您的目标评论此行

#  use_frameworks!

或者您可以参考我的另一个答案added unit testing target to xcode - failed to import bridging header won't go away