Xcode: "No such module" 嵌入式框架
Xcode: "No such module" embedded framework
我的项目中目前有 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 识别出模块在那里,但在构建时不知何故 "looses" 它。
令人抓狂的是这曾经有效。在某些时候发生了一些变化,我无法弄清楚是什么。重要的是要注意,我与多个开发人员一起处理一个项目,并且我有 merged
的更改。但是,在合并之前切换到提交是行不通的。我也试过:
- 将
$(SRCROOT)
(递归)添加到框架搜索路径
- 正在删除
ModuleCache
目录中的所有内容
- 清理项目
- 清理构建文件夹
我怀疑我的项目设置发生了一些变化,但我不知道是什么,我检查了 git 差异并没有帮助(除了正常的文件添加。
此外,TransportLayer
确实成功导入并使用了 Socket
。如果我删除对 PersistenceLayer
的引用但保留对 Socket
.
的所有引用,我可以构建 TransportLayer
有谁知道为什么会发生这种情况或如何解决它?
更新
好的,所以我从目标中删除了 "offending" 文件以确保 Socket
正在工作(它是),然后将文件重新添加到目标(完全通过重置 git).它现在建立......因为这是有道理的。但是我尝试将 Scheme 从 iOS Device
更改为模拟器,但它不再构建,但我遇到了不同的错误:
- 在 module.modulemap 中:
Header
PersistenceLayer-Swift.h' 未找到`
- 另外:
Could not build Objective-C module 'Persistence Layer'
这感觉就像我在追查随机错误...
我找到了答案:在 TransportLayer
目标中打开 Build Phases 并手动将 PersistenceLayer
和 Socket
添加到 目标依赖项。这确保 TransportLayer
所依赖的任何东西都将在它之前被构建。
我有一种预感,iOS Device
方案起作用的最初原因是因为我删除了有问题的文件,允许正确构建所有内容,包括缓存的 PersistenceLayer
。将导入添加回项目后,它继续工作,因为 PersistenceLayer
不再需要构建。其他方案不起作用,因为 PersistenceLayer
不是为这些架构构建的。我通过再次清理确认了这一点,但构建失败了。经过一番搜索,我找到了 Target Dependencies
并在那里添加了我的两个依赖项。现在一切都可以在所有方案和所有架构中正确构建。
我的项目可能到目前为止一直运行良好,因为它使用的是在我实际使用它们之前构建的缓存框架:(我在开始 TransportLayer
工作之前构建了 PersistenceLayer
).我可能最近某个时候清理了项目,删除了缓存的框架并导致了问题。
我的项目中目前有 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 识别出模块在那里,但在构建时不知何故 "looses" 它。
令人抓狂的是这曾经有效。在某些时候发生了一些变化,我无法弄清楚是什么。重要的是要注意,我与多个开发人员一起处理一个项目,并且我有 merged
的更改。但是,在合并之前切换到提交是行不通的。我也试过:
- 将
$(SRCROOT)
(递归)添加到框架搜索路径 - 正在删除
ModuleCache
目录中的所有内容 - 清理项目
- 清理构建文件夹
我怀疑我的项目设置发生了一些变化,但我不知道是什么,我检查了 git 差异并没有帮助(除了正常的文件添加。
此外,TransportLayer
确实成功导入并使用了 Socket
。如果我删除对 PersistenceLayer
的引用但保留对 Socket
.
有谁知道为什么会发生这种情况或如何解决它?
更新
好的,所以我从目标中删除了 "offending" 文件以确保 Socket
正在工作(它是),然后将文件重新添加到目标(完全通过重置 git).它现在建立......因为这是有道理的。但是我尝试将 Scheme 从 iOS Device
更改为模拟器,但它不再构建,但我遇到了不同的错误:
- 在 module.modulemap 中:
Header
PersistenceLayer-Swift.h' 未找到` - 另外:
Could not build Objective-C module 'Persistence Layer'
这感觉就像我在追查随机错误...
我找到了答案:在 TransportLayer
目标中打开 Build Phases 并手动将 PersistenceLayer
和 Socket
添加到 目标依赖项。这确保 TransportLayer
所依赖的任何东西都将在它之前被构建。
我有一种预感,iOS Device
方案起作用的最初原因是因为我删除了有问题的文件,允许正确构建所有内容,包括缓存的 PersistenceLayer
。将导入添加回项目后,它继续工作,因为 PersistenceLayer
不再需要构建。其他方案不起作用,因为 PersistenceLayer
不是为这些架构构建的。我通过再次清理确认了这一点,但构建失败了。经过一番搜索,我找到了 Target Dependencies
并在那里添加了我的两个依赖项。现在一切都可以在所有方案和所有架构中正确构建。
我的项目可能到目前为止一直运行良好,因为它使用的是在我实际使用它们之前构建的缓存框架:(我在开始 TransportLayer
工作之前构建了 PersistenceLayer
).我可能最近某个时候清理了项目,删除了缓存的框架并导致了问题。