Tim*_*eit 107 ios ios-frameworks swift
在包含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'
Run Code Online (Sandbox Code Playgroud)
art*_*gor 219
这通常发生在项目重命名之后或类似的事情之后.问题是伞标题不再列为公共标题.检查附加的图像以查看如何解决此问题.
Cla*_*ule 43
在XCode 7 Beta中,使用Swift2,如果您的Framework Header未被声明为"Public",也会发生这种情况.
例如,我有一个Cocoa Touch Framework,头文件的"Project"可见性,以及我的项目中所有swift文件的错误"Umbrella Header ... not found",一旦我有标题"Public",错误消失了
Cla*_*sen 38
这有四种不同的方式可以发生,忽略了以前版本的Xcode中的错误
DEFINES_MODULE 未设置为 YESCLANG_ENABLE_MODULES 未设置为 YESTim*_*eit 25
当Always Search User Paths为Framework目标启用该设置时,会发生这种情况.
将其设置为No将解决该错误.
恕我直言,这是Swift编译器中的一个错误,我已经向Apple提交了一个雷达.
见rdar:// 21038443
Ale*_*aev 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
Run Code Online (Sandbox Code Playgroud)
不知道为什么会这样.试图虚拟项目 - 没有发生.仅适用于具有多个依赖关系的大型问题.在复制伞形头之前编译的东西.
还有一个解决方案:重命名文件夹后,即使您通过Xcode的侧栏更新了位置,旧位置仍可能会列在.h文件的项目文件中.这个旧位置导致伞头错误.
简单的解决方案:删除对.h文件的引用,然后重新添加.(然后记得再次公开!)
这里已经有一些很好的答案了。@Shadow_x99 非常有帮助。不过,如果可以让我补充一下我自己的经验的话。
伞形标头在构建过程中自动识别。它不是在目标的构建设置中指定的,也不是从项目设置继承的。
因此,为了避免此错误,从 XCode 7 开始,如下所示:
warning: no umbrella header found for target 'MyTarget', module map will not be generated
必须采取两个重要步骤。
首先,伞头必须与目标具有相同的名称。因此,如果您的目标是名为 的框架MyTarget,则必须有一个名为 的标头MyTarget.h。
其次,在构建阶段- 正如该答案中提到的 - 该头文件必须在公共部分MyTarget中列出,如上所述。
我发现随着 New Swift Build System 和 Parallelize Build 打开该方案,我会得到类似这个问题的错误。解决方案是链接到在 swift 源文件中导入的框架。(我认为以前该应用程序会构建,因为恰巧框架已链接到先前在串行构建队列中构建的某些内容)。
我编写了一个脚本来检查工作区中所有目标中的所有导入,并确保它们的框架已链接到该目标中。
https://github.com/Jon889/SwiftImportChecker
| 归档时间: |
|
| 查看次数: |
49193 次 |
| 最近记录: |