Swift Framework: 找不到伞头’[ ... ] . h’

在同时包含 目标 C斯威夫特代码的自定义框架中,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'
76576 次浏览

这将在为 Framework 目标启用 Always Search User Paths设置时发生。

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

恕我直言,这是一个错误,在迅速编译器和我已经提交了一个雷达与苹果。
参见 http://www.openradar.me/Radar? id = 6082318405992448”rel = “ noReferrer”> rdar://21038443

在 Xcode 7 Beta 中,使用 Swift 2时,如果框架 Header 没有声明为“ Public”,也会发生这种情况

例如,我有一个可可触摸框架,头文件的“项目”可见性,和错误“雨伞头... 未找到”的所有 Swift 文件在我的项目中,一旦我有头“公共”,错误消失了

对于我来说,设置“使用头部地图”为“否”解决了这个问题

如果你正在使用 Xcode 7.1和 CocoaPods 0.39,似乎有一个快速的编译器变化影响一些 CocoaPods (灵活,快速等)尝试一些解决方案在这个线程中指定: https://github.com/CocoaPods/CocoaPods/issues/4420但是,如果他们都不工作,尝试使用 Xcode 7.0.1或7.2测试版。你可以在这里找到它们: https://developer.apple.com/downloads/

编辑: 在我的例子中,为了解决这个问题,我还必须将 CocoPods 降级到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

这通常发生在项目重命名或类似的事情之后。问题是伞标头不再作为 公众人士标头列出。检查附加的图像,看看如何修复这一点。

Fix

你的头文件需要在[构建阶段/头/公共]部分。

如果你的头文件已经在[构建阶段/头/公共]部分,多次执行下列操作解决了我的问题:

  1. 清理项目
  2. 将头文件移动到“ private”或“ project”部分
  3. 将头文件移回“ public”部分
  4. 重建一切

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

完全不知道为什么会这样。试过做空头项目,没戏。只对具有多个依赖关系的大的。 在复制伞头之前进行编译。

9个答案都没有帮助到我,所以我试着创建一个新的项目,我可以发送到苹果公司,以提交一个错误。我很惊讶我不能复制这个问题。我检查了构建设置,它们是等价的。显然这是某种窃听器。

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

这里已经有一些很好的答案了。@ Shadow _ x99很有帮助。然而,如果我可以补充我自己的经验。

伞头在构建过程中被自动识别

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

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

必须采取两个重要步骤。

首先,伞头必须有 和目标同名。因此,如果您的目标是一个名为 MyTarget的框架,那么必须有一个名为 MyTarget.h的头文件。

其次,在 MyTarget的构建阶段——正如上面的答案中所提到的——头文件必须在 公众地方中列出,如上所述。

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

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

忽略之前版本的 Xcode 中的 bug,有4种不同的方式可以实现这一点

  • 在项目中没有名为 $(TARGET _ NAME) . h 的伞头
  • 您有一个伞头,但是没有设置为 public
  • DEFINES_MODULE没有设置为 YES
  • CLANG_ENABLE_MODULES没有设置为 YES

毫无疑问,你必须将你的框架公之于众:

enter image description here

我已经研究了一整天,但是很值得。我尝试了所有 这里,的方法,但是我没有解决它。我创建了一个新的项目,一个实验,我发现 用户标题搜索路径被设置为 ${ SRCROOT }递归,我把它改为 ${ SRCROOT }非递归,改变了桥头路径(例如 #import "SVProgressHUD.h"-> #import "Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h") ,错误消失了。

我也遇到过同样的问题,所有建议的答案都对我的情况没有帮助,所以我把这个留在这里,以防有人也遇到同样的问题。

我在“构建阶段”中添加了一个“运行脚本”,但最终删除了它,这时我开始得到错误。

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

从项目目录中删除这些文件。 pods/podfile.lock

更新分离舱,建立项目。

我发现随着新的 Swift Build 系统和 Parallelize Build 打开方案,我会得到类似这个问题的错误。解决方案是链接到快速源文件中导入的框架。(我认为之前应用程序会构建是因为框架刚好链接到之前在串行构建队列中构建的东西)。

我编写了一个脚本来遍历工作区中所有目标中的所有导入,并确保它们的框架已经在该目标中链接。

Https://github.com/jon889/swiftimportchecker

在我的案例中,问题是由构建阶段中的移除头脚本引起的

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

删除这个脚本修复了这个问题。

我通过将有问题的框架的编译模式构建设置设置为增量来修复它。

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

根据我的经验,你必须选择给你错误的框架,而不是项目目标。
然后编译,编译之后,它将在项目目标上可用。

在我的例子中,我只是用它的方案构建特定的框架。然后重建整个项目,解决了问题

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

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

解决办法:

git config --global core.symlinks true

并为 git git reset --hard HEAD重置文件系统

然后做一个干净的建造。

在我的例子中,问题似乎是 Xcode 13.3(13E113)的安装不完整。

这个错误将我引向了这一点:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.4.sdk/System/Library/Frameworks/Accessibility.framework/Modules/module.modulemap:2:19: umbrella header 'Accessibility.h' not found

事实证明,头文件在 SDK 中(在 Xcode 应用程序包中)确实缺失了。查看该 Accessibility.framework包的 Headers目录。

应该是这样的:

$ ls -l
total 80
-rw-r--r--  7 andrew  staff  12307 Feb 23 06:14 AXAudiograph.h
-rw-r--r--  1 andrew  staff   2013 Feb 23 06:57 AXBrailleMap.h
-rw-r--r--  1 andrew  staff    402 Feb 23 06:57 AXColorUtilities.h
-rw-r--r--  1 andrew  staff   2612 Feb 23 06:57 AXCustomContent.h
-rw-r--r--  1 andrew  staff    395 Feb 17 01:04 AXFoundation.h
-rw-r--r--  1 andrew  staff   2109 Feb 23 06:57 AXHearingUtilities.h
-rw-r--r--  1 andrew  staff    349 Feb 17 01:04 Accessibility.h

但在这台 Mac 上,那个目录是空的:

$ ls -l
total 0

我们还不确定这是怎么发生的。但是 Xcode 的这个特例是安装在 CI 中的,而 Xcode 的安装是自动化的。

确保 HEADER Search Path (HEADER _ SEARCH _ PATHS)将设置点构建到包含在模块中的 HEADER 的目录。