iOS - 编译失败,CocoaPods无法找到头文件
我有一个使用CocoaPods的iOS项目。一切都很顺利,直到另一位开发人员开始在同一个项目上工作。他做出了一些改变(据我所知只做了代码),并在回购协议中创建了一个新分支。我检查了他的分支,并试图建立它,但我得到一个错误:未找到ASLogger/ASLogger.h文件。iOS - 编译失败,CocoaPods无法找到头文件
即使我删除了整个项目并创建了一个新副本并使用'pods安装'。构建失败仍然存在。你有什么想法可以解决问题的地方吗?如果你需要更多的信息,请问。
的wiki就如何解决这一问题的建议:
If Xcode can’t find the headers of the dependencies:
Check if the pod header files are correctly symlinked in Pods/Headers and you are not overriding the HEADER_SEARCH_PATHS (see #1). If Xcode still can’t find them, as a last resort you can prepend your imports, e.g. #import "Pods/SSZipArchive.h".
请问有人可以详细说明如何“检查pod头文件是否在Pod/Headers中正确符号链接”? – 2012-10-16 20:05:03
请查看我的回答以上有关如何检查符号链接的答案 – brainray 2012-12-27 17:35:50
在破坏导入语句之前,请同时参阅有关配置的brainray的回答。 – 2013-02-11 12:06:50
更新
,因为我原来的答复,即得到了downvote我已经更新了这一点,所以我希望这有助于。如果确实如此,希望它能让我的投票回来。
如果标题未被导入,您可能在HEADER_SEARCH_PATHS
中有冲突。尝试并将$(inherited)
添加到构建设置中的标题搜索路径,以确保它从CocoaPods中提取包含在.xcconfig文件中的任何搜索路径。
这应该有助于解决任何冲突并正确导入源代码。
我曾经遇到过问题:在删除或移动.svn子目录时,应用程序和'svn受阻文件夹问题'中未检测到Pod文件: 解决方案:通过以下步骤: 1.仅从应用程序卸载CocoaPods。 xcodeproj文件存在(参考:http://stackoverflow.com/questions/16427421/how-to-remove-cocoapods-from-a-project) 2.再次安装podfiles(参考:http://www.raywenderlich.com/12139 /引入到cocoapods) 3.在应用程序的目标“HEADER_SEARCH_PATHS”和“OTHER_LDFLAGS”中添加了$(继承)标志。 – 2014-04-16 12:09:44
您可能还需要将$(继承)添加到FRAMEWORK_SEARCH_PATHS设置中。 – George 2014-05-25 16:55:39
@ AlphonseR.Dsouza你的解决方案为我工作 - 感谢一百万加入$(继承)给OTHER_LDFLAGS!应该在项目设置或目标设置中添加$(继承)$ – 2015-12-06 11:32:34
其他答案在这里没有帮助。我发现2个可能会解决这个问题的其他问题:
的项目 - >信息 - >在Xcode项目配置(项目)应设置为调试,发布“豆荚”(和whatelse你有) 。请参阅"Headers not found – search paths not included"
也许您必须将目标链接到link_with命令。见"Unable to find headers in Static Library project"
编辑 您可以检查一个符号链接是这样的:创建一个文本文件名为“检查”没有扩展名。复制这些行到它:
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
下面是我工作:
转到Target>“Build Settings”标签并找到“用户标题搜索路径”设置。
将此设置为“$(BUILT_PRODUCTS_DIR)”并选中“递归”复选框。
现在,构建的目标将搜索工作空间的共享构建目录以查找可链接的头文件。
====
UPDATE
我最近也有类似的(虽然略有不同)的问题。事实证明Xcode无法找到Pod,因为我打开了.xcodeproj
文件而不是.xcworkspace
文件。未来可能会帮助别人。
这对我有用,但只有退出Xcode,运行'pod install'并重新打开后。 – 2015-11-02 21:53:13
@Snowcrash什么目标? Pod目标或主要项目目标? – VAAA 2017-04-26 19:44:57
头文件,你会死我了......
终于得到它通过增加(包括引号)
"${PODS_ROOT}/BuildHeaders"
到用户头搜索路径条目,并检查工作“递归”。
请注意,引号在这里非常重要。没有他们,我无法实现它的工作。 – DiscDev 2013-09-29 00:30:55
+1我已经有'$(继承)'(没有工作),但加入这对我工作。 – iwasrobbed 2013-12-05 17:13:34
没有得到你想说的话。 :/请你详细说明一下吗? – 2014-06-25 20:20:42
您是否尝试导入Cocoapods风格?
#import <ASLogger.h>
网站上的信息是不是真的不清楚,我提交了一个拉请求:
https://github.com/CocoaPods/cocoapods.org/pull/34
更新:他们把我的要求:)
使用双引号风格, #进口“ASLogger.h” 我想这一点, #进口
我之前已经试过这一点,它一直对我来说,但有时会出现不同的问题,当它不起作用。至少在某些情况下,您还可以使用
是的,这也适用于我!没有任何清理和删除派生数据的解决它,但这工作。 – PostCodeism 2015-11-20 23:31:10
我发现${PODS_HEADERS_SEARCH_PATHS}
是缺少,它没有在我的开发git分支中定义,所以我添加了"$(SRCROOT)/Pods/Headers/"
用于递归的标题搜索路径
这是确定的,我
这是我的答案,我更新了cocoapods,我认为这使得PODS_HEADERS_SEARCH_PATHS消失。我的解决方案与此类似,但是我使用了“$(PODS_ROOT)/ Headers” – 2013-07-25 05:23:24
其他答案对我来说不起作用,但是这样做了。我会注意到我没有包含“,所以我的标题搜索路径看起来像这个'''$(SRCROOT)/ Pods/Headers''' – Blakedallen 2015-05-20 03:41:35
@Hlung hi,我需要在那里添加$(SRCROOT)/Pods/Headers /?Appreciate – VAAA 2017-04-26 15:42:16
更新
确保您Podfile
包括上缺少一个配置文件的目标link_with
。 Cocoapods only sets the first target by default否则。例如
platform :osx, '10.7'
pod 'JSONKit', '~> 1.4'
link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'
------最终更新
注:请做笔记,你必须寻找到工程 - >信息 - >配置为下面的步骤。
我有类似的症状,发现没有被包括在特定target
的pods.xcconfig
文件我试图建立。其他一些建议的解决方案为我工作,但这似乎解决了一部分潜在问题。
简单的解决办法是改变设置的配置文件是没有一个确定的目标。
我是5.0的Xcode的转基因种子,我不能得到任何回答这些问题的工作。我在关于标题导入w/cocoapods的多个不同问题上尝试了每个单独的答案。
最后,我找到了一个适用于我的解决方案:我通过Mac AppStore(安装在GM种子上)升级到Xcode 5.0,现在头导入按预期工作。
我的系统上还有一个测试版的Xcode 5,我也删除了它。也许这是两件事的结合,但希望这可以帮助别人。
这是我的答案,我更新了cocoapods,我认为这使得PODS_HEADERS_SEARCH_PATHS消失。我的解决方案与此类似,但我使用“$(PODS_ROOT)/ Headers” - Andrew Aitken
非常感谢您的回答。我很难找到解决问题的方法。非常感谢你。
对我来说问题在于其他链接器标志值。出于某种原因,我没有像-l"xml2"
-l"Pods-MBProgressHUD"
这样的标记中的引号。
我遇到了Localytics的Cocoapod问题,在其他链接器标志下,我找到了两个条目:' - | Localytics'和'| --PodsLocalytics '我删除了那些,然后能够编译 – Chris 2016-01-26 18:22:37
我不得不从下载中心混帐的拉链和在波德/对应的路径拖动丢失的文件到Finder中......
无答案的帮助我(我有我的豆荚所有指标挂钩,正确构建配置设置,设置搜索路径“$(继承)”等)。
问题本身消失我更新的CocoaPods到最新,使用调试版本标准安装/更新命令之后:
gem install cocoapods --pre
或:
sudo gem install cocoapods --pre
(如果安装过程中使用须藤)。
它一定是cocoapods错误。
如果你有一个后建设的错误“吊舱安装”或“荚更新”,它可能是当你还在用以前的你豆荚一个已建成的XCode 6.3版。
在我来说,我不得不从小牛到优胜美地更新我的OSX拥有的Xcode 6.3和解决问题
1.检查
build settings -> Search Path -> User Header Search Paths ->
- “$ {} PODS_ROOT /” 递归
2。如果检查进口的风格(KEY POINT), 您的podfile
已设置
use_frameworks!
在你File-Bridging-Header.h
,格式化应该喜欢这个
#import "MBProgressHUD.h"
其他应低于
#import <MBProgressHUD.h>
3.那一定是工作!相信我
大多数错误消失。但是,如果依赖项具有如下导入语句,我该怎么办?#import
我会更新我的生成设置下面的东西,我没有得到任何错误。检查这些是更新你的cocoapods时的事情。
构建设置
Enable Bit code - YES(if you are using bitcode)
Macro preprocessor - $(inherited)
Other linker flag - objc, -lc++, $(inherited)
构建结构仅
Debug - Yes
Relese - No
搜索路径
Framework search path - $(inherited) $(PROJECT_DIR)
Library search path - $(inherited)
Header search path - $(inherited)
如果没有日。上面的工作为你,你正在发现这个错误,因为你刚刚在你的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”下将“仅生成活动架构”设置为“否”设置。
我是团队中遇到同样问题的唯一开发者,它对每个人都非常合适,所以我意识到它必须是我的环境。我在另一个目录中尝试了相同项目的git clone
,并且它编译得很完美,然后我意识到它必须是Xcode缓存的项目路径的某处,“某处”是DerivedData文件夹,只需将其删除并执行干净的构建你的项目,它为我工作。
你可以得到的路径,甚至在取景器通过去打开文件夹:
的Xcode - >首 - >位置 - > ** DerivedData
在我的情况下,更新豆荚后出现问题,所以我认为在cocoapods应该搜索问题。我已经尝试过所有解决方案,但没有运气,最后只是清除了DerivedData - 它帮助了!谢谢 – Varrry 2016-10-31 16:40:32
有一个尝试注释此行的目标
# use_frameworks!
或者,你可以参考我的另一个答案added unit testing target to xcode - failed to import bridging header won't go away
我有同样的问题,但上述解决方案无法正常工作。 我已经这样定吧:
- 删除整个项目
- 运行git克隆项目并运行捆绑高管荚安装
- CD的peoject和运行远程添加上游您的远程-REP -add
- GIT中取上游
- GIT中结帐主
- GIT中合并上游/主
然后它工作。
我通过我想使用的拖放框架解决了Xcode 8.2.1的这个问题。
一个简单的解决方法是: 1.删除Pods文件夹和Podfile.lock文件。但是,不要在你的项目的根文件夹中删除Podfile 2.运行以下命令:
pod install
这里的另一个原因是:所有的头路径看起来很好,但我们仍然在预编译(.PCH)文件有错误试图读取吊舱标题
(即#import <CocoaLumberjack/CocoaLumberjack.h>)。我终于注意到这个错误打破了我们的Watch OS扩展目标,而不是我们正在构建的主要目标,因为我们还将.pch预编译头文件导入到Watch OS目标中,它在那里失败。确保您的伴随Watch OS目标设置不会尝试导入.pch文件(特别是如果您从主目标设置中设置导入,就像我一样!)
而不是使用双引号样式,#import“ASLogger .h“我试过这个,#import它对我有用:) –
Baig
2013-06-05 11:05:39
供参考:Baigs简单的答案解决了我的问题,没有找到标题。 – Pedroinpeace 2014-02-11 15:43:11