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

如何将UI模块的Swift资源符号扩展设为公开供主App访问?

解决Swift资源符号扩展跨模块访问问题

方案一:通过Xcode配置直接修改访问级别

  • 打开你的UI框架/模块项目,进入Build Settings页面
  • 在搜索栏输入「Asset Symbol Access Level」,定位到对应配置项
  • 将默认的internal改为public(如果需要更开放的访问权限可以用open,但跨模块调用用public足够)
  • 重新编译框架,生成的UIColor.myColor、UIImage.myImage这类扩展就会变为public级别,主App目标可直接调用

方案二:手动修改生成的扩展代码(临时救急)

如果找不到上述配置项或配置不生效,可手动调整自动生成的文件:

  • 找到框架中自动生成的资源扩展文件(通常命名为Assets.xcassets.generated.swift)
  • 将扩展的internal修饰符替换为public,示例如下:
    // 修改前
    internal extension UIColor {
        static let myColor = UIColor(named: "myColor")!
    }
    
    // 修改后
    public extension UIColor {
        static let myColor = UIColor(named: "myColor")!
    }
    
  • 注意:这种方法的弊端是,每次重新生成资源扩展时,手动修改的内容会被覆盖,因此优先推荐方案一的配置方式

额外注意事项

  • 确保主App已正确依赖你的UI框架:在主App的General设置中,找到Frameworks, Libraries, and Embedded Content,将该UI框架添加进去
  • 若使用Swift Package Manager,可在Package.swift中配置访问级别,在资源处理参数里指定:
    targets: [
        .target(
            name: "UIFramework",
            resources: [
                .process("Assets.xcassets", generateAssetSymbols: .init(accessLevel: .public))
            ]
        )
    ]
    

内容的提问来源于stack exchange,提问作者Niall Mccormack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:13:16