Ios Swift框架:伞头&x27;[…]h';找不到
在同时包含Objective-C和Swift代码的自定义框架中,Swift编译器抛出以下错误:Ios Swift框架:伞头&x27;[…]h';找不到,ios,swift,ios-frameworks,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
[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'
[build\u path]/未展开的模块。模块映射:2:19:错误:未找到伞形头“bugtest.h”
伞头“bugtest.h”
^
:0:错误:无法生成Objective-C模块“bugtest”
当为框架目标启用了始终搜索用户路径
设置时,将发生这种情况
将其设置为No
将解决该错误
我知道这是Swift编译器中的一个bug,我已经向苹果公司提交了一份雷达文件。请参阅Xcode 7 Beta版中的,在使用Swift 2时,如果框架头未声明为“Public”,也会发生这种情况
例如,我有一个Cocoa Touch框架,它的头文件具有“Project”可见性,并且在我的项目中所有Swift文件都出现了错误“伞形头…找不到”,当我的头文件为“Public”时,错误就消失了,似乎有一个快速的编译器更改影响了一些cocoapod(灵活、快速等)。请尝试此线程中指定的一些解决方案:但是,如果两者都不起作用,请尝试使用Xcode 7.0.1或7.2 beta。您可以在此处同时获取这两个参数: 编辑:在我的例子中,为了解决这个问题,我还不得不将CocoaPods降级到0.38.2 稍后编辑:它似乎与Xcode 7.1无关。将椰子荚降到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]部分中,那么多次执行休耕可以解决我的问题:
对我来说,访问级别是公共的,但在未找到的情况下也会失败。我确实将“构建阶段”的“标题”部分移到了顶部,它开始工作了。 到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个答案中没有一个对我有帮助,所以我尝试创建一个新的项目,我可以将它发送给苹果公司以归档一个bug。我很惊讶我不能重现这个问题。我检查了构建设置,它们是等效的。显然这是某种错误
如果没有其他帮助,请尝试创建一个新项目,并从当前项目中导入至少一些客观的C&Swift类,将与框架相关的构建设置与新项目中的默认值进行比较,最终将所有文件移到新项目中。这里已经有一些很好的答案@Shadow_x99非常有用。然而,如果我能被允许补充我自己的经验 在构建过程中自动识别伞形标头。它不是在目标的生成设置中指定的或从项目设置继承的 为了避免这个错误,从XCode 7开始,如下所示:
警告:未找到目标“MyTarget”的伞形标题,将不会生成模块映射
必须采取两个重要步骤
首先,伞头必须具有与目标相同的名称。因此,如果您的目标是一个名为MyTarget
的框架,那么必须有一个名为MyTarget.h
的头
其次,在
MyTarget
的构建阶段-如该回答中所述-该头文件必须列在公共部分中,如上所述。还有一个解决方案:重命名文件夹后,旧位置可能仍会列在.h文件的项目文件中,即使您通过Xcode的侧栏更新了位置。此旧位置导致伞头错误
简单解决方案:删除对.h文件的引用,然后重新添加。(然后记得再次公开!)这有4种不同的方式,忽略以前版本的Xcode中的bug
- 您的项目中没有名为$(TARGET_NAME).h的伞形标题
- 您有伞头,但未设置为公共李>
未设置为定义\u模块
是
未设置为CLANG_ENABLE_MODULES
YES
我花了一整天的时间研究它,但它是值得的。我尝试了所有的方法,但没有解决它。我创建了一个新项目,一个实验,我发现用户头搜索路径设置为${SRCROOT}递归的,我将其更改为${SRCROOT}非递归的,更改了桥接头路径(例如
#import“SVProgressHUD.h”
->#import“Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h”
),错误消失了。我遇到了同样的问题,建议的答案对我的情况都没有帮助,所以我将此留在这里,以防有人遇到同样的问题
我在“构建阶段”中添加了一个“运行脚本”,但最终删除了它,这时我开始出现错误
我的解决方案最终不得不清理项目,重建框架,然后正确构建应用程序项目。从项目目录中删除这些文件。
.xcworkspace
pods/
和podfile.lock
更新pod并构建项目。我发现使用新的
function removeHeaders() {
find $BUILD_ROOT/... -name '*.h' -exec rm -f {} \;
}
removeHeaders