Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Latest commit

ย 

History

History
120 lines (81 loc) ยท 3.79 KB

File metadata and controls

120 lines (81 loc) ยท 3.79 KB

SwiftGen ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•.

์ด ํ”„๋กœ์ ํŠธ ๋‚ด์šฉ์œผ๋กœ 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์šฉ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž)




SwiftGen ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ์ดˆ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.


  1. ๐Ÿ“ฆํŒจํ‚ค์ง€ ์„ค์น˜ (ํ„ฐ๋ฏธ๋„)brew install swiftgen

  1. ์ดˆ๊ธฐํ™” (ํ”„๋กœ์ ํŠธ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ) swiftgen config init
    • ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋””๋ ‰ํ† ๋ฆฌ์— swiftgen.ymlํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. Localizable.strings ํŒŒ์ผ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€
    • Localizable.strings ์ƒ์„ฑ
      • xcode์—์„œ cmd + N
      • strings ํ˜•์‹ ์„ ํƒ
      • Localizable.strings ์ƒ์„ฑ
    • ํ˜„์ง€ํ™” ํ•  ๋‚ด์šฉ ์ž…๋ ฅ
      • "๊ตฌ๋ฌธ" = "ํ˜„์ง€ํ™”ํ•  ๋‚ด์šฉ"; ์ž…๋ ฅ (ex: "title" = "home";)
        • title์ด enum์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , home์ด view์— ํ‘œ์‹œ๋  ๋‚ด์šฉ.
        • detail.navigationbar.title = "์ƒ์„ธ ๋ทฐ"; ์ด๋ ‡๊ฒŒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (๋‹จ๊ณ„๋ณ„๋กœ enum ์ƒ์„ฑ)

  1. 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

  1. ์ƒ์„ฑ๋œ *+Generated.swift ํŒŒ์ผ์„ xcode์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.
    • swiftgen-samples/Strings+Generated.swift
    • swiftgen-samples/XCAssets+Generated.swift

7. ๊ฐ *+Generated.swift์—์„œ enum ์ƒ์„ฑ ํ™•์ธ.

  • ์ด์ œ title์€ S.title๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋ฏธ๋ฆฌ ์ •์˜ํ•œ home์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • assets๋Š” ์ด ํ”„๋กœ์ ํŠธ์— heon์ด๋ผ๋Š” ์ด๋ฏธ์ง€์…‹์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • I.heon.image ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด UIImage๋ฅผ return
    • I.heon.name assets์— ์ถ”๊ฐ€ํ•œ name์„ return
  • ์ด๋กœ์„œ assets์— ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. swiftgen์œผ๋กœ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ.
  • ์•ž์œผ๋กœ Localizable.string, Assets.xcassets ์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ swiftgen์„ ํ˜ธ์ถœํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์ด ๋‚ด์šฉ์€ Youtube Kelvin Fok์˜ https://youtu.be/HVtZpywL0HM ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
12๋ถ„์˜ ์งง์€ ์˜์ƒ ํ•œ๋ฒˆ์ด๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ˆ ์œ„ ๋‚ด์šฉ์˜ ์ดํ•ด๊ฐ€ ์–ด๋ ค์šด ๊ฒฝ์šฐ ๊ผญ ๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.