我有一个使用 CocoaPods 的 iOS 项目。一切都很顺利,直到另一个开发人员开始从事同一个项目。他做了一些更改(据我所知仅对代码进行了更改)并在 repo 中创建了一个新分支。我检查了他的分支并尝试构建它,但我收到一个错误:找不到 ASLogger/ASLogger.h 文件。
即使我删除整个项目并制作新副本并使用“pods install”。构建失败仍然存在。你知道问题出在哪里吗?如果您需要更多信息,请询问。
更新
确保您的 Podfile
在缺少配置文件的目标上包含 link_with
。 Cocoapods 仅 sets the first target by default 否则。例如
platform :osx, '10.7'
pod 'JSONKit', '~> 1.4'
link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'
------ 结束更新
注意:请注意,您必须查看 Project->Info->Configurations 以了解以下步骤。
我有类似的症状,发现 pods.xcconfig
文件未包含在我尝试构建的特定 target
中。其他一些建议的解决方案对我有用,但这个似乎解决了部分潜在问题。
https://i.stack.imgur.com/BO73p.png
简单的解决方案是为没有设置的目标更改设置配置文件。
https://i.stack.imgur.com/TJNTL.png
更新
自从我的原始答案被否决以来,我已经更新了这个,所以我希望这会有所帮助。如果确实如此,希望它会收回我的投票。
如果没有导入标头,您可能在 HEADER_SEARCH_PATHS
中存在冲突。尝试将 $(inherited)
添加到构建设置中的标头搜索路径,以确保它从 CocoaPods 中提取 .xcconfig 文件中包含的任何搜索路径。
这应该有助于解决任何冲突并正确导入您的源代码。
1.检查
构建设置 -> 搜索路径 -> 用户标题搜索路径 ->
"${PODS_ROOT}/" 递归
https://i.stack.imgur.com/H8n1n.png
https://i.stack.imgur.com/0UhnA.png
https://i.stack.imgur.com/gxHV5.png
2.检查导入样式(KEY POINT),如果您的podfile
已设置
use_frameworks!
在您的 File-Bridging-Header.h
中,格式化程序应该是这样的
#import "MBProgressHUD.h"
否则应该在下面
#import <MBProgressHUD.h>
3.那一定是工作!相信我
头文件,你会是我的死...
最后通过添加(包括引号)让它工作
"${PODS_ROOT}/BuildHeaders"
到用户标题搜索路径条目,并检查“递归”。
$(inherited)
(没有工作),但添加它对我有用。
我发现 ${PODS_HEADERS_SEARCH_PATHS}
丢失并且它没有在我的开发 git 分支中定义,所以我添加了 "$(SRCROOT)/Pods/Headers/"
用于递归的标题搜索路径
这对我来说没问题
$(SRCROOT)/Pods/Headers
其他两个答案在这里都没有帮助。我发现了另外两个可以解决的问题:
Xcode 项目(您的项目)中的 Project->Info->Configurations 应设置为“Pods”以进行调试、发布(以及您拥有的其他东西)。请参阅“未找到标题 - 不包括搜索路径”
也许您必须使用 link_with 命令链接目标。请参阅“无法在静态库项目中找到标头”
编辑您可以通过这种方式检查符号链接:创建一个名为“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)”并选中“递归”复选框。
现在构建的目标将搜索工作区的共享构建目录以找到可链接的头文件。
====
更新
我最近遇到了类似(尽管略有不同)的问题。结果 Xcode 找不到 Pod,因为我打开的是 .xcodeproj
文件而不是 .xcworkspace
文件。将来可能会帮助其他人。
pod install
并重新打开之后。
如果上述方法都不适合您,并且您发现此错误是因为您刚刚在 Podfile 中切换到 use_frameworks!
,请继续阅读:
在得知在我的特定情况下根本与搜索标题路径无关之前,我尝试了上述所有解决方案以及更多解决方案;就是当您在 Podfile 中切换到 use_frameworks!
时,您不再需要在桥接头中包含框架,实际上 Xcode 会抛出非常无用的“无法找到标头”错误。
您需要做的是从您的桥接头文件中删除所有导入,而是根据需要在您的各个 Swift 文件中使用 Swift import Module
,就像您对 Swift 框架所做的那样。
如果您在 Obj-C 类中使用任何框架头文件(在我的例子中,我们有一个使用 FBSDK 的便利类),您需要将其从本地导入更改为全局导入(这意味着将 #import "Module.h"
更改为 { 2},当您开始输入框架名称时,它应该会自动完成。在我的例子中是 <AFNetworking/AFHTTPRequestOperationManager.h>
)。
编辑:从那以后,我了解到执行 @import Module
使用更安全的保护伞文件。
您是否尝试过导入 Cocoapods 样式?
#import <ASLogger.h>
网站上的信息不是很清楚,我提交了一个拉取请求:
https://github.com/CocoaPods/cocoapods.org/pull/34
更新:他们撤回了我的请求 :)
wiki 提供了有关如何解决此问题的建议:
如果 Xcode 找不到依赖项的头文件:检查 pod 头文件是否在 Pods/Headers 中正确符号链接,并且您没有覆盖 HEADER_SEARCH_PATHS(参见 #1)。如果 Xcode 仍然找不到它们,作为最后的手段,您可以在导入之前添加,例如 #import "Pods/SSZipArchive.h"。
$(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h
,还有一个额外的 ios
文件夹...
我是团队中唯一遇到同样问题的开发人员,它对每个人都很有效,所以我意识到它必须是我的环境。我在另一个目录中尝试了同一个项目的 git clone
,它编译得很好,然后我意识到它必须是 Xcode 为我的项目路径缓存的东西,“某处”是 DerivedData 文件夹,只需将其删除并进行清理构建您的项目,它对我有用。
您可以通过以下方式获取路径,甚至可以在 finder 中打开文件夹:
Xcode -> 首选项 -> 位置 -> **DerivedData
我将在我的构建设置中更新以下内容,并且没有收到任何错误。在更新你的 cocoapods 时检查这些东西。
构建设置
启用位代码 - 是(如果您使用的是位代码) 宏预处理器 - $(inherited) 其他链接器标志 - objc、-lc++、$(inherited)
仅构建架构
调试 - 是 发布 - 否
搜索路径
框架搜索路径 - $(inherited) $(PROJECT_DIR) 库搜索路径 - $(inherited) 标头搜索路径 - $(inherited)
对我来说,解决问题的是我的 Pods 项目的 iOS 部署目标低于我的项目本身。一旦我将它与我的项目相同,它就能够找到头文件。
如果您在“pod install”或“pod update”后出现构建错误,则可能是您的其中一个 pod 是使用 XCode 6.3 构建的,而您仍在使用以前的版本。
就我而言,我必须将我的 OSX 从 Mavericks 更新到 Yosemite 才能拥有 Xcode 6.3 并解决问题
对我来说,问题出在其他链接器标志值中。出于某种原因,我在 -l"xml2"
-l"Pods-MBProgressHUD"
等标志中没有引号。
Other Linker Flags
下,我找到了两个条目:-|Localytics
和 |-PodsLocalytics
。我删除了这些,然后能够编译。
我必须从 git hub 下载 zip 并将丢失的文件拖到 Pod/... 中相应路径的 Finder 中
对我有用的是选择 Pods 项目,在 Pod 项目的目标目录中查找并选择缺少标头的目标框架,并在目标的构建设置中的“架构”下将“仅构建活动架构”设置为“否”。
我也遇到了同样的问题,但是上面的解决方法都行不通。我通过这样做修复了它:
删除整个项目 运行 git clone 项目并运行 bundle exec pod install cd peoject 并运行 remote add upstream your-remote-rep-add git fetch upstream git checkout master git merge upstream/master
然后它就起作用了。
我在 Xcode 5.0 的 GM 种子上,我无法得到任何这些答案。我在关于带有 cocoapods 的标头导入的多个不同问题上尝试了关于 SO 的每一个答案。
最后,我找到了一个适合我的解决方案:我通过 Mac AppStore(安装在 GM 种子之上)升级到 Xcode 5.0,现在标题导入按预期工作。
我的系统上还有一个 Xcode 5 的测试版,我也删除了它。也许这是两者的结合,但希望这对其他人有所帮助。
这就是我的答案,我更新了 cocoapods,我认为这让 PODS_HEADERS_SEARCH_PATHS 消失了。我的解决方案与此类似,但我使用了“$(PODS_ROOT)/Headers” – Andrew Aitken
非常感谢您的回答。我很难找到解决问题的方法。非常感谢。
没有一个答案对我有帮助(我将我的 pod 与所有目标链接,正确构建配置设置,正确设置搜索路径“$(继承)”等...)。
在我使用标准安装/更新命令将 cocoapods 更新到最新的调试版本后,问题自行消失了:
gem install cocoapods --pre
或者:
sudo gem install cocoapods --pre
(如果在安装过程中使用了 sudo)。
一定是cocoapods bug。
一种简单的解决方法是: 1. 删除 Pods 文件夹和 Podfile.lock 文件。但不要删除 Podfile 2. 在项目根文件夹中运行以下命令:
pod install
这是另一个原因:所有头文件路径看起来都很好,但我们在尝试读取 pod 头文件的预编译 (.pch) 文件中仍然有错误
(即#import
查看原始构建输出,我终于注意到错误是破坏了我们的 Watch OS 扩展目标,而不是我们正在构建的主要目标,因为我们还将 .pch 预编译的头文件导入到 Watch OS 目标中,但它失败了那里。确保您随附的 Watch OS 目标设置不要尝试导入 .pch 文件(特别是如果您像我一样从主目标设置设置导入!)
我发现将库作为 pod install 直接有助于动态库。例如,对于 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 文件等,我发现清除缓存很有用。
对于本机反应,我运行
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 或更高版本,请确保您的 Pod 正在针对正确的架构(Intel 与 ARM)进行编译。检查您是否在任何地方都有 VALID_ARCHS
或 EXCLUDED_ARCHS
设置。
我的 Podfile 中有 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
,这会阻止编译器找到 Pod 头文件。
尝试为您的目标评论此行
# use_frameworks!
或者你可以参考我的另一个回答added unit testing target to xcode - failed to import bridging header won't go away
我通过我想使用的拖放框架解决了 Xcode 8.2.1 的这个问题。
我在这里有其他可行的解决方案,
退出 Xcode 打开 Xcode 并清理项目 先构建 Pods 项目 构建项目
link_with
指定我的其他目标对我有用。非常感谢。我只是在这上面花了几个小时。link_with
在 Cocoapods 1.0 或更高版本中不受支持。