iOS – 编译失败,CocoaPods无法find头文件

我有一个使用CocoaPods的iOS项目。 一切顺利,直到另一个开发人员开始在同一个项目上工作。 他做了一些改变(只知道我所知道的代码),并在回购中创build了一个新的分支。 我检查了他的分支,并试图build立它,但我得到一个错误:ASLogger / ASLogger.h文件未find。

即使我删除了整个项目并重新制作了一份,然后使用“豆荚安装”。 构build失败依然存在。 你有什么想法可以解决问题吗? 如果你需要更多的信息,请问。

更新

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

 platform :osx, '10.7' pod 'JSONKit', '~> 1.4' link_with 'Pomo', 'Pomo Dev', 'Pomo Tests' 

——结束更新


注意:请注意,您需要查看以下步骤的Project-> Info-> Configurations。


我有类似的症状,发现pods.xcconfig文件没有被包含在我试图build立的特定target 。 其他一些build议的解决scheme为我工作,但这似乎解决了一部分的根本问题。

Pods.xcconfig不起作用

简单的解决scheme是更改设置没有一个集合的目标的configuration文件。

Pods.xcconfig工作

更新

我已经更新了这个,因为我原来的答案,得到了downvote,所以我希望这有助于。 如果是的话,希望它能让我的选票回来。

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

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

1.检查

build立设置 – >searchpath – >用户头searchpath – >

  • “$ {PODS_ROOT} /”recursion

在这里输入图像描述

在这里输入图像描述

在这里输入图像描述 在这里输入图像描述

2.检查导入风格(KEY POINT),如果你的podfile已经设置好了

use_frameworks!

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

#import "MBProgressHUD.h"

否则应该在下面

#import <MBProgressHUD.h>

那一定是工作! 相信我

头文件,你会是我的死亡…

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

 "${PODS_ROOT}/BuildHeaders" 

到用户头部searchpath条目,并检查'​​recursion'。

我发现${PODS_HEADERS_SEARCH_PATHS}是缺less的,它没有在我的开发git分支中定义,所以我添加了"$(SRCROOT)/Pods/Headers/"头recursionsearchpath

对我来说没问题

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

  • Xcode项目(你的项目)中的Project-> Info-> Configurations应该被设置为'Pods',用于debugging,发布(和你有的)。 请参阅“未find标题 – 不包含searchpath”

  • 也许你必须链接目标与link_with命令。 请参阅“无法在静态库项目中查找标题”

编辑你可以用这种方法检查符号链接:创build一个名为“检查”的文本文件,不带扩展名。 复制这些行到它:

 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 

然后转到terminal,切换到您的检查文件所在的文件夹并键入

 bash check 

以下是对我有用的东西:

转到目标>“构build设置”选项卡,然后find“用户标题searchpath”设置。

将其设置为“$(BUILT_PRODUCTS_DIR)”并选中“recursion”checkbox。

现在,构build的目标将search工作空间的共享构build目录以查找可链接的头文件。

====

UPDATE

我最近有一个类似的(虽然稍有不同)的问题。 原来Xcode找不到这个Pod,因为我打开了.xcodeproj文件而不是.xcworkspace文件。 可能在未来帮助别人。

你尝试导入Cocoapods风格?

 #import <ASLogger.h> 

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

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

更新:他们拉我的要求:)

如果以上都没有为你工作,你正在发现这个错误,因为你只是切换到use_frameworks! 在您的Podfile中,阅读:

我尝试了上面的所有解决scheme,还有更多的解决scheme,然后才知道在我的具体情况下,它不是关于search标题path; 这是当你切换到use_frameworks! 在你的Podfile中,你不再需要在你的桥接头文件中包含框架,事实上Xcode会抛出无用的“找不到头文件”的错误。

你需要做的是从你的桥接头文件中删除所有的input,并且根据需要在你的Swift文件中使用Swift import Module ,就像Swift框架一样。

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

编辑:我已经知道,做@import Module使用更安全的伞文件。

wiki给出了如何解决这个问题的build议:

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

检查pod头文件是否在Pods / Headers中正确符号链接,并且不覆盖HEADER_SEARCH_PATHS(请参阅#1)。 如果Xcode仍然无法find它们,作为最后的手段,你可以预先导入,例如#import“Pods / SSZipArchive.h”。

我是团队中唯一遇到同样问题的开发人员,它对每个人都非常合适,所以我意识到它必须是我的环境。 我尝试了在另一个目录中的同一个项目的git clone ,它完全编译,然后我意识到它必须是我的项目path某处的Xcodecaching的东西,“某处”是DerivedData文件夹,只是将其删除并做一个干净的构build你的项目,它为我工作。

你可以得到的path,甚至打开find文件夹,通过去:

Xcode – > 首选项 – > 位置 – > ** DerivedData

如果您在“ pod安装 ”或“ pod更新 ”之后出现构build错误,则可能是您在使用版本时已经使用XCode 6.3构build了其中一个pod

在我的情况下,我不得不更新我的OSX从小牛队到优胜美地有Xcode 6.3和解决问题

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

我不得不从git集线器下载zip文件,然后将缺失的文件拖拽到相应path的Finder中。

我是在Xcode 5.0的转基因种子,我不能得到任何这些答案的工作。 我尝试了关于标题导入w / cocoapods的多个不同问题上的所有答案。

最后,我find了一个适用于我的解决scheme :我通过Mac AppStore(安装在GM种子上)升级到了Xcode 5.0,现在头导入工作正常。

我的系统上还有一个testing版的Xcode 5,我也删除了这个版本。 也许这是两件事的结合,但希望这可以帮助别人。

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

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

没有答案帮助我(我有我的豆荚与所有目标链接,build立configuration设置正确,correclty设置searchpath“$(inheritance)”等)。

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

  gem install cocoapods --pre 

要么:

  sudo gem install cocoapods --pre 

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

它一定是椰子臭虫。

对于我来说,selectPods项目,在Pod项目的目标目录中find并select缺less标题的目标框架,并在目标的构build设置中的“Architectures”下将“Build Active Architecture Only”设置为“No”。

我有同样的问题,但上述解决scheme无法正常工作。 我已经解决了这个问题:

  1. 删除整个项目
  2. 运行git克隆项目并运行软件包exec pod install
  3. 光盘peoject和运行远程添加上游your-remote-rep-add
  4. git获取上游
  5. git checkout master
  6. 混帐上游/主

然后它工作。

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

这是另一个原因:所有的头文件path看起来不错,但是我们仍然在预编译(.pch)文件中尝试读取一个pod头

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

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

我将更新我的生成设置下面的东西,我没有得到任何错误。 检查这些是更新你的cocoapods的东西。

构build设置

启用位代码 – 是(如果您正在使用位代码)

macros预处理器 – $(inheritance)

其他链接器标志 – objc,-lc ++,$(inheritance)

只build立架构

debugging – 是的

Relese – No

searchpath

框架searchpath – $(inheritance)$(PROJECT_DIR)

库searchpath – $(inheritance)

标题searchpath – $(inheritance)

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

 pod install 

尝试为您的目标评论这一行

 # use_frameworks! 

或者你可以参考我的另一个答案添加unit testing目标到xcode – 未能导入桥接头将不会消失