Xcode:"No such module"嵌入式框架

3

我目前在项目中有三个嵌入式框架:

  • PersistenceLayer(仅限Swift)
  • TransportLayer(仅限Swift)
  • Socket(Objc)

PersistenceLayerSocket都没有引用任何外部内容。然而,TransportLayer导入了PersistenceLayerSocket。奇怪的是,在导入后我可以使用PersistenceLayer对象:

import PersistenceLayer

struct User : Model {
  ...
}

Model是在PersistenceLayer中定义的,Xcode让我正常使用它。但是,当我尝试构建TransportLayer时,会出现错误:No such Modul 'Persistencelayer'。所以Xcode识别模块是存在的,但在构建时却“丢失”了它。

令人发狂的是,这曾经可以工作。在某个时候,有些东西发生了改变,而我无法找出原因。需要注意的是,我与多个开发人员合作进行项目开发,并且已经合并了一些更改。但是切换到合并之前的提交并没有起作用。我还尝试过:

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

我怀疑我的项目设置发生了变化,但我无法找出原因,并且检查git diffs也没有帮助(除了正常的文件添加外,项目中没有真正发生变化的内容)。

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

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

更新

好的,所以我从目标中删除了“有问题”的文件,以确保Socket可以工作(它可以),然后重新将文件添加到目标中(通过重置git)。现在它可以构建...因为这是有意义的。但是,我尝试将方案从iOS设备更改为模拟器,它就无法构建了,但我收到了不同的错误:

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

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

1个回答

3
我找到了答案:在TransportLayer目标中打开Build Phases,手动添加PersistenceLayerSocketTarget Dependencies。这可以确保在构建TransportLayer之前会先构建它所依赖的任何内容。
我有一个猜想,原因是方案之所以能够工作,是因为我已经移除了问题文件,使得所有内容都能够正确构建,包括被缓存的PersistenceLayer。在将导入文件重新添加到项目后,它继续工作,因为PersistenceLayer不需要再次构建。其他方案无法工作,因为PersistenceLayer未针对这些架构进行构建。我通过再次清理并发现构建失败来确认了这一点。经过一番搜索,我找到了Target Dependencies,并在其中添加了两个依赖项。现在,所有方案和所有架构都能够正确构建。
我的项目可能一直正常工作,直到现在,因为它使用了之前构建的缓存框架(我在开始工作于TransportLayer之前构建了PersistenceLayer)。最近我可能清理了项目,删除了缓存的框架,导致了这些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接