Swift框架:找不到伞头 .h'
在包含Objective-C和Swift代码的自定义框架中,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和Swift2中,如果你的Framework Header没有被声明为“公共”
例如,我有一个“项目”可见性的头文件的cocoa触摸框架,并为我的项目中的所有swift文件错误“伞头…没有find”,一旦我有头“公开”,错误消失了
这会发生,当为框架目标启用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]部分中,那么下面的许多次就解决了我的问题:
- 清理项目
- 将头文件移动到“私人”或“项目”部分
- 将头文件移回到“公共”部分
- 再次重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"
),错误消失。