Swift Package中如何通过Xcode15自动生成的枚举访问资源图片?
解决Swift Package中Xcode15资产符号枚举访问失败的问题
步骤1:设置资产目录的符号生成权限
在Xcode中打开Swift Package里的Assets.xcassets:
- 选中资产目录文件
- 打开右侧检查器面板
- 找到Generate Swift Symbols选项,将Access Level改为
Public - 重新构建Package,Xcode会生成带public访问级别的
AssetSymbols枚举
步骤2:正确引用资产符号
在你的CheckboxToggleStyle中,必须显式指定模块bundle,同时使用生成的枚举:
public struct CheckboxToggleStyle: ToggleStyle { @Binding var color: Color // ✅ 正确使用枚举+模块bundle let checked = Image(.checkboxChecked, bundle: .module) let unchecked = Image(.checkboxUnchecked, bundle: .module) public func makeBody(configuration: Configuration) -> some View { (configuration.isOn ? checked : unchecked) .renderingMode(.template) .foregroundColor(color) .onTapGesture { withAnimation { configuration.isOn.toggle() } } } }
注意:即便用枚举访问资产,也必须加
bundle: .module——Swift Package的资源不会自动关联到主bundle,必须指定模块bundle才能加载。
步骤3:验证Package资源配置
确保Package.swift里正确包含资产目录,示例配置如下:
let package = Package( name: "YourPackageName", products: [ .library( name: "YourPackageName", targets: ["YourPackageName"]), ], targets: [ .target( name: "YourPackageName", resources: [ // 处理资产目录,确保资源被正确打包 .process("Resources/Assets.xcassets") ]), .testTarget( name: "YourPackageNameTests", dependencies: ["YourPackageName"]), ] )
常见排查点
- 清理Xcode缓存:执行
Product > Clean Build Folder后重新构建 - 确认资产名和枚举值对应:Xcode会把资产名的连字符转为驼峰(比如
checkbox-checked对应checkboxChecked) - 检查
GeneratedAssetSymbols.swift文件,确认AssetSymbols枚举的访问级别是public
内容的提问来源于stack exchange,提问作者Dogan Altinbas
相关产品推荐
相关产品推荐

