티스토리 뷰

iOS

[iOS] Swiftgen 적용하기

yanni13 2025. 8. 2. 01:59

 

 

✏️ Swiftgen이란? 

SwiftGen이란 Resources 폴더 안에 들어가는 폰트, assets, color들을 문자열이나 코드로 다룰 때 오타나 잘못된 키의 사용을 방지하여 안전하게 코드로 관리할 수 있도록 하는 자동화 도구이다.

 

보통은 UIImage(named: "logo_main")이라고 작성했다면 SwiftGen을 실행했을 땐 자동으로 Asset.logoMain.image 와 같은 enum 타입의 코드가 자동 생성되어서 실제 코드에서 문자열을 최소화하여 사용할 수 있도록 한다.

 

 

팀프로젝트를 하다보면 팀원이 넣은 Assets에서 이름이 변경되거나, 문자열로 Image를 호출하는 일이 많아져서 프로젝트 규모가 커질 경우 문자열 때문에 컴파일 에러가 났던 경험이 있을 것이다. (휴면에러..)

따라서 팀 협업을 할 땐 문자열 사용을 최소화하는 것이 중요하다.

 

 

이때 Swiftgen을 사용하게 되면 오타를 방지할 수 있고 assets, Color, Font 등의 리소스들의 이름이 변경되어도 컴파일 에러가 따로 나지 않는다.

이외에도 enum 타입으로 문서를 만들기 때문에 팀원별로 이름을 다르게 쓰는 문제를 방지하여 일관된 네이밍 규칙을 따를 수 있으며 Assets, Color, Font 뿐만 아니라, 다국어 번역, 스토리보드, CoreData 모델과 같이 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

 

1. homebrew로 설치

$ brew update
$ brew install swiftgen

 

homebrew로 설치하는 것이 가장 간단해서 homebrew로 설치하였다.

위 두 명령어를 터미널에서 작성하면 설치 완료 된다.

 

2. yml 파일 생성

$ swiftgen config init

 

그 다음 설정 파일을 만들어줘야 한다. 위 명령어를 입력하면 기본적으로 swiftgen.yml이라는 파일이 자동 생성 되는데 yml 파일은 주로 설정을 표현하기 위한 포맷으로 사용된다.

 

 

따라서 이 파일에서는 어떤 리소스를 어떤 방식으로 코드로 변환할지를 정의하는 코드를 작성해 주면 된다.

 

3. 리소스 경로 설정

xcassets:
  inputs:
    - Projects/CodePlay/CodePlay/Resources/Assets.xcassets
  outputs:
    - templateName: swift5
      output: Projects/CodePlay/CodePlay/Resources/Assets+Generated.swift

 

나는 assets 파일에 대해서만 swiftgen이 enum 타입으로 변환해서 처리해줬으면 해서 코드를 위와 같이 작성하였다.

(Color나 Font 등등 더 많은 리소스를 포함하고 싶다면 GPT한테 작성해 달라고 하자.)

 

꼭 해줘야 할 건, 파일을 읽어올 경로와 출력을 내뱉을 경로를 지정해줘야 한다.

 

 

4. Build Phase 수정

Xcode -> Build Phase에 들어가서 Run Script를 새로 생성해주고 아래의 명령어를 적어주자 

 

그럼 빌드할 때 마다 루트 경로에서 swiftgen config run이 실행되기 때문에 터미널에서 매번 실행하지 않아도 된다.

 

$ swiftgen config run

 

수동으로 직접 터미널에서 명령어를 치고 실행하고 싶은 경우 프로젝트 루트 폴더에 들어가서 해당 명령어를 입력해 주면

된다

 

이 방법은 yml 파일에 적은 경로와 완벽히 일치해야 하기 때문에 경로상의 오류가 발생하기 쉬워서 추천하진 않는다

 

 

경로를 찾았으면 위와 같이 파일 경로를 찾고 Assets+Generated라는 파일이 생성된다.

 

프로젝트 파일에서도 모든 문자열을 enum 타입 한 것을 확인할 수 있다.

 

 

 

📍주의할 점

Swiftgen을 실행시켜도 Image("")로 작성되어 있던 코드가 Assets.Image로 자동으로 바뀌진 않는다

Swiftgen은 리소스에 안전하게 접근할 수 있는 Type-safe 코드를 생성해 주는 도구일 뿐 프로젝트 안에 모든 Image("")의 호출을 Asset.~ 으로 자동 변환까지 바꿔주는 툴이 아니라는 것이다!

 

즉 Swiftgen은 빌드 시점에. xcassets를 읽은 후 코드만 생성하며 기존 코드의 맵핑을 분석하거나 대체하는 건 수동으로 해야 한다.

SwiftUI에서는 SwiftUI.Image extension이 가능하기 때문에 Image(asset: Assets.linkapplemusic) 이런 식으로 간편하게 사용할 수 있다.

 

 


참고

https://medium.com/daily-monster/swiftgen-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0-a22ae6b4ba9d

https://93bpm.tistory.com/36

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함