iOS - 编译失败,CocoaPods无法找到头文件

问题描述:

我有一个使用CocoaPods的iOS项目。一切都很顺利,直到另一位开发人员开始在同一个项目上工作。他做出了一些改变(据我所知只做了代码),并在回购协议中创建了一个新分支。我检查了他的分支,并试图建立它,但我得到一个错误:未找到ASLogger/ASLogger.h文件。iOS - 编译失败,CocoaPods无法找到头文件

即使我删除了整个项目并创建了一个新副本并使用'pods安装'。构建失败仍然存在。你有什么想法可以解决问题的地方吗?如果你需要更多的信息,请问。

+2

而不是使用双引号样式,#import“ASLogger .h“我试过这个,#import 它对我有用:) – Baig 2013-06-05 11:05:39

+1

供参考:Baigs简单的答案解决了我的问题,没有找到标题。 – Pedroinpeace 2014-02-11 15:43:11

wiki就如何解决这一问题的建议:

If Xcode can’t find the headers of the dependencies:

Check if the pod header files are correctly symlinked in Pods/Headers and you are not overriding the HEADER_SEARCH_PATHS (see #1). If Xcode still can’t find them, as a last resort you can prepend your imports, e.g. #import "Pods/SSZipArchive.h".

+11

请问有人可以详细说明如何“检查pod头文件是否在Pod/Headers中正确符号链接”? – 2012-10-16 20:05:03

+0

请查看我的回答以上有关如何检查符号链接的答案 – brainray 2012-12-27 17:35:50

+0

在破坏导入语句之前,请同时参阅有关配置的brainray的回答。 – 2013-02-11 12:06:50

更新

,因为我原来的答复,即得到了downvote我已经更新了这一点,所以我希望这有助于。如果确实如此,希望它能让我的投票回来。

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

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

+2

我曾经遇到过问题:在删除或移动.svn子目录时,应用程序和'svn受阻文件夹问题'中未检测到Pod文件: 解决方案:通过以下步骤: 1.仅从应用程序卸载CocoaPods。 xcodeproj文件存在(参考:http://stackoverflow.com/questions/16427421/how-to-remove-cocoapods-from-a-project) 2.再次安装podfiles(参考:http://www.raywenderlich.com/12139 /引入到cocoapods) 3.在应用程序的目标“HEADER_SEARCH_PATHS”和“OTHER_LDFLAGS”中添加了$(继承)标志。 – 2014-04-16 12:09:44

+0

您可能还需要将$(继承)添加到FRAMEWORK_SEARCH_PATHS设置中。 – George 2014-05-25 16:55:39

+1

@ AlphonseR.Dsouza你的解决方案为我工作 - 感谢一百万加入$(继承)给OTHER_LDFLAGS!应该在项目设置或目标设置中添加$(继承)$ – 2015-12-06 11:32:34

其他答案在这里没有帮助。我发现2个可能会解决这个问题的其他问题:

编辑 您可以检查一个符号链接是这样的:创建一个文本文件名为“检查”没有扩展名。复制这些行到它:

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 
+0

非常感谢!第一个入口为我解决了它。 Pods仅在我们的项目中被设置为第一个目标。这编好,但其他目标没有。所以我也为它添加了Pods配置,现在问题已经消失。 – mwidmann 2013-06-07 11:22:42

+0

我在配置中看不到'Pods'。这是否意味着我的符号链接被破坏? – Adamski 2014-10-21 23:00:42

下面是我工作:

转到Target>“Build Settings”标签并找到“用户标题搜索路径”设置。

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

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

====

UPDATE

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

+1

这对我有用,但只有退出Xcode,运行'pod install'并重新打开后。 – 2015-11-02 21:53:13

+0

@Snowcrash什么目标? Pod目标或主要项目目标? – VAAA 2017-04-26 19:44:57

头文件,你会死我了......

终于得到它通过增加(包括引号)

"${PODS_ROOT}/BuildHeaders" 

到用户头搜索路径条目,并检查工作“递归”。

+5

请注意,引号在这里非常重要。没有他们,我无法实现它的工作。 – DiscDev 2013-09-29 00:30:55

+4

+1我已经有'$(继承)'(没有工作),但加入这对我工作。 – iwasrobbed 2013-12-05 17:13:34

+0

没有得到你想说的话。 :/请你详细说明一下吗? – 2014-06-25 20:20:42

您是否尝试导入Cocoapods风格?

#import <ASLogger.h> 

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

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

更新:他们把我的要求:)

+0

使用双引号风格, #进口“ASLogger.h” 我想这一点, #进口 而不是和它的工作对我来说:) – Baig 2013-06-05 11:02:06

+0

我之前已经试过这一点,它一直对我来说,但有时会出现不同的问题,当它不起作用。至少在某些情况下,您还可以使用格式。 – funroll 2014-03-27 23:04:27

+0

是的,这也适用于我!没有任何清理和删除派生数据的解决它,但这工作。 – PostCodeism 2015-11-20 23:31:10

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

这是确定的,我

+0

这是我的答案,我更新了cocoapods,我认为这使得PODS_HEADERS_SEARCH_PATHS消失。我的解决方案与此类似,但是我使用了“$(PODS_ROOT)/ Headers” – 2013-07-25 05:23:24

+0

其他答案对我来说不起作用,但是这样做了。我会注意到我没有包含“,所以我的标题搜索路径看起来像这个'''$(SRCROOT)/ Pods/Headers''' – Blakedallen 2015-05-20 03:41:35

+0

@Hlung hi,我需要在那里添加$(SRCROOT)/Pods/Headers /?Appreciate – VAAA 2017-04-26 15:42:16

更新

确保您Podfile包括上缺少一个配置文件的目标link_with。 Cocoapods only sets the first target by default否则。例如

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

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

------最终更新


注:请做笔记,你必须寻找到工程 - >信息 - >配置为下面的步骤。


我有类似的症状,发现没有被包括在特定targetpods.xcconfig文件我试图建立。其他一些建议的解决方案为我工作,但这似乎解决了一部分潜在问题。

Pods.xcconfig not working

简单的解决办法是改变设置的配置文件是没有一个确定的目标。

Pods.xcconfig working

+4

对我来说,''pods install''只在第一​​个目标上设置此项,按照这个答案中的建议解决了我的问题 – Troy 2013-08-24 20:50:15

+1

最后一个解决方案:Pods只添加到第一个目标,而不是添加到各种测试版本目标(alpha,beta,release候选版本)!非常多thanx! – JOM 2013-10-16 07:04:53

+0

使用'link_with'指定我的其他目标为我工作,非常感谢。我刚刚在这上面花了几个小时。 – 2014-10-17 00:59:16

我是5.0的Xcode的转基因种子,我不能得到任何回答这些问题的工作。我在关于标题导入w/cocoapods的多个不同问题上尝试了每个单独的答案。

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

我的系统上还有一个测试版的Xcode 5,我也删除了它。也许这是两件事的结合,但希望这可以帮助别人。

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

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

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

+0

我遇到了Localytics的Cocoapod问题,在其他链接器标志下,我找到了两个条目:' - | Localytics'和'| --PodsLocalytics '我删除了那些,然后能够编译 – Chris 2016-01-26 18:22:37

我不得不从下载中心混帐的拉链和在波德/对应的路径拖动丢失的文件到Finder中......

无答案的帮助我(我有我的豆荚所有指标挂钩,正确构建配置设置,设置搜索路径“$(继承)”等)。

问题本身消失我更新的CocoaPods到最新,使用调试版本标准安装/更新命令之后:

gem install cocoapods --pre 

或:

sudo gem install cocoapods --pre 

(如果安装过程中使用须藤)。

它一定是cocoapods错误。

如果你有一个后建设的错误“吊舱安装”或“荚更新”,它可能是当你还在用以前的你豆荚一个已建成的XCode 6.3版。

在我来说,我不得不从小牛到优胜美地更新我的OSX拥有的Xcode 6.3和解决问题

+0

嗨@omaty,这是唯一的解决方案吗?我目前在Xcode 6.2上运行小牛队 – goelv 2015-04-23 04:20:19

+1

你好@goelv在我的情况下,这是我发现的唯一解决方案。就像你在Mavericks和Xcode 6.2下一样 – Omaty 2015-04-23 11:42:11

+0

我认为即使我有同样的问题,我的队友在Yosemite有Xcode 6.3,对他来说工作得很好,但是我努力摆脱头部不是为了在Xcode 6.2中的Mavericks中没有问题。 – 2015-04-27 08:12:49

1.检查

build settings -> Search Path -> User Header Search Paths ->

  • “$ {} PODS_ROOT /” 递归

enter image description here

enter image description here

enter image description here enter image description here

2。如果检查进口的风格(KEY POINT), 您的podfile已设置

use_frameworks!

在你File-Bridging-Header.h,格式化应该喜欢这个

#import "MBProgressHUD.h"

其他应低于

#import <MBProgressHUD.h>

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

+1

大多数错误消失。但是,如果依赖项具有如下导入语句,我该怎么办?#import 。 然后编译器告诉我改为编写#import EARestrictedScrollView.h。但我无法修改我的吊舱。 – slashburn 2016-05-22 18:54:27

我会更新我的生成设置下面的东西,我没有得到任何错误。检查这些是更新你的cocoapods时的事情。

构建设置

Enable Bit code - YES(if you are using bitcode)

Macro preprocessor - $(inherited)

Other linker flag - objc, -lc++, $(inherited)

构建结构仅

Debug - Yes

Relese - No

搜索路径

Framework search path - $(inherited) $(PROJECT_DIR)

Library search path - $(inherited)

Header search path - $(inherited)

如果没有日。上面的工作为你,你正在发现这个错误,因为你刚刚在你的Podfile切换到use_frameworks!,阅读:

我试过以上所有的解决方案和更多,才知道它不是关于搜索标题路径所有在我的具体情况;这就是当你在你的Podfile中切换到use_frameworks!时,你不再需要在你的桥接头中包含框架,事实上Xcode会抛出无用的“找不到头”错误。

你需要做的是从你的桥接头文件中删除所有的输入,并且根据需要在你的Swift文件中使用Swift import Module,就像Swift框架一样。

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

编辑:我已经知道,做一个@import Module使用更安全的伞文件。

选择Pods项目,找到并选择Pod项目的目标目录中缺少标题的目标框架,并在目标构建的“Architectures”下将“仅生成活动架构”设置为“否”设置。

我是团队中遇到同样问题的唯一开发者,它对每个人都非常合适,所以我意识到它必须是我的环境。我在另一个目录中尝试了相同项目的git clone,并且它编译得很完美,然后我意识到它必须是Xcode缓存的项目路径的某处,“某处”是DerivedData文件夹,只需将其删除并执行干净的构建你的项目,它为我工作。

你可以得到的路径,甚至在取景器通过去打开文件夹:

的Xcode - > - >位置 - > ** DerivedData

+1

在我的情况下,更新豆荚后出现问题,所以我认为在cocoapods应该搜索问题。我已经尝试过所有解决方案,但没有运气,最后只是清除了DerivedData - 它帮助了!谢谢 – Varrry 2016-10-31 16:40:32

有一个尝试注释此行的目标

# use_frameworks! 

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

我有同样的问题,但上述解决方案无法正常工作。 我已经这样定吧:

  1. 删除整个项目
  2. 运行git克隆项目并运行捆绑高管荚安装
  3. CD的peoject和运行远程添加上游您的远程-REP -add
  4. GIT中取上游
  5. GIT中结帐主
  6. GIT中合并上游/主

然后它工作。

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

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

pod install 

这里的另一个原因是:所有的头路径看起来很好,但我们仍然在预编译(.PCH)文件有错误试图读取吊舱标题

(即#import <CocoaLumberjack/CocoaLumberjack.h>)。我终于注意到这个错误打破了我们的Watch OS扩展目标,而不是我们正在构建的主要目标,因为我们还将.pch预编译头文件导入到Watch OS目标中,它在那里失败。确保您的伴随Watch OS目标设置不会尝试导入.pch文件(特别是如果您从主目标设置中设置导入,就像我一样!)