在DesignSystem包中如何获取自定义Assets.xcassets里的资源?
解决独立Swift包中Assets资源无法访问的问题
先把资源包配置好
打开DesignSystem包的Package.swift文件,得把Assets.xcassets明确加到资源目录配置里,不然包编译时不会把资源带进去。示例代码:targets: [ .target( name: "DesignSystem", dependencies: [], resources: [ .process("Assets.xcassets") // 填你的Assets相对路径,根目录就直接写这个 ] ), .testTarget( name: "DesignSystemTests", dependencies: ["DesignSystem"]), ]要是你的Assets.xcassets不在包根目录,比如在
Sources/DesignSystem下面,路径就写成Sources/DesignSystem/Assets.xcassets。访问资源时指定包的Bundle
默认的Color(name)和UIColor(named: name)只会找主App的资源,所以得明确指定DesignSystem包的Bundle:// 直接用Swift包自带的Bundle.module就能拿到当前包的Bundle let designBundle = Bundle.module // 获取颜色 let color = Color("myColorName", bundle: designBundle) let uiColor = UIColor(named: "myColorName", in: designBundle, compatibleWith: nil) // 图片也一样这么写 let uiImage = UIImage(named: "myImageName", in: designBundle, compatibleWith: nil) let swiftUIImage = Image("myImageName", bundle: designBundle)检查资源有没有被正确打包
- 选中DesignSystem包,Build一下
- 去Xcode的Products目录找到生成的框架文件,右键选"Show in Finder"
- 右键框架文件,选"Show Package Contents",看看
Resources文件夹里有没有Assets.car文件,有的话说明资源打包成功了。
Xcode 14.3的小细节
要是你是在App项目里引入本地包,得确保App的Target已经加了DesignSystem的依赖,而且Build Phases的"Link Binary With Libraries"里能看到这个框架。另外,先清一下项目缓存(Cmd+Shift+K)再重新Build,有时候缓存会搞事情。
内容的提问来源于stack exchange,提问作者Giga Khizanishvili
相关产品推荐
相关产品推荐

