You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:55:06