Swift框架:找不到伞头 .h'

在包含Objective-CSwift代码的自定义框架中,Swift编译器会引发以下错误:

[build_path]/unextended-module.modulemap:2:19: error: umbrella header 'bugtest.h' not found umbrella header "bugtest.h" ^ <unknown>:0: error: could not build Objective-C module 'bugtest' 

这通常发生在项目重命名或类似的事情之后。 问题是伞标题不再被列为公共标题。 检查附加的图像,看看如何解决这个问题。

固定

在Xcode 7 Beta中,如果你的Framework Header没有声明为“Public”,那么Swift2也会发生。

例如,我有一个“项目”可见性的头文件的cocoa触摸框架,并为我的项目中的所有swift文件错误“伞头…找不到”,一旦我有头“公开”,错误消失了

这会发生,当为框架目标启用Always Search User Paths设置。

将其设置为“ No将解决该错误。

恕我直言,这是一个在Swift编译器中的错误,我已经提交了苹果的雷达。
请参阅rdar:// 21038443

有4种不同的方式可以发生,忽略以前版本的Xcode中的错误

  • 您的项目中没有名为$(TARGET_NAME).h的伞形标题
  • 你有一个伞头,但它不是公开的。 看到arturgrigor的答案
  • DEFINES_MODULE未设置为YES
  • CLANG_ENABLE_MODULES未设置为YES

对我来说 – 访问级别是公开的,但也没有find伞。 我确实将“构build阶段”的“标题”部分移到顶部,并开始工作。 脚本到podfile:

 post_install do |installer| installer.pods_project.targets.each do |target| phase_name = 'Headers' target.build_phases.each do |phase| if (phase.display_name.include? phase_name) target.build_phases.unshift(phase).uniq! unless target.build_phases.first == phase end end end 

不知道为什么会发生。 尝试虚拟项目 – 没有发生。 只在具有多个依赖关系的大个子上。 与复制伞标题之前编译的东西。

对于我设置“使用标题地图”为“否”解决了这个问题

还有一个解决scheme:重命名一个文件夹之后,即使您通过Xcode的侧栏更新了位置,旧位置仍然可以列在.h文件的项目文件中。 这个旧的位置导致伞头错误。

简单的解决scheme:删除对.h文件的引用,然后重新添加。 (然后记得再次公布!)

当然,你必须把你的框架设置为公开的:

在这里输入图像说明

这里有一些很好的答案。 @ Shadow_x99的是非常有帮助的。 但是,如果我可以被允许补充我自己的经验。

在构build过程中会自动识别伞头。 它不是在目标的构build设置中指定的,或者是从项目设置inheritance的。

所以为了避免这个错误 – 从XCode 7开始 – 如下所示:

warning: no umbrella header found for target 'MyTarget', module map will not be generated

必须采取两个重要步骤。

首先,伞头必须与目标名称相同 。 所以如果你的目标是一个名为MyTarget的框架,那么必须有一个名为MyTarget.h的头文件。

其次,在MyTarget的构build阶段 – 如答案中所述 – 该头文件必须如上所述在公开部分中列出。

如果您使用的是Xcode 7.1和CocoaPods 0.39,那么似乎会影响一些CocoaPods(Nimble,Quick等)的快速编译器更改。尝试以下线程中指定的一些解决scheme: https : //github.com/ CocoaPods / CocoaPods / issues / 4420然而,如果他们都不工作,请尝试使用Xcode 7.0.1或7.2 beta。 你可以在这里得到他们两个: https : //developer.apple.com/downloads/ 。

编辑:在我的情况下,要解决这个问题,我也不得不将CocoaPods降级到0.38.2。

后来编辑:似乎没有关系到Xcode 7.1。 只要将CocoaPods降级到0.38.2应该有所帮助:

 sudo gem uninstall cocoapods -v 0.39 sudo gem install cocoapods -v 0.38.2 

你的头文件需要在[Build Phases / Headers / Public]部分。

如果你的头文件已经在[Build Phases / Headers / Public]部分,那么下面的很多次就解决了我的问题:

  1. 清理项目
  2. 将头文件移动到“私人”或“项目”部分
  3. 将头文件移回到“公共”部分
  4. 再次重build一切

9个答案都没有帮助我,所以我试图创build一个新的项目,我可以发送给苹果提出一个错误。 我很惊讶,我不能重现这个问题。 我检查了构build设置,它们是相同的。 显然这是一些错误。

如果没有其他的帮助 ,尝试创build一个新的项目,并从当前项目中导入至less一些目标C和Swift类,比较你的框架相关的构build设置为新项目的默认值,最终将所有文件移动到新项目。

我已经做了一整天,但这是值得的。我尝试了所有的方法,但我没有解决。 我创build了一个新的项目,一个实验,我发现用户头部searchpath被设置为$ {SRCROOT}recursion ,并且我将它改为$ {SRCROOT}非recursion ,改变了桥接头部path(例如#import "SVProgressHUD.h" – > #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h" ),错误消失。