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

时间:2015-07-15 16:22:45

标签: ios xcode swift frameworks

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

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

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

import PersistenceLayer

struct User : Model {
  ...
}

ModelPersistenceLayer中定义,Xcode允许我按正常情况使用它。但是,当我尝试构建TransportLayer时,我收到错误:No such Modul 'Persistencelayer'。所以Xcode认识到模块在那里,但不知何故"松散"它建立时。

这曾经令人抓狂。在某些时候某些事情发生了变化,我无法弄清楚是什么。重要的是要注意我在一个包含多个开发人员的项目上工作,并且我在更改中merged。但是,在合并之前切换到提交并不起作用。我也试过了:

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

我怀疑在我的项目设置中发生了一些变化,但我无法弄清楚什么,我检查了git差异并没有帮助(项目中没有任何真正改变的东西除了正常文件添加。

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

有谁知道为什么会发生这种情况或如何修复它?

更新

好的,所以我删除了#34;违规"来自目标的文件以确保Socket正在工作(它是),然后将文件重新添加到目标(完全通过重置git)。它现在建立...因为这是有道理的。但我尝试将方案从iOS Device更改为模拟器,它不再构建,但我得到了不同的错误:

  • in module.modulemap:Header PersistenceLayer-Swift.h'没找到`
  • 另外:Could not build Objective-C module 'Persistence Layer'

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

1 个答案:

答案 0 :(得分:2)

我找到了答案:在TransportLayer目标中打开 Build Phases 并手动将PersistenceLayerSocket添加到目标依赖项。这可以确保在{I}}依赖的任何内容之前构建它。

我有一种预感,TransportLayer计划的原始原因是因为我删除了有问题的文件,允许所有内容正确构建,包括缓存的iOS Device。将导入添加回项目后,它继续工作,因为PersistenceLayer不再需要构建。其他方案没有用,因为PersistenceLayer没有为这些架构构建。我通过再次清理确认了这一点,并且构建失败了。经过一番搜索,我发现PersistenceLayer并在那里添加了我的两个依赖项。现在一切都在所有方案和所有架构中正确构建。

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