SwiftUI技术问询:无法从通用框架的Assets中访问颜色资源
解决SwiftUI框架颜色资源跨应用调用的问题
问题核心在于:SwiftUI的Color(_ name: String)初始化方法默认从主应用的Bundle中查找资源,而你的颜色资源存放在通用框架的Bundle内,因此主应用调用时会出现资源找不到的错误。
修改方案
调整ColorTheme结构体,显式指定从框架的Bundle加载颜色资源:
public struct ColorTheme { // 获取当前框架的Bundle实例 private static let frameworkBundle = Bundle(for: ColorTheme.self) public static let primaryColor = Color("primaryColor", bundle: frameworkBundle) public static let secondaryColor = Color("secondaryColor", bundle: frameworkBundle) public static let captionColor = Color("captionColor", bundle: frameworkBundle) }
关键说明
Bundle(for: ColorTheme.self):通过框架内的ColorTheme类自动定位到框架的Bundle,无需硬编码Bundle ID,能适配框架名称或ID变更的场景。- 初始化
Color时传入bundle:参数:强制指定从框架的Asset Catalog加载颜色资源,主应用调用ColorTheme.primaryColor时会正确访问框架内的资源。
额外检查项
- 确认框架的
Assets.xcassets已添加到框架Target的Build Phases > Copy Bundle Resources列表中,确保颜色资源被打包到框架Bundle。 - 如果是动态框架,主应用Target的
General > Frameworks, Libraries, and Embedded Content中,框架的Embed选项需设置为Embed & Sign。
内容的提问来源于stack exchange,提问作者Muhammad Nabeel Arif
相关产品推荐
相关产品推荐

