-
[iOS] SwiftGen์ผ๋ก ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ๐ iOS/๊ฐ๋ฐ 2023. 6. 4. 13:03
SwiftGen์ CocoaPods, Homebrew, Mint ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ ํตํด ์ค์นํ ์ ์๋๋ฐ,
๋ณธ ๊ธ์์๋ Homebrew๋ก ์ค์นํด๋ณด๊ฒ ์ต๋๋ค.
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํฉ๋๋ค.
brew update brew install swiftgen
์ค์น๋ฅผ ์๋ฃํ๊ณ ๋๋ฉด ๋ฆฌ์์ค๋ค์ ์ฝ๋๋ก ํ์ฑํด์ค ์ ์๋ yml ํ์ผ์ด ํ์ํ๋ฐ,
yml ํ์ผ์ ํฐ๋ฏธ๋์์ swiftgen config init ์ ์ ๋ ฅํด ์์ฑํ ์ ์์ต๋๋ค.
๋๋ Xcode์์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด yml ํ์ผ์ ์์ฑํ ์๋ ์๋๋ฐ,
์ฐ์ ํ๋ก์ ํธ ํ์ผ - Targets - Build Phases - [+] New Run Script Phase๋ก ์คํฌ๋ฆฝํธ ์น์ ์ ์ถ๊ฐํฉ๋๋ค.
ํฐ๋ฏธ๋์์ ์ ๋ ฅํ๋ ๋ช ๋ น์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก swiftgen config init์ ์์ฑํ๊ณ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ฉด
ํ ๋๋ ํ ๋ฆฌ์ swiftgen.yml ํ์ผ์ด ์์ฑ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
ํ์ผ์ ์ด์ด๋ณด๋ฉด ๋ชจ๋ ์ฃผ์์ฒ๋ฆฌ๊ฐ ๋์ด์์ ํ ๋ฐ
ํ์ํ ๋ถ๋ถ๋ง ์ ์ ํ ์ฐพ์์ ์ฃผ์์ ํด์ ํ๊ณ ํ๋ก์ ํธ์ ๋ง๊ฒ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
ํ์ฌ ์ ํ๋ก์ ํธ์ ํด๋๊ตฌ์กฐ๊ฐ ์ผ์ชฝ๊ณผ ๊ฐ์๋ฐ์.
Image Asset๊ณผ Color Asset์ ๊ตฌ๋ถ๋ ํ์ผ๋ก ๋ง๋ค์ด๋์๊ณ , Font ํด๋์๋ ํฐํธ๋ค์ ๋ค์ ๋ฃ์ด๋์์ต๋๋ค.
์ด ๊ตฌ์กฐ์ ๋ง์ถฐ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ต๋๋ค.
inputs ์์ญ์ ๋ฆฌ์์ค ํ์ผ์ ์์ฑํด์ฃผ๋๋ฐ, ๋ฆฌ์์ค ํ์ผ์ด yml ํ์ผ๊ณผ ๊ฐ์ ์์น์ ์์ง ์์ผ๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์์ธํ ์์ฑํด์ค๋๋ค.
(โ ๏ธ ๊ฒฝ๋ก ์์ธํ ์ ๊ธฐ ๊ท์ฐฎ๋ค๊ณ yml ํ์ผ์ ์์น๋ฅผ ์ฎ๊ฒจ ๋น๋ํ๋ฉด
Command PhaseScriptExecution failed with a nonzero exit code ์ค๋ฅ๊ฐ ๋ฉ๋๋ค!
yml ํ์ผ ์์น๋ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ โ ๏ธ)
outputs ์์ญ์๋ ์ด ๋ฆฌ์์ค๋ค์ ๊ด๋ฆฌํ ์๋ก ์์ฑ๋ ํ์ผ๋ช ์ ์ง์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ธํ ์ต์ ์ SwiftGen GitHub์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ ๋ค์ Run Script๋ก ๋์์์ swift config run์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ ๋ ฅํ๊ณ ๋น๋ํด๋ด ๋๋ค.
(๋ฌผ๋ก ํฐ๋ฏธ๋์์ ์ง์ ์ ๋ ฅํด๋ ๋์ง๋ง, ํ ๋ฒ Run Script๋ก ์์ฑํด๋๋ฉด
๋น๋ํ ๋๋ง๋ค ํด๋น ๋ช ๋ น์ด๊ฐ ์คํ๋์ด ์๋์ผ๋ก outputs ํ์ผ๋ค์ ์ ๋ฐ์ดํธํด์ฃผ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํฉ๋๋ค.)
์ง์ ํ ๊ฒฝ๋ก์ ์ง์ ํ ํ์ผ๋ช ์ ๊ฐ๋ Asset.swift์ Font.swift๊ฐ ์์ฑ๋์์ต๋๋ค!
์์ง ํ๋ก์ ํธ์๋ ๋ ํ์ผ์ด ์ถ๊ฐ๋์ง ์์์ ํ ๋ฐ, Add File์ ํตํด ํ๋ก์ ํธ์๋ ํ์ผ์ ์ถ๊ฐํด์ค๋๋ค.
ํ์ผ์ ์ด์ด๋ณด๋ฉด ์ด๋ ๊ฒ Enum ํํ๋ก ์ฝ๋๊ฐ ์๋์ผ๋ก ์์ฑ๋์ด ์์ต๋๋ค!
์ด์ ์ด ์ฝ๋๋ฅผ ์ด์ฉํด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
let myButton: UIButton = { let btn = UIButton() btn.imageView.image = Asset.Image.TabBar.homeOn.image // Image Asset ์ฌ์ฉ btn.titleLabel.textColor = Asset.Color.green100.color // Color Assset ์ฌ์ฉ btn.titleLabel.font = FontFamily.NotoSansKR.regular.font(size: 14) // Font Asset ์ฌ์ฉ return btn }()
์ง ! ์์ฒญ ๊ฐ๋จํฉ๋๋ค ๐
์ฐธ๊ณ
'๐ iOS > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ