https://github.com/SwiftGen/SwiftGen

 

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

 

SwiftGen

SwiftGen은 프로젝트의 리소스(이미지, 컬러, JSON, 문자열 등)를 Swift코드로 자동 생성해 주어 사용하는 라이브러리입니다.

 

기존에는 Assets에 이미지를 담아 문자열 이름으로 접근하여 사용했습니다.

리소스가 많아지고 이름이 복잡해질수록 접근할 때마다 문자를 잘못 입력하거나 존재하지 않는 문자를 입력해서 원하지 않는 결과가 나오곤 했습니다.

또한 Assets에 없는 이미지를 접근하면 컴파일러는 확인하지 못하고 런타임에서야 확인할 수 있는 불편함이 있었습니다.

이러한 불편함을 해소하기 위해 SwiftGen을 사용해 봅시다

 

 

SwiftGen 특징

- 리소스를 프로젝트에 추가하면 해당 리소스를 접근할 수 있는 Swift 코드가 "자동"으로 생성됨

- 코드가 생성되므로 변수명을 입력하여 접근할 때 코드 자동완성이 됨

- 프로젝트에 추가되지 않은 리소스에 접근하려면 컴파일러가 오류를 알려줌

 

 

SwiftGen이 어떻게 리소스를 자동으로 코드로 만들어줄까?

SwiftGen을 설치하면 프로젝트에 swiftgen 유닉스 실행파일이 생성됩니다.

Xcode에는 Build Phases에 Shell Script를 추가하여 프로젝트 빌드할 때 실행되도록 지원하고 있습니다.

생성된 swiftgen 실행파일을 Xcode에 등록하여 자동으로 실행하게 설정할 수 있습니다.

config에는 특정 위치에 저장된 특정 타입을 특정 위치로 소스코드를 변환하는 설정값을 적을 수 있습니다.

Xcode 빌드할 때마다 swiftgen이 실행되어 config의 설정값에 따라 리소스를 소스코드로 생성하게 됩니다.

설정까지 모두 마치면 개발자 입장에선 리소스만 추가하고 빌드하게 된다면 소스코드가 자동으로 생성되는 것을 볼 수 있습니다.

 

 

설치하기

설치방법은 다양하지만 이 글에서는 Cocoapod으로 설치하겠습니다.

 

1. 터미널을 열어 프로젝트가 위치한 경로로 이동합니다.

Podfile에 swiftgen을 추가하고 설치합니다.

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'AllTestableCanvasApp' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for AllTestableCanvasApp
  pod 'SwiftGen'
  target 'AllTestableCanvasAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'AllTestableCanvasAppUITests' do
    # Pods for testing
  end

end
pod install

 

2. config 파일을 생성합니다.

터미널에서 다음과 같은 명령어를 실행합니다.

./Pods/SwiftGen/bin/swiftgen config init

 

3. 프로젝트 폴더에 생성된 swiftgen.yml을 확인합니다.

swiftgen.yml이 바로 설정파일입니다.

이 파일을 프로젝트에 등록하도록 합니다.

 

해당 파일을 열어보면 코드들이 주석처리가 돼있는데 예제 코드입니다.

 

4. 마지막으로 프로젝트가 빌드할 때마다 설정파일에 설정값대로 소스코드를 생성하기 위해 build phase에서 Run script를 추가합니다.

해당 위치에 있는 swiftgen 유닉스 실행파일을 실행하는 스크립트입니다.

 

이제는 프로젝트 빌드시 자동으로 코드가 생성됩니다.

 

 

 

 

swiftgen.yml 설정하기

어떤 타입의 리소스를 생성할지 설정해 봅시다.

해당 라이브러리의 문서를 보면 예제들이 많이 나와있어서 어떤 코드가 들어가는지 이해하도록 해보려고 합니다.

위 사진은 제가 사용한 설정파일입니다.

input: 여기에 있는 리소스를

output: 여기로 생성해 주세요

input_dir, output_dir : 상위 디렉토리 입니다.

input_dir이 AllTestableCanvasApp/Assets로 설정됐다면

아래 xcassets의 inputs은 AllTestableCanvasApp/Assets/Assets.xcassets 가 됩니다.(output도 마찬가지입니다)

 

위 코드를 해석하면 Assets폴더의 Assets.xcassets의 리소스를 Resources폴더의 Assets+Generated.swift파일로 만들어주세요입니다.

프로젝트를 빌드하면 다음과 같이 생생됩니다.

 

Assets에 넣어둔 star 이미지가 아래와 같이 코드로 접근할 수 있게 생성되었습니다.

 

사용할 때)

let imageView = UIImageView(image: Asset.Assets.star.image)

 

+ Recent posts