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

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

即使我删除了整个项目,重新复制并使用“pods install .”,构建失败仍然存在。你知道问题出在哪里吗?如果你需要更多的信息,尽管问。

171390 次浏览

维基给出了如何解决这个问题的建议:

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

检查pod头文件是否在Pods/Headers中被正确地符号链接 并且您没有覆盖HEADER_SEARCH_PATHS(参见#1)。如果Xcode 还是找不到他们,作为最后的手段,你可以提前进口, 例如:#import "Pods/SSZipArchive.h".

.h .

更新

我更新了我最初的答案,得到了反对票,所以我希望这对你有帮助。如果真的成功了,希望它能帮我赢回选票。

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

这将有助于解决任何冲突并正确导入源代码。

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

<强>编辑 你可以这样检查符号链接:创建一个名为“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

以下是对我有效的方法:

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

将其设置为"$(BUILT_PRODUCTS_DIR)"并选中"Recursive"复选框。

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

= = = =

更新

最近我也遇到了类似的问题(尽管略有不同)。结果Xcode找不到Pods,因为我打开的是.xcodeproj文件而不是.xcworkspace文件。也许将来能帮助到别人。

头文件,你会害死我的…

最后通过添加(包括引号)让它工作

"${PODS_ROOT}/BuildHeaders"

到User Header Search Paths条目,并检查“递归”。

你试过引进Cocoapods风格吗?

#import <ASLogger.h>

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

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

他们撤回了我的请求:)

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

对我来说没问题

更新

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

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


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

------结束


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


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

豆荚。Xcconfig不工作”></p>


<p>简单的解决方案是为没有set的目标更改配置文件set。</p>


<p><img src=

我是在Xcode 5.0的GM种子上,我不能让这些答案工作。我在SO上尝试了多个不同的关于头导入/ cocoapods的问题。

最后我找到了一个适合我的解决办法:我通过Mac AppStore升级到Xcode 5.0(安装在GM种子的顶部),现在头导入按预期工作。

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

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

非常感谢你的回答。我花了很长时间寻找解决问题的方法。非常感谢。

对我来说,问题是在其他链接标志值。由于某种原因,我在像-l"xml2" -l"Pods-MBProgressHUD"这样的标志中没有引号。

我必须从git中心下载zip,并将丢失的文件拖到Finder中相应的Pod/…

没有一个答案对我有帮助(我把我的pod链接到所有目标,构建配置设置正确,正确设置搜索路径“$(inherited)”,等等……)。

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

   gem install cocoapods --pre

或者:

   sudo gem install cocoapods --pre

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

那一定是茧足虫。

如果你在“圆荚体安装”或“豆荚更新”之后有构建错误,这可能是你的一个pod已经用XCode 6.3构建,而你仍然在使用以前的版本。

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

1.检查

build settings ->搜索路径->用户头搜索路径-> . build settings

  • “$ {PODS_ROOT} /”递归

enter image description here

enter image description here

enter image description here enter image description here < / p > < p > 2。检查导入样式(关键点), 如果你的podfile已经设置

use_frameworks!

在你的File-Bridging-Header.h中,格式化器应该是这样的

#import "MBProgressHUD.h"

Else应该在下面

#import <MBProgressHUD.h>

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

我将在我的构建设置中更新以下内容,我没有得到任何错误。要检查这些东西,同时更新你的cocoapods。

建立设置

启用位码- YES(如果你正在使用位码)

宏预处理器- $(继承)

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

只构建体系结构

调试-是

放松-不

搜索路径

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

库搜索路径- $(继承)

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

如果以上都不适合你,你发现这个错误是因为你刚刚在Podfile中切换到use_frameworks!,请继续阅读:

我尝试了上面所有的解决方案,在了解到在我的特定情况下,它根本不是关于搜索头路径;当你在Podfile中切换到use_frameworks!时,你不再需要在桥接头中包含框架,事实上Xcode会抛出非常没有帮助的“无法找到头”错误。

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

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

编辑:我后来了解到,做@import Module使用伞文件,这是更安全的。

对我来说有用的是选择Pods项目,在Pod项目的目标目录中找到并选择缺少头的目标框架,并在目标的构建设置中“Architectures”下将“Build Active Architecture Only”设置为“No”。

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

你可以获取路径,甚至在finder中打开文件夹:

__abc0 -> __abc1 -> __abc2

试着为你的目标评论一下这行吗

#  use_frameworks!

或者你可以参考我的另一个答案添加单元测试目标到xcode -导入桥接头失败

我也遇到了同样的问题,但上面的解决方案行不通。 我已经通过这样做来修复它:

  1. 删除整个项目
  2. 运行git克隆项目,然后运行bundle exec pod install
  3. CD项目并运行remote- add upstream your-remote-rep-add
  4. Git上游获取
  5. Git checkout master
  6. Git合并upstream/master

然后就成功了。

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

一个简单的解决方法是: 1. 删除Pods文件夹和Podfile。锁文件。但是不要删除Podfile 2.

.在项目根目录下执行以下命令
pod install

这里还有另一个原因:所有的头路径看起来都很好,但我们在预编译(.pch)文件中试图读取pod头时仍然有一个错误

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

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

对我来说,修复它的是我的Pods项目的iOS部署目标低于我的项目本身。一旦我使它与我的项目相同,它就能够找到头文件。

我有另一个可行的解,

  1. Xcode辞职
  2. 打开Xcode,清理项目
  3. 首先构建Pods项目
  4. 建设项目

我发现将库作为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中的文件夹

我认为最终的解决方案是去Build settings -> Search Path -> User Header Search Paths,找到你的库路径,并在Finder中通过它。确保所有路径都存在,包括导入路径。

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

如果你在Xcode 12或以上,确保你的Pods是为正确的架构编译的(Intel vs. ARM)。检查是否有VALID_ARCHSEXCLUDED_ARCHS设置。

我在Podfile中有config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64',这阻止了编译器找到Pod头文件。