204

我有一个使用 CocoaPods 的 iOS 项目。一切都很顺利,直到另一个开发人员开始从事同一个项目。他做了一些更改(据我所知仅对代码进行了更改)并在 repo 中创建了一个新分支。我检查了他的分支并尝试构建它,但我收到一个错误:找不到 ASLogger/ASLogger.h 文件。

即使我删除整个项目并制作新副本并使用“pods install”。构建失败仍然存在。你知道问题出在哪里吗?如果您需要更多信息,请询问。

4

29 回答 29

207

更新

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

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------ 结束更新


注意:请注意,您必须查看 Project->Info->Configurations 以了解以下步骤。


我有类似的症状,发现该pods.xcconfig文件未包含在target我尝试构建的特定文件中。其他一些建议的解决方案对我有用,但这个似乎解决了部分潜在问题。

Pods.xcconfig 不工作

简单的解决方案是为没有设置的目标更改设置配置文件。

Pods.xcconfig 工作

于 2013-05-22T23:54:22.663 回答
96

更新

自从我的原始答案被否决以来,我已经更新了这个,所以我希望这会有所帮助。如果确实如此,希望它会收回我的投票。

如果标题没有被导入,你可能在HEADER_SEARCH_PATHS. 尝试添加$(inherited)到构建设置中的标题搜索路径,以确保它从 CocoaPods 中提取 .xcconfig 文件中包含的任何搜索路径。

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

于 2012-08-27T13:19:54.377 回答
83

1.检查

构建设置 -> 搜索路径 -> 用户标题搜索路径 ->

  • "${PODS_ROOT}/" 递归

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述 在此处输入图像描述

2.检查导入样式(关键点),如果你的podfile设置

use_frameworks!

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

#import "MBProgressHUD.h"

否则应该在下面

#import <MBProgressHUD.h>

3.那一定是工作!相信我

于 2015-07-05T08:03:21.950 回答
62

头文件,你会是我的死...

最后通过添加(包括引号)让它工作

"${PODS_ROOT}/BuildHeaders"

到用户标题搜索路径条目,并检查“递归”。

于 2013-03-14T03:31:57.027 回答
53

我发现${PODS_HEADERS_SEARCH_PATHS}它丢失了,它没有在我的开发 git 分支中定义,所以我添加 "$(SRCROOT)/Pods/Headers/"了带有递归的 Header Search Paths

这对我来说没问题

于 2013-05-15T08:32:40.343 回答
35

这对我有用:

转到目标>“构建设置”选项卡并找到“用户标题搜索路径”设置。

将此设置为“$(BUILT_PRODUCTS_DIR)”并选中“递归”复选框。

现在构建的目标将搜索工作区的共享构建目录以找到可链接的头文件。

====

更新

我最近遇到了类似(尽管略有不同)的问题。事实证明 Xcode 找不到 Pod,因为我打开的是.xcodeproj文件而不是.xcworkspace文件。将来可能会帮助其他人。

于 2013-01-07T19:11:17.130 回答
35

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

编辑 您可以通过这种方式检查符号链接:创建一个名为“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
于 2012-12-27T13:05:21.397 回答
19

如果上述方法都不适合您,并且您发现此错误是因为您刚刚切换到use_frameworks!Podfile,请继续阅读:

在得知在我的特定情况下根本与搜索标题路径无关之前,我尝试了上述所有解决方案以及更多解决方案;那是当您切换到use_frameworks!Podfile 时,您不再需要在桥接头中包含框架,实际上 Xcode 会抛出非常无用的“无法找到标头”错误。

您需要做的是从您的桥接头文件中删除所有导入,而是import Module根据需要在您的各个 Swift 文件中使用 Swift,就像您对 Swift 框架所做的那样。

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

编辑:从那以后,我了解到做一个@import Module使用更安全的保护伞文件。

于 2016-05-18T03:33:33.573 回答
18

您是否尝试过导入 Cocoapods 样式?

#import <ASLogger.h>

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

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

更新:他们撤回了我的请求 :)

于 2013-04-17T13:53:16.570 回答
10

wiki提供了有关如何解决此问题的建议:

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

检查 pod 头文件是否在 Pods/Headers 中正确符号链接,并且您没有覆盖 HEADER_SEARCH_PATHS(参见 #1)。如果 Xcode 仍然找不到它们,作为最后的手段,您可以在导入之前添加,例如 #import "Pods/SSZipArchive.h"。

于 2012-08-20T12:39:50.447 回答
9

我是团队中唯一遇到同样问题的开发人员,它对每个人都很有效,所以我意识到它必须是我的环境。我在另一个目录中尝试了git clone同一个项目,它编译得很好,然后我意识到它必须是 Xcode 为我的项目路径缓存的东西,“某处”是 DerivedData 文件夹,只需将其删除并干净构建你的项目,它对我有用。

您可以通过以下方式获取路径,甚至可以在 finder 中打开文件夹:

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

于 2016-06-10T00:57:45.183 回答
4

我将在我的构建设置中更新以下内容,并且没有收到任何错误。在更新你的 cocoapods 时检查这些东西。

构建设置

启用位码 - 是(如果您使用的是位码)

宏预处理器 - $(inherited)

其他链接器标志 - objc、-lc++、$(inherited)

仅构建架构

调试 - 是

释放 - 否

搜索路径

框架搜索路径 - $(inherited) $(PROJECT_DIR)

库搜索路径 - $(inherited)

标头搜索路径 - $(inherited)

于 2015-10-13T06:23:09.960 回答
2

如果您在“ pod install ”或“ pod update ”之后出现构建错误,则可能是您的一个 pod 是使用XCode 6.3构建的,而您仍在使用以前的版本。

就我而言,我必须将我的 OSX 从 Mavericks 更新到 Yosemite 才能拥有 Xcode 6.3 并解决问题

于 2015-04-09T18:41:57.823 回答
1

对我来说,问题出在其他链接器标志值中。出于某种原因,我在诸如-l"xml2" -l"Pods-MBProgressHUD".

于 2014-10-17T16:07:28.603 回答
1

我必须从 git hub 下载 zip 并将丢失的文件拖到 Pod/... 中相应路径的 Finder 中

于 2014-11-20T20:40:49.027 回答
1

我也遇到了同样的问题,但是上面的解决方法都行不通。我通过这样做修复了它:

  1. 删除整个项目
  2. 运行 git clone 项目并运行 bundle exec pod install
  3. cd peoject 并运行 remote add upstream your-remote-rep-add
  4. git 获取上游
  5. git结账大师
  6. git 合并上游/主

然后它就起作用了。

于 2016-09-05T03:57:44.863 回答
1

对我来说,解决问题的是我的 Pods 项目的 iOS 部署目标低于我的项目本身。一旦我将它与我的项目相同,它就能够找到头文件。

于 2018-08-02T23:06:12.497 回答
1

对我有用的是选择 Pods 项目,在 Pod 项目的目标目录中查找并选择缺少标头的目标框架,并在目标的构建设置中的“架构”下将“仅构建活动架构”设置为“否”。

于 2016-06-04T19:48:18.617 回答
0

This was the answer for me, I updated cocoapods and I think that made the PODS_HEADERS_SEARCH_PATHS go away. My solution was similar to this but I used "$(PODS_ROOT)/Headers" – Andrew Aitken

Thank you so much for this answer. I had a hard time looking for ways to fix my problem. Thank you very much.

于 2014-05-02T03:02:46.937 回答
0

没有一个答案对我有帮助(我将我的 pod 与所有目标链接,正确构建配置设置,正确设置搜索路径“$(继承)”等...)。

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

   gem install cocoapods --pre

或者:

   sudo gem install cocoapods --pre

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

一定是cocoapods bug。

于 2015-03-09T07:16:21.400 回答
0

我在 Xcode 5.0 的 GM 种子上,我无法得到任何这些答案。我在关于带有 cocoapods 的标头导入的多个不同问题上尝试了关于 SO 的每一个答案。

最后,我找到了一个对我有用的解决方案:我通过 Mac AppStore(安装在 GM 种子之上)升级到 Xcode 5.0,现在标题导入按预期工作。

我的系统上还有一个 Xcode 5 的测试版,我也删除了它。也许这是两者的结合,但希望这对其他人有所帮助。

于 2013-09-30T20:03:49.977 回答
0

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

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

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

于 2017-03-22T16:57:35.927 回答
0

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

pod install
于 2017-02-15T06:46:16.807 回答
0

我发现将库作为 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

于 2018-10-29T10:04:38.380 回答
0

如果您使用的是 Xcode 12 或更高版本,请确保您的 Pod 正在针对正确的架构(Intel vs. ARM)进行编译。检查您是否在任何地方有VALID_ARCHSEXCLUDED_ARCHS设置。

config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'的 Podfile 中有,这阻止了编译器找到 Pod 头文件。

于 2022-01-08T21:54:51.693 回答
0

我认为最终的解决方案是去Build settings -> Search Path -> User Header Search Paths,找到你的图书馆路径并在 Finder 中浏览它。确保所有路径都存在,包括您的导入路径。

对我来说,我的路径比教程中的要短。在教程中它有点像#import <SDK/path/to/sdk/File.h>,但事实证明它只是#import <SDK/File.h>

于 2020-05-26T16:20:08.267 回答
-2

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

于 2016-12-27T12:25:51.777 回答
-2

尝试为您的目标评论此行

#  use_frameworks!

或者您可以参考我的另一个答案, 将单元测试目标添加到 xcode - 导入桥接头失败不会消失

于 2016-07-19T12:58:03.040 回答
-2

我在这里有其他可行的解决方案,

  1. 退出 Xcode
  2. 打开 Xcode 并清理项目
  3. 首先构建 Pods 项目
  4. 构建项目
于 2018-10-04T05:38:38.443 回答