Xcode多Scheme下SwiftUI预览报no such module 'MyApp'原因咨询
报错根本原因
- SwiftUI预览的自动构建逻辑存在适配缺陷:Xcode生成预览依赖的
preview-thunk.swift中间代码时,会硬编码导入项目默认设置的主模块名MyApp,不会动态读取不同Scheme、不同构建配置下的$(PRODUCT_NAME:c99extidentifier)变量值。你当前使用的MyApp_StagingScheme对应模块名为MyApp_staging,和硬编码的导入模块名不匹配,因此抛出找不到MyApp模块的错误。 - 日常应用可正常运行是因为标准编译流程会正确识别你配置的动态模块名变量,只有SwiftUI预览的独立预构建流程存在该问题,该问题在包含自定义构建配置、多Scheme对应不同模块名的项目中普遍出现。
可用修复方案
- 临时方案:将Staging配置下的Product Module Name暂时改为和默认配置一致的
MyApp,即可正常使用预览功能,需要打Staging包时再改回原有配置即可 - 长期方案:新增一个独立的动态Framework Target,把所有SwiftUI视图代码统一放到该框架中,主Target依赖该框架调用,即可彻底规避不同Scheme下主模块名不一致导致的预览冲突
内容的提问来源于stack exchange,提问作者Tometoyou
相关产品推荐
相关产品推荐

