我有4个Cocoa Touch Framework项目:存储,模型,存储,模型。我试图将合同和实现分开以提供控制反转架构原则。 存储包含协议,存储包含存储协议的实现。与模型和模型类似。
当我尝试将存储导入到存储时,结果出现以下错误:
无法为“存储”加载基础模块
与将模型导入模型的情况相同。
但是将存储导入到 Model 并将 model 导入到 Storage 并没有问题。看起来模块命名不区分大小写。但是我可以将两个模块存储和存储导入到模型。而且我无法理解模块命名的原理。 “无法为以下模块加载底层模块”-没说什么是错的。
Xcode中的模块名称是否区分大小写?如何将存储导入存储?
这个问题是我真正的发展问题的结果。为了清晰再现,我将在简化示例中逐步说明问题。
1)打开Xcode->创建新的Xcode项目->单视图应用程序(产品名称=应用程序,目录=案例敏感卷根目录中的应用程序)
> diskutil info dev
...
File System Personality: Case-sensitive APFS.
...
2)Xcode->文件->新项目-> Cocoa Touch Framework(产品名称= X ,目录= App,添加到= App,组= App)
3)Xcode->文件->新项目-> Cocoa Touch Framework(产品名称= x ,目录= App,添加到= App,组= App)
4)Xcode->文件->新项目-> Cocoa Touch框架(产品名称= Y ,目录= App,添加到= App,组= App)
5)将添加到 x 新的swift文件Src.swift,其代码为:protocol XProtocol { }
6)编译 x -成功
7)将添加到 X 的新Swift文件Src.swift,其代码为:class XClass { }
8)编译 X -成功
7)将添加到 Y 新的Swift文件Src.swift,代码为:class YClass { }
8)编译 Y -成功
9)将import X
添加到 Y
10)编译 Y -成功
11)在 Y
的Src.swift顶部,将import X
替换为import x
12)编译 Y -失败。错误:
无法将模块“ X”加载为“ x”
13)将import x
添加到 X
14)编译 X -失败。错误:
无法将模块“ X”加载为“ x”
15)将import X
添加到 x
16)编译 x -失败。错误:
无法加载“ X”的基础模块
此复制为我提供了其他结果,但我仍然不了解模块命名的原理。看起来模块名称应该不区分大小写。但这是不可能的事实。错误尚不清楚。苹果是否提供一些有关此的文档?
注意(01.11.19)
如果使用静态库而不是Cocoa Touch Framework,则缺少问题。我可以将 x 导入 X 并将 x 和 X 都导入 Y 问题。
答案 0 :(得分:2)
iOS设备使用区分大小写的文件命名,但是模拟器和Xcode在不区分大小写的Mac上运行。当您要求加载由框架表示的模块时,实际上是在命名文件(该框架为文件夹)。因此,我想您遇到的问题仅是由于在试图编译此代码的Mac上文件名(路径名,文件URL等)不区分大小写的事实造成的。