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为我工作,但这似乎解决了一部分的根本问题。
简单的解决scheme是更改设置没有一个集合的目标的configuration文件。
更新
我已经更新了这个,因为我原来的答案,得到了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无法正常工作。 我已经解决了这个问题:
- 删除整个项目
- 运行git克隆项目并运行软件包exec pod install
- 光盘peoject和运行远程添加上游your-remote-rep-add
- git获取上游
- git checkout master
- 混帐上游/主
然后它工作。
我通过拖放框架解决了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 – 未能导入桥接头将不会消失