일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JSON
- parse
- JSONParser
- 정보처리기사 실기 요약본
- Custom PageViewController
- Codable
- 정보처리기사
- UITableView
- RealmSwift
- JSONSerialization
- 정보처리기사 실기
- pbxgroup
- pbxfilesystemsynchronizedrootgroup
- dynamic height
- Pod
- cocoapods
- CustomCode
- 프로그래머스
- 위클리챌린지
- IOS
- SwiftGen
- programmers
- 2018 KAKAO BLIND RECRUITMENT
- PageViewController
- swift
- 티스토리챌린지
- issecuretextentry
- storybaord
- Xcode
- Decodable
- Today
- Total
iOS 개발일기
[iOS] SwiftGen 사용법 본문
SwiftGen 이란
프로젝트 리소스(예: 색상, 이미지, 다국어 등)에 대한 Swift 코드를 자동으로 생성하여 안전하게 사용할 수 있도록 해주는 도구
기존 색상이나, 이미지 등을 사용하기 위해서는 아래와 같이 직접 생성해주어야 됐습니다.
이러한 방식을 사용하는 것이 기본이긴 하나 기존 리소스가 삭제되거나 변경되었을 경우 관리에 어려움이 있다는 단점이 있었습니다.
extension UIColor {
static let background = UIColor(named: "background")
}
이러한 리소스들을 상수로 자동으로 관리해주는 도구입니다.
설치
$ 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
저는 한번에 빌드가 성공하지 않았었습니다.
- SwiftGen.yml 내 디렉터리 설정 오류 : 경로가 올바르게 설정되어 있는지 확인
- 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 |