模块被禁用 - 但为什么呢?

Modules are disabled - but why?

我正在为项目中的模块而苦苦挣扎。在我使用@import 的地方,我得到 "Use of '@import' when modules are disabled"。但是为什么他们被禁用了?

我意识到加载第三方模块可能会减慢应用程序的加载时间。我正在使用 use_frameworks 转换为 CocoaPods!这样我就可以衡量多少。如果不是太糟糕,我想使用,因为我计划将代码库的多个 swift-only 部分移动到它们自己的框架中(作为开源 coocapods)

我相信这不是关于 SO 的其他问题的重复,因为我已经完成了我发现的问题(非常感谢 this one), followed the links, re-watched WWDC'13 session 404,并阅读了苹果论坛上的相关帖子,所以我相信我已经完成了功课。:-)

首先到终端输入xcode-select -p。它应该说,/Applications/Xcode.app/Contents/Developer。如果没有,则键入 sudo xcode-select -s /Applications/Xcode.app 并按回车键并输入您的密码。

如果这不能解决问题,请尝试删除项目的派生数据目录。转到项目视图并删除项目的派生数据。然后清理您的构建文件夹 (command-shift-K)。 运行 分析 (command-shift-B) 并解决蓝色和黄色的任何问题。

现在,如果@import 仍然不起作用,请创建一个全新的XCode 项目。验证 @import 是否在其中工作。如果没有,那么您的 XCode 安装可能搞砸了,或者您的 HDD 快死了。删除 XCode 和 re-download 它,看看是否有效。重新启动到恢复分区,看看您是否有一些磁盘问题(不太可能,但是嘿)。

如果@import 在新项目中有效,请尝试从当前项目中取出所有内容并将它们复制到新项目中。确保您拥有最新版本的 cocoapods,然后将 pods 全新安装到新项目中。

如果所有这些都不能解决问题,您可能在某处遗漏了 @end 语句或缺少 } ...

在我的项目中,我有一个桥接 header 从 ObjC 桥接到 Swift,并且有一个生成的 header 文件从 Swift 桥接到 ObjC。事实证明,如果桥接 header 引用了 headers,其中实现文件引用了从 Swift 到 ObjC 的桥接文件,模块支持将被禁用。因此,请注意您在桥接文件中放置的内容,并注意何时导入生成的 -Swift.h 文件。