Swift Package Manager本地依赖的Assets/Storyboards不清理构建无法更新问题
问题根因
该问题是Xcode默认增量构建逻辑对本地Swift Package依赖的资源类文件识别缺陷导致的:Xcode增量构建时默认仅会检测SPM包内的Swift源码变更触发重编译,不会主动扫描storyboard、xcassets、xib等资源文件的变更,因此修改资源后不会触发资源的重新打包、嵌入流程,运行时加载的仍然是旧版本资源。而Swift源码变更可以被正常识别,因此修改代码后运行可以生效。
可行解决方案
方案1:调整Package.swift资源声明(优先推荐)
修改本地依赖包的Package.swift文件中的资源配置,在原有process规则之外额外添加copy规则,强制Xcode检测整个资源目录的变更:
// 原有资源声明示例 resources: [ .process("Resources", localization: .default) ] // 修改为如下写法 resources: [ .process("Resources", localization: .default), // 保留原有process规则保证资源加工、本地化逻辑正常 .copy("Resources") // 新增copy规则强制触发资源目录变更检测 ]
修改后清理一次构建文件夹(cmd+shift+k),后续资源变更即可被正常识别。
方案2:添加前置构建脚本
如果不方便修改SPM包的配置,可以在主项目的Build Phases中新增一个Run Script阶段,拖动该阶段到Dependencies阶段之前,填入如下脚本内容:
# 替换为你本地SPM依赖包的资源目录的绝对/相对路径 touch ../LocalPackages/YourPackageName/Sources/YourPackageName/Resources
该脚本会在每次构建前更新资源目录的修改时间,强制Xcode识别到目录变更,触发资源重打包流程。
方案3:关闭构建沙箱限制
打开主项目的Build Settings,搜索User Script Sandboxing,将配置项改为No。该配置会关闭Xcode的构建沙箱限制,允许构建系统扫描到SPM包内所有文件的变更,解决资源识别失效问题。
内容的提问来源于stack exchange,提问作者Adnan Aftab
相关产品推荐
相关产品推荐

