我目前在项目中有3个嵌入式框架:
PersistenceLayer
(仅限Swift)TransportLayer
(仅限Swift)Socket
(Objc) PersistenceLayer
和Socket
都不会引用自己以外的任何内容。但TransportLayer
导入PersistenceLayer
和Socket
。奇怪的是,我可以在导入后使用 PersistenceLayer
个对象:
import PersistenceLayer
struct User : Model {
...
}
Model
在PersistenceLayer
中定义,Xcode允许我按正常情况使用它。但是,当我尝试构建TransportLayer
时,我收到错误:No such Modul 'Persistencelayer'
。所以Xcode认识到模块在那里,但不知何故"松散"它建立时。
这曾经令人抓狂。在某些时候某些事情发生了变化,我无法弄清楚是什么。重要的是要注意我在一个包含多个开发人员的项目上工作,并且我在更改中merged
。但是,在合并之前切换到提交并不起作用。我也试过了:
$(SRCROOT)
(递归)添加到框架搜索路径ModuleCache
目录我怀疑在我的项目设置中发生了一些变化,但我无法弄清楚什么,我检查了git差异并没有帮助(项目中没有任何真正改变的东西除了正常文件添加。
此外,TransportLayer
成功导入并使用Socket
。如果删除对PersistenceLayer
的引用,但保留对Socket
的所有引用,我可以构建TransportLayer。
有谁知道为什么会发生这种情况或如何修复它?
好的,所以我删除了#34;违规"来自目标的文件以确保Socket
正在工作(它是),然后将文件重新添加到目标(完全通过重置git)。它现在建立...因为这是有道理的。但我尝试将方案从iOS Device
更改为模拟器,它不再构建,但我得到了不同的错误:
Header
PersistenceLayer-Swift.h'没找到`Could not build Objective-C module 'Persistence Layer'
这感觉就像我在追逐随机错误......
答案 0 :(得分:2)
我找到了答案:在TransportLayer
目标中打开 Build Phases 并手动将PersistenceLayer
和Socket
添加到目标依赖项。这可以确保在{I}}依赖的任何内容之前构建它。
我有一种预感,TransportLayer
计划的原始原因是因为我删除了有问题的文件,允许所有内容正确构建,包括缓存的iOS Device
。将导入添加回项目后,它继续工作,因为PersistenceLayer
不再需要构建。其他方案没有用,因为PersistenceLayer
没有为这些架构构建。我通过再次清理确认了这一点,并且构建失败了。经过一番搜索,我发现PersistenceLayer
并在那里添加了我的两个依赖项。现在一切都在所有方案和所有架构中正确构建。
我的项目可能一直运行到现在为止,因为它正在使用之前构建的缓存框架实际使用它们:(在我开始Target Dependencies
工作之前,我构建了PersistenceLayer
。我可能最近在某个时候清理了项目,删除了缓存的框架并导致了问题。