SwiftGen swift项目资源管理方案

397 阅读1分钟

背景

在iOS的资源管理上,如本地化多语言或者图片,都是用string的形式来读取资源,这样也带来了一个问题。 比如指定的资源不存在,或者资源名称被更新,则会出现无法加载资源的问题。

常见代码如下:

 let image = UIImage(named: "icon")//这里只是指定了icon的图片,但是如果图片变化,或者不存在,则不会检查到

解决的办法也比较简单,就是在编译的时候增加资源检查。 SwiftGen 就是其中一个解决该问题的三方库。

原理

SwiftGen 会根据yml文件配置规则,读取对应的资源目录,然后将所有的资源动态生成代码中的值。 如果出现资源不存在或者变化就会报错

如: 读取Asset中的所有图片,然后生成为Asset类,提供所有图片的值

接入

  1. 本地安装swiftgen
brew install swiftgen
  1. cocoapods接入 这里推荐debug的时候用即可,毕竟所有的代码都会执行之后再上传的,如果希望release检查,也可以用
pod 'SwiftGen', '6.5.1', :configurations => ['Debug']
  1. 配置swiftgen,制定input 和 output

这里我们指定了两种资源,string 和

strings:
  inputs: Demo/Tools/Localizable/en.lproj/Localizations.strings
  outputs:
    - templateName: structured-swift5
      output: Demo/Tools/Localizable/Strings.swift
xcassets:
  inputs:
    - Demo/Assets.xcassets
  outputs:
    - templateName: swift5
      output: Demo/UIComponent/ImageManager/Assets.swift
  1. Build Phases中增加脚本

用法

  1. 更新对应资源, build项目(cmd+b)
  1. 代码生成完毕,直接使用即可

Localized string

let string = L10n.LoginModeList.password

Image引入

let image = Asset.gameRoomShare.image

总结

除了上述提到的本地化和图片之外,swiftgen还可以做更多资源的检查,list如下:

感兴趣的去github地址看看吧