티스토리 뷰
✏️ 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
'iOS' 카테고리의 다른 글
| [iOS] UITest - Snapshot Test (0) | 2025.08.20 |
|---|---|
| [iOS] UITest - XCUITest (3) | 2025.08.18 |
| [iOS] APNs를 통한 push notifications 구현하기 (0) | 2025.07.24 |
| [iOS] Google Maps API 뷰에 연동시키기 (2) | 2025.05.27 |
| [iOS] CoreData를 활용하여 CRUD 구현하기 (1) | 2025.04.28 |
- Total
- Today
- Yesterday
- SWIFT
- ObservableObject
- 프로그래머스
- internal Combine
- 스위프트
- Xcode
- Swift Format
- 코딩테스트
- combine
- asyne-let
- UIKit
- foundation models
- ios
- Swift Concurrency
- SnapshotTest
- XCTest
- 백준
- 클로저
- rxswift
- unstructed task
- UITest
- swiftUI
- closure
- Fastlane
- CoreData
- group tasks
- Task
- prepareForReuse
- awakeFromNib
- detached task
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |