此插件允许您自动重写 UIKit/SwiftUI 的图像和颜色实例化,将其从不可靠的基于字符串的初始化方式(例如)
UIImage(named: "some icon")
Image("some icon")
UIColor(named: "light blue green")
Color("light blue green")
转换为 ImageResource
和 ColorResource
字面量 (如 Xcode 15 中引入的) (例如)
UIImage(resource: .someIcon)
Image(.someIcon)
UIColor(resource: .lightBlueGreen)
Color(.lightBlueGreen)
Package.swift
文件中,以便处理该软件包中的图像。dependencies: [
.package(url: "https://github.com/idrougge/ResourceRewriterForXcode.git", branch: "main"),
]
重建后,在 Project Navigator 中右键单击您的项目(或软件包),将会弹出一个菜单,您会在其中找到选项“Rewrite image resource strings”(重写图像资源字符串)和“Rewrite colour resource strings”(重写颜色资源字符串)。 选择该选项,并选择您希望修复资源引用的目标。
由于 UIImage(named:)
初始化程序返回一个可选项,而 UIImage(resource:)
不返回可选项,因此您现在可能存在不再需要的 if let
、guard let
或 nil 合并 (??
) 语句。 这些您需要自己修复,因为它超出了一个简单插件的能力范围。
如果您关闭了生成的资源符号,请进入您的构建设置并启用 Generate Asset Symbols (ASSETCATALOG_COMPILER_GENERATE_ASSET_SYMBOLS
),否则资源名称将无法解析。
完成后,您可以自由地再次删除此依赖项,并可能引入一条 linter 规则,禁止调用基于字符串的资源初始化程序。
image = .init(named: "Something")
的简写调用未处理。ImageResource/ColorResource
名称的模式,但在某些情况下可能不匹配。 如果发生这种情况,请提交 issue 以便添加。ImageResource/ColorResource
,则必须手动重写。 如果此类用法渗透到您的项目中,您可以 fork 并自定义此插件。