使用xcodebuild构建依赖SPM安装的CocoaLumberjack项目提示module map找不到怎么办
问题原因
该错误由Xcode GUI与命令行xcodebuild的默认构建路径逻辑差异导致:
- Xcode GUI默认使用全局派生数据(DerivedData)目录作为构建输出根路径,SPM会自动在该路径下生成依赖库的module map文件,因此构建可以正常完成。
- 未指定参数直接执行
xcodebuild clean build时,工具会默认将构建产物输出到当前项目目录下的build文件夹,而SPM的模块映射生成逻辑不会自动在该路径下创建对应的GeneratedModuleMaps目录和依赖的module map文件,最终抛出找不到文件的错误。
解决方案
方案一:指定派生数据路径(推荐)
执行构建命令时显式添加-derivedDataPath参数,指定统一的派生数据输出目录即可适配SPM的生成逻辑,示例命令如下:
# 替换为你自己项目的Scheme名称 xcodebuild clean build -scheme TestAppObjC -derivedDataPath ./DerivedData
如果需要指定运行目标(比如模拟器/真机),可以补充destination参数:
# 模拟器构建示例 xcodebuild clean build -scheme TestAppObjC -destination 'platform=iOS Simulator,name=iPhone 14' -derivedDataPath ./DerivedData
方案二:显式指定使用新构建系统
针对Xcode 12及以上版本,可以直接在构建命令中指定使用新构建系统,规避旧构建系统对SPM的适配问题:
xcodebuild clean build -scheme TestAppObjC -UseModernBuildSystem=YES
方案三:修改项目构建设置(兼容无需改命令的场景)
如果不方便修改构建命令,可以在项目的Build Settings中找到MODULEMAP_FILE_SEARCH_PATHS配置项,添加递归搜索路径:
$(BUILD_DIR)/GeneratedModuleMaps/$(PLATFORM_NAME)
配置完成后直接执行原有xcodebuild clean build命令即可正常构建。
内容的提问来源于stack exchange,提问作者rogueserenity
相关产品推荐
相关产品推荐

