Xcode:“没有这样的模块”嵌入式框架
Posted
技术标签:
【中文标题】Xcode:“没有这样的模块”嵌入式框架【英文标题】:Xcode: "No such module" embedded framework 【发布时间】:2015-07-15 16:22:45 【问题描述】:我的项目中目前有 3 个嵌入式框架:
PersistenceLayer
(仅限 Swift)
TransportLayer
(仅限 Swift)
Socket
(对象)
PersistenceLayer
和 Socket
都不会引用自身之外的任何内容。但是TransportLayer
导入PersistenceLayer
和Socket
。奇怪的是,我可以在导入后使用 PersistenceLayer
对象:
import PersistenceLayer
struct User : Model
...
Model
在PersistenceLayer
中定义,Xcode 让我可以正常使用它。但是,当我尝试构建 TransportLayer
时,我收到错误:No such Modul 'Persistencelayer'
。所以 Xcode 会识别出模块存在,但在构建时会以某种方式“丢失”它。
令人抓狂的是,这曾经奏效。在某些时候发生了一些变化,我不知道是什么。重要的是要注意,我与多个开发人员一起从事一个项目,并且我有 merged
的更改。但是,在合并之前切换到提交不起作用。我也试过:
$(SRCROOT)
(递归)添加到框架搜索路径
从ModuleCache
目录中删除所有内容
清理项目
清理构建文件夹
我怀疑我的项目设置发生了一些变化,但我不知道是什么,我检查了 git diffs 并没有帮助(除了正常的文件添加之外,项目中没有任何真正的变化。
另外,TransportLayer
确实成功导入并使用了Socket
。如果我删除对 PersistenceLayer
的引用,但保留对 Socket
的所有引用,我可以构建 TransportLayer。
有谁知道为什么会发生这种情况或如何解决?
更新
好的,所以我从目标中删除了“有问题的”文件,以确保 Socket
正在工作(确实如此),然后将文件重新添加到目标中(实际上是通过重置 git)。它现在正在构建......因为这是有道理的。但是我尝试将 Scheme 从 ios Device
更改为模拟器,它不再构建,但我得到了不同的错误:
Header
PersistenceLayer-Swift.h' 未找到`
还有:Could not build Objective-C module 'Persistence Layer'
这感觉就像我在追踪随机错误......
【问题讨论】:
【参考方案1】:我找到了答案:在TransportLayer
目标中打开构建阶段,然后手动将PersistenceLayer
和Socket
添加到目标依赖项。这确保了 TransportLayer
所依赖的任何东西都将在它之前构建。
我有一种预感,iOS Device
方案起作用的最初原因是因为我删除了有问题的文件,从而使所有内容都可以正确构建,包括缓存的PersistenceLayer
。将导入添加回项目后,它继续工作,因为不再需要构建 PersistenceLayer
。其他方案不起作用,因为PersistenceLayer
不是为这些架构构建的。我通过再次清理确认了这一点,但构建失败了。经过一番搜索,我找到了Target Dependencies
并在那里添加了我的两个依赖项。现在一切都在所有方案和所有架构中正确构建。
到目前为止,我的项目可能一直运行良好,因为它正在使用在我实际使用它们之前构建的缓存框架:(我在开始使用 TransportLayer
之前构建了 PersistenceLayer
)。我可能最近某个时候清理了这个项目,它删除了缓存的框架并导致了问题。
【讨论】:
以上是关于Xcode:“没有这样的模块”嵌入式框架的主要内容,如果未能解决你的问题,请参考以下文章
我们啥时候应该在 Xcode 中使用“嵌入式二进制文件”而不是“链接框架”?
删除“DerivedData”后,Xcode 不会添加“嵌入式二进制”