Swift Package跨模块引用图片报错:资源目录未找到对应图片
Swift Package跨模块引用图片问题排查
需检查的遗漏配置
Asset Catalog需单独配置处理规则:
.process("Resources")仅适用于普通资源(如JSON),Asset Catalog(Assets.xcassets)必须用.assetCatalog()专门声明。修改PackageB的Package.swift资源配置:resources: [ .assetCatalog("Resources/Assets.xcassets"), // 单独处理资源目录 .process("Resources/your.json") // 保留JSON的处理规则 ]若用
.process处理Asset Catalog,会导致资源未被正确编译进bundle,自然无法被找到。图片名称不要带文件后缀:报错中的
myImage.png是错误写法,Asset Catalog中图片的引用名称不含后缀,调用时直接用myImage即可。确认资源归属正确的Target:确保资源配置在PackageB的主Target下,而非测试Target或其他无关Target。示例配置:
targets: [ .target( name: "PackageB", dependencies: [], resources: [ .assetCatalog("Resources/Assets.xcassets"), .process("Resources/data.json") ] ) ]
跨模块引用的限制说明
- 跨模块引用资源本身无限制,但必须保证:资源被正确编译到对应模块的bundle中,调用时使用该模块的
Bundle.module(每个模块的Bundle.module独立,不可混用)。 - 若PackageA为动态库、PackageB为静态库,Swift Package默认会处理资源合并,但前提是资源配置正确。
- 注意:Asset Catalog无法被多个Target直接共享,若需共享需单独创建资源Target,让其他Target依赖该资源Target。
内容的提问来源于stack exchange,提问作者invalidArgument
相关产品推荐
相关产品推荐

