Framework中通过modulemap定义的模块无法在Swift文件中导入
你用Modulemap封装内部Objective-C类、避免通过伞头暴露公共接口的思路没问题,导入时报No such module AwesomeKitPrivate,除了确认路径,重点检查以下几个构建设置:
MODULEMAP_FILE配置
必须让Framework目标的MODULEMAP_FILE指向你手写的那个modulemap文件,不能用Xcode自动生成的。比如路径设为$(SRCROOT)/AwesomeKit/ProjectModule/AwesomeKitPrivate.modulemap,如果这个配置为空或者指向默认模块文件,Xcode会忽略你的自定义模块定义。头文件搜索路径的目标归属
你设置的$(SRCROOT)/AwesomeKit/ProjectModule要确保是加到Framework自身的目标里,不是主App目标。另外,如果InternalClass.h是私有头,建议加到USER_HEADER_SEARCH_PATHS并勾选递归搜索,避免Xcode找不到头文件间接导致模块识别失败。DEFINES_MODULE开关
这个选项必须设为YES,Framework默认是开启的,但如果不小心关掉,Xcode不会处理自定义Modulemap,自然识别不到AwesomeKitPrivate模块。Modulemap文件的命名与存放位置
文件名最好和模块名一致(比如AwesomeKitPrivate.modulemap),别放在Public Headers目录下——不然会被当成公共接口暴露,违背你用Modulemap做私有访问的初衷。Swift编译器的
IMPORT_PATHS
在Framework的Swift编译设置里,检查IMPORT_PATHS有没有包含你的Modulemap所在目录,这个配置是告诉Swift编译器去哪里找自定义模块的定义。
最后,清理项目缓存(Cmd+Shift+K)再重新构建,有时候Xcode的缓存会导致模块识别延迟。
内容的提问来源于stack exchange,提问作者Devarshi

