Swift框架:没有找到Umbrella标题'[...]。h'

时间:2015-05-20 16:14:52

标签: ios swift ios-frameworks

在包含 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'

23 个答案:

答案 0 :(得分:203)

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

Fix

答案 1 :(得分:43)

在XCode 7 Beta中,使用Swift2,如果您的Framework Header未被声明为&#34; Public&#34;

,也会发生这种情况。

例如,我有一个带有&#34;项目&#34;的Cocoa Touch Framework。头文件的可见性,以及错误&#34; Umbrella Header ...未找到&#34;对于我项目中的所有swift文件,一旦我有标题&#34; Public&#34;,错误就消失了

答案 2 :(得分:34)

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

  • 您的项目中没有名为$(TARGET_NAME).h的雨伞标题
  • 您有一个伞形标题,但它没有设置为公开标题。 See arturgrigor's answer
  • DEFINES_MODULE未设为YES
  • CLANG_ENABLE_MODULES未设为YES

答案 3 :(得分:25)

当为Framework目标启用Always Search User Paths设置时,会发生这种情况。

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

恕我直言,这是Swift编译器中的一个错误,我已经向Apple提交了一个雷达 见rdar://21038443

答案 4 :(得分:18)

对我来说 - 访问级别是公开的,但它也没有找到。我确实将“构建阶段”的“标题”部分移到了顶部并开始工作。 脚本到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

不知道为什么会发生这种情况。试图虚拟项目 - 没有发生。仅适用于具有多个依赖关系的大型问题。 在复制伞形标题之前编译的东西。

答案 5 :(得分:10)

当然,您必须将框架设置为公开:

enter image description here

答案 6 :(得分:7)

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

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

答案 7 :(得分:7)

对我来说,将“使用标题地图”设置为“否”解决了问题

答案 8 :(得分:4)

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

在构建过程中自动识别伞标题。 它不是在目标的构建设置中指定的,也不是从项目设置继承的。

所以为了避免这个错误 - 从XCode 7开始的 - 如下所示;

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

必须采取两个重要步骤。

首先,伞标题必须与目标具有相同的名称。因此,如果您的目标是名为MyTarget的框架,则必须有一个名为MyTarget.h的标头。

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

答案 9 :(得分:3)

我发现在新的Swift Build System和Parallelize Build开启方案后,我将得到类似此问题的错误。解决方案是链接到快速源文件中导入的框架。 (我认为以前可以构建该应用程序是因为刚好将框架链接到先前在串行构建队列中构建的东西)。

我编写了一个脚本来遍历工作空间中所有目标中的所有导入,并确保已将其框架链接到该目标中。

https://github.com/Jon889/SwiftImportChecker

答案 10 :(得分:1)

我遇到了同样的问题,建议的答案都无法解决我的问题,因此,如果有人遇到同样的问题,我将在此保留。

我在“构建阶段”中添加了“运行脚本”,但最终将其删除,这就是我开始得到错误的时间。

我的解决方案最终不得不清理项目,重新构建框架,然后正确构建我的应用程序项目。

答案 11 :(得分:0)

从项目目录中删除这些文件。 tmpFolder = Path.GetTempPath() C:\Users\<username>\AppData\Local\Temp\ .xcworkspace

更新pod并构建项目。

答案 12 :(得分:0)

以上这些修复都没有成功,但在对 cocoapods 进行大量调查后,我发现这个问题是由 git 配置引起的,其中没有在 git 文件系统中创建符号链接。需要这些符号链接让 Xcode 知道框架的头文件在哪里。

修复:

git config --global core.symlinks true

并为 git git reset --hard HEAD

重置文件系统

然后进行干净的构建。

答案 13 :(得分:0)

确保“构建设置”中的“导入路径”包含您要包含的文件...

答案 14 :(得分:0)

就我而言,我只是用它的方案构建了特定的框架。然后重建整个项目并解决了问题

答案 15 :(得分:0)

根据我的经验,您必须在目标上选择导致错误的框架,而不是项目目标。
然后进行编译,编译后将在项目目标上可用。

答案 16 :(得分:0)

我通过将module.modulemap重命名为moduleXYZ.modulemap并在项目设置中更改modulemap文件名来解决了此问题

答案 17 :(得分:0)

我通过将有问题的框架构建的“编译模式”设置为“增量”来解决了该问题。

答案 18 :(得分:0)

我可能是由于构建阶段中的删除标头脚本导致问题

function removeHeaders() {  
    find $BUILD_ROOT/...  -name '*.h' -exec rm -f {} \;  
}  
removeHeaders

删除此脚本可解决此问题。

答案 19 :(得分:0)

您的头文件需要位于[Build Phases / Headers / Public]部分。

如果您的头文件已经在[Build Phases / Headers / Public]部分中,那么多次执行fallowing解决了我的问题:

  1. 清理项目
  2. 将头文件移动到&#34; private&#34;或&#34;项目&#34;节
  3. 将标题文件移回&#34; public&#34;节
  4. 再次重建一切

答案 20 :(得分:0)

如果你正在使用Xcode 7.1和CocoaPods 0.39,似乎有一个快速的编译器更改会影响一些CocoaPods(Nimble,Quick等)尝试一下这个线程中指定的一些解决方案: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

答案 21 :(得分:-2)

我一直在研究它一整天,但这是值得的。我尝试了所有的方式here,但我没有解决它。我创建了一个新项目,一个实验,我发现用户标题搜索路径已设置为 $ {SRCROOT}递归,我将其更改为 $ {SRCROOT }非递归,更改了桥接标题路径(例如#import "SVProgressHUD.h" - &gt; #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"),错误就消失了。

答案 22 :(得分:-2)

9个答案都没有帮助我,所以我尝试创建一个新项目,我可以发送给Apple提交bug。我很惊讶我无法重现这个问题。我检查了构建设置,它们是等效的。显然这是某种错误。

如果没有别的帮助,请尝试创建一个新项目并导入至少一些Objective C&amp;当前项目中的Swift类,将与框架相关的构建设置与新项目的默认值进行比较,最终将所有文件移动到新项目中。