์ด ํ๋ก์ ํธ ๋ด์ฉ์ผ๋ก enum์ ํตํ ๊ตฌ์กฐํ๋ฅผ ์ํํ์ฌ
ํ์งํ ๋ฐ ์์ ํ Assets ์ฐธ์กฐ๋ฅผ ํ ์ ์์ต๋๋ค.
SwiftGen github (๊ณต์)
๐บbrew๊ฐ ์๋ ๊ฒฝ์ฐ (Homebrew)
- Homebrew Official: https://brew.sh/index_ko
- ๋น ๋ฅธ ์ค์น ๋ฐฉ๋ฒ:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
โ ๏ธ ์ฐธ๊ณ ์ฌํญ - swiftgen์ SPM, Cocoapods๋ก ํ๋ก์ ํธ ๋ด์ ์ค์นํ์ง ์๊ณ Homebrew๋ก ์ค์นํ์ฌ ํ๋ก์ ํธ์ ์ด๊ธฐํํ์ฌ ์ฌ์ฉํฉ๋๋ค. (macOS์ฉ ํจํค์ง ๊ด๋ฆฌ์)
- ๐ฆํจํค์ง ์ค์น (ํฐ๋ฏธ๋)
brew install swiftgen
- ์ด๊ธฐํ (ํ๋ก์ ํธ ์ต์์ ๋๋ ํ ๋ฆฌ)
swiftgen config init- ์ด๊ธฐํ๊ฐ ์๋ฃ๋๋ฉด ๋๋ ํ ๋ฆฌ์ swiftgen.ymlํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
- Localizable.strings ํ์ผ ํ๋ก์ ํธ์ ์ถ๊ฐ
Localizable.strings์์ฑ- xcode์์
cmd + N stringsํ์ ์ ํLocalizable.strings์์ฑ
- xcode์์
- ํ์งํ ํ ๋ด์ฉ ์
๋ ฅ
"๊ตฌ๋ฌธ" = "ํ์งํํ ๋ด์ฉ";์ ๋ ฅ (ex:"title" = "home";)- title์ด enum์ผ๋ก ์์ฑ๋๊ณ , home์ด view์ ํ์๋ ๋ด์ฉ.
detail.navigationbar.title = "์์ธ ๋ทฐ";์ด๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. (๋จ๊ณ๋ณ๋ก enum ์์ฑ)
- swiftgen.yml ๊ตฌ๋ฌธ ๋ถ์
- ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์
swiftgen config lint๋ก ๊ตฌ๋ฌธ๋ถ์.
โ ์ด์ ์์ ๋ ์ ๋ํ๋๋ ๋ฉ์ธ์ง (์ฐธ๊ณ ์ฉ)
> Common parent directory used for all input paths: <none>
> Common parent directory used for all output paths: <none>
> 1 entry for command strings:
$ swiftgen strings --templateName structured-swift5 --param enumName=S --output swiftgen-samples/Strings+Generated.swift swiftgen-samples/Localizable.strings
> 1 entry for command xcassets:
$ swiftgen xcassets --templateName swift5 --param enumName=I --output swiftgen-samples/XCAssets+Generated.swift swiftgen-samples/Assets.xcassets
๐ซError ๋ฐ์์ ๋ํ๋๋ ๋ฉ์ธ์ง(์ฐธ๊ณ ์ฉ)
Linting swiftgen.yml
Error: 49:6: error: parser: while parsing a block collection in line 48, column 6
did not find expected '-' indicator:
params:
^
5. ๊ตฌ๋ฌธ ์์ฑ swiftgen
- swiftgen.yml์ config์ ๋ฐ๋ผ Localizable.string, Assets.xcassets์ ๋ด์ฉ์ด enum์ผ๋ก ๊ตฌ์กฐํ ๋ฉ๋๋ค.
- Localizable.string ๋ถ๋ถ
swiftgen.yml:18~25 - Assets.xcassets ๋ถ๋ถ
swiftgen.yml:47~56
- ์์ฑ๋
*+Generated.swiftํ์ผ์ xcode์ ์ถ๊ฐํด์ฃผ์ธ์.swiftgen-samples/Strings+Generated.swiftswiftgen-samples/XCAssets+Generated.swift
7. ๊ฐ *+Generated.swift์์ enum ์์ฑ ํ์ธ.
- ์ด์ title์
S.title๋ฅผ ์ฐธ์กฐํ๋ฉด ๋ฏธ๋ฆฌ ์ ์ํhome์ผ๋ก ๋ํ๋ฉ๋๋ค. - assets๋ ์ด ํ๋ก์ ํธ์ heon์ด๋ผ๋ ์ด๋ฏธ์ง์
์ ์ถ๊ฐํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
I.heon.image๋ฅผ ์ฐธ์กฐํ๋ฉด UIImage๋ฅผ returnI.heon.nameassets์ ์ถ๊ฐํ name์ return
- ์ด๋ก์ assets์ ๋ ์์ ํ๊ฒ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
swiftgen์ผ๋ก ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ.
- ์์ผ๋ก Localizable.string, Assets.xcassets ์ ๋ด์ฉ์ ์ถ๊ฐํ ๋๋ง๋ค ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์
swiftgen์ ํธ์ถํ๋ฉด ์๋์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค.
์ด ๋ด์ฉ์ Youtube Kelvin Fok์ https://youtu.be/HVtZpywL0HM ์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ต๋๋ค.
12๋ถ์ ์งง์ ์์ ํ๋ฒ์ด๋ฉด ์ดํด๊ฐ ๊ฐ๋ฅํ๋ ์ ๋ด์ฉ์ ์ดํด๊ฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ๊ผญ ๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.