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

Fil*_*nik 185 cocoa build objective-c ios cocoapods

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

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

wag*_*les 205

更新

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

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

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'
Run Code Online (Sandbox Code Playgroud)

------结束更新


注意:请注意,您必须查看项目 - >信息 - >配置,了解以下步骤.


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

Pods.xcconfig无法正常工作

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

Pods.xcconfig工作

  • 对我来说,''pods install''只在第一​​个目标上设置它.按照这个答案的建议解决了我的问题. (4认同)
  • Cocoapods 1.0或更高版本中不支持`link_with`. (4认同)

Bil*_*ess 89

更新

我已经更新了这个,因为我的原始答案,得到了downvote,所以我希望这有帮助.如果确实如此,希望它会得到我的投票.

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

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

  • 我遇到了问题:在应用程序中没有检测到Pod文件,并且在删除或移动.svn子目录时发生"svn阻塞文件夹问题":解决方案:通过以下步骤:1.仅从应用程序中卸载CocoaPods.存在xcodeproj文件(参见:http://stackoverflow.com/questions/16427421/how-to-remove-cocoapods-from-a-project)2.再次安装podfiles(参见:http://www.raywenderlich.com/ 12139/introduction-to-cocoapods)3.在应用程序的目标"HEADER_SEARCH_PATHS"和"OTHER_LDFLAGS"中添加了$(继承)标志. (2认同)
  • 应该在项目设置或目标设置中添加$(继承)? (2认同)

Alb*_*ing 77

1.检查

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

  • "$ {PODS_ROOT} /"递归

在此输入图像描述

在此输入图像描述

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

2.检查导入样式(KEY POINT),如果podfile已设置

use_frameworks!

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

#import "MBProgressHUD.h"

否则应该在下面

#import <MBProgressHUD.h>

那一定要工作!相信我


ave*_*dev 57

头文件,你将成为我的死...

最后通过添加(包括引号)使其工作

"${PODS_ROOT}/BuildHeaders"
Run Code Online (Sandbox Code Playgroud)

到用户标题搜索路径条目,并检查'​​递归'.

  • 请注意,引号在这里非常重要.没有它们,我无法让它发挥作用. (5认同)
  • +1我已经有了'$(继承)`(不工作)但添加这个对我有用. (5认同)

小智 52

我发现${PODS_HEADERS_SEARCH_PATHS}缺少它并且没有在我的开发git分支中定义,所以我添加 "$(SRCROOT)/Pods/Headers/"了Header Search Paths with recursive

这对我来说没问题


bra*_*ray 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
Run Code Online (Sandbox Code Playgroud)

然后转到终端,切换到检查文件所在的文件夹并键入

bash check
Run Code Online (Sandbox Code Playgroud)


Sno*_*ash 35

这对我有用:

转到目标>"构建设置"选项卡,找到"用户标题搜索路径"设置.

将其设置为"$(BUILT_PRODUCTS_DIR)"并选中"递归"复选框.

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

====

UPDATE

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


Sco*_*ter 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使用更安全的伞文件.


Tie*_*eme 16

你尝试过导入Cocoapods风格吗?

#import <ASLogger.h>
Run Code Online (Sandbox Code Playgroud)

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

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

更新:他们拉了我的请求:)


til*_*ilo 10

维基对如何解决这一问题的建议:

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

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

  • 有人可以详细说明如何"检查pod头文件是否在Pods/Headers中正确符号链接",对吗? (13认同)

bit*_*voc 9

我是团队中唯一遇到同样问题的开发人员,它对每个人都很有效,所以我意识到它必须是我的环境.我git clone在另一个目录中尝试了相同的项目并且编译得很完美,然后我意识到它必须是我的项目路径的某些地方的Xcode缓存,"某处"是DerivedData文件夹,只需删除它并做一个干净的构建你的项目,它对我有用.

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

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