iOS 개발일기

[iOS] SwiftGen 사용법 본문

iOS

[iOS] SwiftGen 사용법

맨날 까먹으니 적어두자 2024. 10. 20. 14:27

 

SwiftGen 이란

프로젝트 리소스(예: 색상, 이미지, 다국어 등)에 대한 Swift 코드를 자동으로 생성하여 안전하게 사용할 수 있도록 해주는 도구

 

기존 색상이나, 이미지 등을 사용하기 위해서는 아래와 같이 직접 생성해주어야 됐습니다.

이러한 방식을 사용하는 것이 기본이긴 하나 기존 리소스가 삭제되거나 변경되었을 경우 관리에 어려움이 있다는 단점이 있었습니다.

extension UIColor {
    static let background = UIColor(named: "background")
}

 

이러한 리소스들을 상수로 자동으로 관리해주는 도구입니다.

 

GitHub - SwiftGen/SwiftGen: The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all S

The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs! - SwiftGen/SwiftGen

github.com

 

 

설치

$ pod 'SwiftGen'

 

코코팟을 통해 SwiftGen을 설치 후, 'swiftgen.yml' 구성 파일이 필요합니다.

 

 

구성 파일 생성

현재 프로젝트 경로에서 다음의 명령어를 입력하게 되면 구성 파일이 생성되고 파일이 실행됩니다.

$ Pods/SwiftGen/bin/swiftgen config init

 

성공적으로 명령어가 실행되었을 경우 `swiftgen.yml` 파일이 생성되는 것을 확인할 수 있습니다.

 

 

리소스 설정

경로를 정확하게 입력해주어야 합니다. 

 input_dir: Demo/Asset/     #리소스 탐색 경로
 output_dir: Demo/Asset/    #리소스 저장 경로
 
 xcassets:
  inputs:                   #생성한 에셋 카르타고 (`input_dir`의 경로와 연결)
    - Assets.xcassets       
  outputs:                  #생성될 클래스 파일 속성 정의
    - templateName: swift5
      params:
        forceProvidesNamespaces: true
      output: XCAssets+Generated.swift

 

 

Xcode에 Build Phases 추가

프로젝트 → TARGETS → Build Phases → + → New Run Script Phase

 

새 스크립트를 생성하게되면 `Run Script`로 되어있을 텐데 `SwfitGen` 으로 이름을 변경 한 다음(스크립트 이름은 아무거나 하셔도 됩니다.) [CP] Check Pods Manifest.lock 스크립트 파일 밑에 위치를 변경해주면 되겠습니다.

 

스크립트 파일 내 Shell 입력 부분에 아래와 같이 입력 해준 후 빌드를 합니다.

if [[ -f "${PODS_ROOT}/SwiftGen/bin/swiftgen" ]]; then
  "${PODS_ROOT}/SwiftGen/bin/swiftgen"
else
  echo "warning: SwiftGen is not installed. Run 'pod install --repo-update' to install it."
fi

 

 

저는 한번에 빌드가 성공하지 않았었습니다. 

  1. SwiftGen.yml 내 디렉터리 설정 오류 : 경로가 올바르게 설정되어 있는지 확인
  2. SwiftGen.yml 내 들여쓰기 오류 : 들여쓰기가 일정하지 않을 때도 에러 발생

빌드가 성공했다면 이제 사용할 준비가 되었습니다.

 

 

SwiftGen 사용

색상을 통해 SwiftGen을 어떻게 사용하는지에 대해 알아보겠습니다.

 

색상을 추가하여 빌드해보면

구성 파일에서 output 설정했던 파일 이름으로 된 Swift 파일이 생성된 것을 확인할 수 있습니다.

(구성 파일이 표시되지 않을 경우 파인더로 직접 들어가보면 파일이 존재하는데 프로젝트에 추가해주시면 됩니다.)

 

SwiftGen을 사용하지 않고 사용했을 경우에는 

extension UIColor {
    static let background = UIColor(named: "background") ?? .clear
}

view.backgroundColor = .background

 

위와 같이 확장을 하거나 직접 입력해서 사용하는 방법이 있었습니다.

(Xcode 15 버전부터는 `Generate Asset Symbols` 설정을 통해서 별도의 확장을 구현하여 관리할 필요없이 바로  불러올 수 있게 되었습니다)

 

SwiftGen을 사용하게되면, SwiftGen에서 코드를 관리(자동완성도 지원)해주기 때문에 비교적 간편하게 사용할 수 있습니다.

view.backgroundColor = Asset.background.color

 

 

 

Asset 열거형 확인

`XCAssets+Generated.swift`의 코드를 보면 Asset 으로 생성된 열거형을 확인할 수 있습니다.

열거형 내에 정적 상수를 선언함으로써 인스턴스화를 방지하면서 사용할 수 있도록 되어있네요.

현재는 Asset 폴더만 사용되어 열거형이 하나만 생성되어 있지만 폴더나 에셋 카탈로그가 하나 생성될 때마다 하나의 열거형이 중첩되어 생성되는 구조입니다. 

 

 

 

마치며

현재는 Xcode 15 이후 `Generate Asset Symbols` 기능의 등장으로 에셋 카탈로그에 대한 자동 확장 기능이 제공되기 때문에 관리가 편하지기 했지만, 아직까지는 이미지와 색상에 대해서만 지원하기 때문에 다국어나 JSON과 같은 외의 기능들에 대해서는 아직까지는 SwiftGen이 필요하지 않을까 생각됩니다.

 

 

 

 

 

 

'iOS' 카테고리의 다른 글

[iOS] 오픈소스 라이선스 표시 및 라이브러리  (0) 2024.12.04
[iOS] Realm 사용법  (0) 2024.11.24