我有一个使用CocoaPods的iOS项目。一切都在顺利进行,直到另一位开发人员开始在同一个项目上工作。他做了一些更改(据我所知只对代码)并在回购中创建了一个新的分支。我检查了他的分支并尝试构建它,但是我收到一个错误:找不到ASLogger / ASLogger.h文件。
即使我删除整个项目并制作新副本并使用“pods install”。构建失败仍然存在。你知道问题出在哪里吗?如果您需要更多信息,请询问。
答案 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
中。其他一些建议的解决方案对我有用,但这个解决方案似乎解决了潜在问题的一部分。
简单的解决方案是更改为没有一组的目标设置配置文件。
答案 1 :(得分:88)
更新
我已经更新了这个,因为我的原始答案,得到了downvote,所以我希望这有帮助。如果确实如此,希望它会得到我的投票。
如果未导入标头,则HEADER_SEARCH_PATHS
可能存在冲突。尝试将$(inherited)
添加到构建设置中的标题搜索路径,以确保它从CocoaPods中提取.xcconfig文件中包含的任何搜索路径。
这应该有助于解决任何冲突并正确导入您的源。
答案 2 :(得分:75)
1.检查
构建设置 - >搜索路径 - >用户标题搜索路径 - >
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)
其他两个答案在这里没有帮助。我发现了另外两个可能解决它的问题:
项目 - &gt;信息 - &gt; Xcode项目(您的项目)中的配置应设置为“Pods”,用于Debug,Release(以及您拥有的)。请参阅"Headers not found – search paths not included"
也许您必须使用link_with命令链接目标。请参阅"Unable to find headers in Static Library project"
修改强> 您可以通过以下方式检查符号链接:创建名为“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)
我遇到了同样的问题,但上述解决方案无法解决问题。 我通过这样做修复了它:
然后它有效。
答案 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)
我在这里还有其他可行的解决方案,
答案 27 :(得分:-2)
尝试为您的目标评论此行
# use_frameworks!
或者您可以参考我的另一个答案added unit testing target to xcode - failed to import bridging header won't go away