Xcode框架模块内引入非模块化头文件报错,xcodebuild可正常编译
解决方案
- 核对构建配置一致性
Xcode GUI与xcodebuild默认使用的构建配置可能存在差异,可点击Xcode顶部当前Scheme,选择「编辑Scheme」,核对Run、Archive等场景对应的构建配置,与你执行xcodebuild时传入的-configuration参数值保持一致。常见场景为xcodebuild默认使用Release配置,而Xcode GUI默认使用Debug配置,部分路径配置仅在Release下生效就会触发该问题。 - 检查头文件搜索路径的生效范围
打开项目构建设置中的Header Search Paths项,确认Carthage/Checkouts相关的头文件路径设置为所有架构、所有构建配置均生效,避免仅对特定架构、特定配置生效导致Xcode GUI选到对应配置时找不到头文件。 - 确认全维度开启非模块化头文件包含权限
除了全局构建设置外,还要分别检查主项目target、CordovaLib子target的构建设置中Allow Non-modular Includes In Framework Modules选项均设为YES,避免单个target配置未同步导致报错。 - 切换为旧构建系统
旧版本Cordova项目与Xcode新构建系统存在兼容性问题,可在Xcode菜单栏选择「文件」-「项目设置」,将构建系统修改为*旧构建系统 (Legacy Build System)*后重新构建。 - 重新构建Carthage依赖适配架构
如果你使用M系列芯片的Mac,且Xcode当前选择的是模拟器运行,旧版Carthage构建的.framework可能缺失arm64模拟器架构,而xcodebuild构建真机包时不受影响。可执行以下命令重新构建依赖:carthage update --use-xcframeworks --platform ios
构建完成后重新将依赖导入项目即可。
内容的提问来源于stack exchange,提问作者alekop
相关产品推荐
相关产品推荐

