Xcode:“没有这样的模块”嵌入式框架

Posted

技术标签:

【中文标题】Xcode:“没有这样的模块”嵌入式框架【英文标题】:Xcode: "No such module" embedded framework 【发布时间】:2015-07-15 16:22:45 【问题描述】:

我的项目中目前有 3 个嵌入式框架:

PersistenceLayer(仅限 Swift) TransportLayer(仅限 Swift) Socket(对象)

PersistenceLayerSocket 都不会引用自身之外的任何内容。但是TransportLayer 导入PersistenceLayerSocket。奇怪的是,我可以在导入后使用 PersistenceLayer 对象:

import PersistenceLayer

struct User : Model 
  ...

ModelPersistenceLayer 中定义,Xcode 让我可以正常使用它。但是,当我尝试构建 TransportLayer 时,我收到错误:No such Modul 'Persistencelayer'。所以 Xcode 会识别出模块存在,但在构建时会以某种方式“丢失”它。

令人抓狂的是,这曾经奏效。在某些时候发生了一些变化,我不知道是什么。重要的是要注意,我与多个开发人员一起从事一个项目,并且我有 merged 的更改。但是,在合并之前切换到提交不起作用。我也试过:

$(SRCROOT)(递归)添加到框架搜索路径 从ModuleCache 目录中删除所有内容 清理项目 清理构建文件夹

我怀疑我的项目设置发生了一些变化,但我不知道是什么,我检查了 git diffs 并没有帮助(除了正常的文件添加之外,项目中没有任何真正的变化。

另外,TransportLayer 确实成功导入并使用了Socket。如果我删除对 PersistenceLayer 的引用,但保留对 Socket 的所有引用,我可以构建 TransportLayer。

有谁知道为什么会发生这种情况或如何解决?

更新

好的,所以我从目标中删除了“有问题的”文件,以确保 Socket 正在工作(确实如此),然后将文件重新添加到目标中(实际上是通过重置 git)。它现在正在构建......因为这是有道理的。但是我尝试将 Scheme 从 ios Device 更改为模拟器,它不再构建,但我得到了不同的错误:

在 module.modulemap 中:HeaderPersistenceLayer-Swift.h' 未找到` 还有:Could not build Objective-C module 'Persistence Layer'

这感觉就像我在追踪随机错误......

【问题讨论】:

【参考方案1】:

我找到了答案:在TransportLayer 目标中打开构建阶段,然后手动将PersistenceLayerSocket 添加到目标依赖项。这确保了 TransportLayer 所依赖的任何东西都将在它之前构建。

我有一种预感,iOS Device 方案起作用的最初原因是因为我删除了有问题的文件,从而使所有内容都可以正确构建,包括缓存的PersistenceLayer。将导入添加回项目后,它继续工作,因为不再需要构建 PersistenceLayer。其他方案不起作用,因为PersistenceLayer 不是为这些架构构建的。我通过再次清理确认了这一点,但构建失败了。经过一番搜索,我找到了Target Dependencies 并在那里添加了我的两个依赖项。现在一切都在所有方案和所有架构中正确构建。

到目前为止,我的项目可能一直运行良好,因为它正在使用在我实际使用它们之前构建的缓存框架:(我在开始使用 TransportLayer 之前构建了 PersistenceLayer)。我可能最近某个时候清理了这个项目,它删除了缓存的框架并导致了问题。

【讨论】:

以上是关于Xcode:“没有这样的模块”嵌入式框架的主要内容,如果未能解决你的问题,请参考以下文章

我们啥时候应该在 Xcode 中使用“嵌入式二进制文件”而不是“链接框架”?

将 Swift 框架嵌入到另一个框架 Xcode

删除“DerivedData”后,Xcode 不会添加“嵌入式二进制”

什么是Xcode中的嵌入式二进制文件?

将框架从 SwiftPM 嵌入到 Cocoa 应用程序 (XCODE)

嵌入式二进制文件和链接框架有啥区别