ChatGPT解决这个技术问题 Extra ChatGPT

iOS - 构建失败,CocoaPods 找不到头文件

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

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

而不是使用双引号样式,#import "ASLogger.h" 我尝试了这个,#import 它对我有用:)
仅供参考: Baigs 简单的答案解决了我找不到标题的问题。

r
rohan-patel

更新

确保您的 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


对我来说,“pods install”只在第一个目标上设置。按照这个答案中的建议做解决了我的问题。
最后一个解决方案:Pods 仅添加到第一个目标,而不是各种测试发布目标(alpha、beta、候选发布)!非常感谢!
使用 link_with 指定我的其他目标对我有用。非常感谢。我只是在这上面花了几个小时。
link_with 在 Cocoapods 1.0 或更高版本中不受支持。
@Vive 是正确的,“link_with”不受支持。我们应该改用“目标”。所以在这个示例中,它应该像这样改变 >>> target 'Pomo', 'Pomo Dev', 'Pomo Tests'
B
Bill Burgess

更新

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

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

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


我遇到过问题:在应用程序中未检测到 Pod 文件,并且当您删除或移动 .svn 子目录时会出现“svn 受阻文件夹问题”: 解决方案:通过以下步骤:1.仅从应用程序中卸载 CocoaPods。 xcodeproj 文件存在(参考:stackoverflow.com/questions/16427421/…) 2.Installed podfiles 再次(参考:raywenderlich.com/12139/introduction-to-cocoapods) 3. $(inherited) 标志添加到应用程序的目标“HEADER_SEARCH_PATHS”和“OTHER_LDFLAGS”中。
您可能还需要将 $(inherited) 添加到您的 FRAMEWORK_SEARCH_PATHS 设置中。
@AlphonseR.Dsouza 您的解决方案对我有用 - 将 $(inherited) 添加到 OTHER_LDFLAGS 感谢一百万!
$(inherited) 应该添加到项目设置或目标设置中吗?
我有类似的问题,我过去没有使用豆荚的经验。在 Podfile 中,我也没有提到 2 个目标。是的,我有 2 个目标。一旦我提到了第二个目标并更新了 Pod 文件,终端就会发出一些警告,类似于您添加 $inherrited 的建议。我做到了,而且效果很好。
A
Albert.Qing

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.那一定是工作!相信我


大多数错误都会消失。但是,当依赖项具有如下导入语句时我该怎么办:#import 。然后编译器告诉我改为编写#import EARestrictedScrollView.h。但我无法修改我的 pod。
a
averydev

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

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

"${PODS_ROOT}/BuildHeaders"

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


请注意,引号在这里非常重要。没有他们,我无法让它工作。
+1 我已经有 $(inherited)(没有工作),但添加它对我有用。
没有得到你想说的。 :/ 你能详细说明一下吗?
另一个方便的技巧是清除工作空间和 pods 目录并重新安装 pod。这通常是一个更完整的解决方案。
这最终帮助 AppCode 正确找到所有头文件导入。没有这个,它在 xCode 中有效,但在 AppCode 中无效。谢谢!
A
Aamir

我发现 ${PODS_HEADERS_SEARCH_PATHS} 丢失并且它没有在我的开发 git 分支中定义,所以我添加了 "$(SRCROOT)/Pods/Headers/" 用于递归的标题搜索路径

这对我来说没问题


这就是我的答案,我更新了 cocoapods,我认为这让 PODS_HEADERS_SEARCH_PATHS 消失了。我的解决方案与此类似,但我使用了“$(PODS_ROOT)/Headers”
其他答案对我不起作用,但这个答案对我有用。请注意,我没有包含“,因此我的标题搜索路径看起来像这样 $(SRCROOT)/Pods/Headers
@Hlung 嗨,我必须在哪里添加 $(SRCROOT)/Pods/Headers/ ?欣赏它
@VAAA 目标 > 构建设置 > 标头搜索路径
我认为这是应该接受的正确答案,您认为@Filip Majernik
J
Jeromy French

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

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

非常感谢!第一个条目为我解决了它。仅在我们的项目中为第一个目标设置了 Pods。这编译得很好,但另一个目标没有。所以我也添加了 Pods 配置,现在问题消失了。
我在配置中没有看到“Pods”..这是否意味着我的符号链接已损坏?
S
Snowcrash

这对我有用:

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

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

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

====

更新

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


这对我有用,但只有在退出 Xcode、运行 pod install 并重新打开之后。
@Snowcrash 什么目标? pod 目标还是主要项目目标?
S
Scott Fister

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

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

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

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

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


T
Tieme

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

#import <ASLogger.h>

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

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

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


而不是使用双引号样式,#import "ASLogger.h" 我尝试了这个,#import 它对我有用:)
我以前试过这个,它对我有用,但有时当它不起作用时会出现不同的问题。至少在某些情况下,您还可以使用 格式。
是的,这对我也有用!没有多少清理和删除派生数据可以解决它,但这有效。
t
tilo

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

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


有人可以详细说明如何“检查 pod 头文件是否在 Pods/Headers 中正确符号链接”吗?
请参阅我上面的答案以了解如何检查符号链接
在您修改导入语句之前,还请参阅 Brainray 关于配置的答案。
是的,一些 pod 链接到无效目录,例如 $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h,还有一个额外的 ios 文件夹...
b
bithavoc

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

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

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


在我的情况下,更新 pod 后出现问题,所以我认为在 cocoapods 中应该搜索问题。我在这里尝试了所有解决方案,但没有成功,最后只是清除了 DerivedData - 它有帮助!谢谢你
P
Paolo Forgia

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

构建设置

启用位代码 - 是(如果您使用的是位代码) 宏预处理器 - $(inherited) 其他链接器标志 - objc、-lc++、$(inherited)

仅构建架构

调试 - 是 发布 - 否

搜索路径

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


J
Josh

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


兄弟 !你应该得到 1000 票。我被困了 4 个小时,你的解决方案帮助了我。非常感谢兄弟非常感谢!
O
Omaty

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

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


嗨@omaty,这是唯一的解决方案吗?我目前正在使用 Xcode 6.2 在 Mavericks 上运行
您好@goelv,就我而言,这是我找到的唯一解决方案。在 Mavericks 和 Xcode 6.2 下,我和你一样。
我想即使我也有同样的问题。我的队友在 Yosemite 中有 Xcode 6.3,它对他来说很好用,而我正在努力摆脱 Xcode 6.2 中 Mavericks 中的 header not found 问题。
跟进:我还将机器升级到 Yosemite 和 Xcode 6.3.1,我现在可以毫无问题地构建。
b
beryllium

对我来说,问题出在其他链接器标志值中。出于某种原因,我在 -l"xml2" -l"Pods-MBProgressHUD" 等标志中没有引号。


我在使用 Localytics 的 Cocoapod 时遇到了问题。在 Other Linker Flags 下,我找到了两个条目:-|Localytics|-PodsLocalytics。我删除了这些,然后能够编译。
n
neelamc23

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


A
Aaron

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


A
Azure Yu

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

删除整个项目 运行 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

然后它就起作用了。


D
DiscDev

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

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

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


u
user1494912

这就是我的答案,我更新了 cocoapods,我认为这让 PODS_HEADERS_SEARCH_PATHS 消失了。我的解决方案与此类似,但我使用了“$(PODS_ROOT)/Headers” – Andrew Aitken

非常感谢您的回答。我很难找到解决问题的方法。非常感谢。


L
Lukasz

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

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

   gem install cocoapods --pre

或者:

   sudo gem install cocoapods --pre

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

一定是cocoapods bug。


f
farhad rubel

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

pod install

我用这个解决方案解决了我的问题。
O
Owen Hartnett

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

(即#import )。

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


e
ehacinom

我发现将库作为 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 中的文件夹


S
Simon Moshenko

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

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


J
Josh

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

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


C
Community

尝试为您的目标评论此行

#  use_frameworks!

或者你可以参考我的另一个回答added unit testing target to xcode - failed to import bridging header won't go away


D
Dhruv Narayan Singh

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


P
Pramod More

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

退出 Xcode 打开 Xcode 并清理项目 先构建 Pods 项目 构建项目