iOS/Swift

[Swift] R.swift SPM์œผ๋กœ ์„ค์น˜ํ•ด๋ณด๊ธฐ

๊ฒฝํ‘ธ 2022. 2. 6. 20:06
๋ฐ˜์‘ํ˜•

R.swift๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Custom Resource( ์ด๋ฏธ์ง€, ํฐํŠธ, ์ปฌ๋Ÿฌ ๋“ฑ)๋“ค์„ ๋” ํŽธํ•˜๊ณ  ๊น”๋”ํ•˜๊ฒŒ

์ฝ”๋“œ๋กœ ์ ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•ด ๋“œ๋ฆด๊ฒŒ์š” : )

 

GitHub - mac-cain13/R.swift: Strong typed, autocompleted resources like images, fonts and segues in Swift projects

Strong typed, autocompleted resources like images, fonts and segues in Swift projects - GitHub - mac-cain13/R.swift: Strong typed, autocompleted resources like images, fonts and segues in Swift pro...

github.com

 


 

์‚ฌ์šฉ๋ฐฉ๋ฒ•

README์— ์žˆ๋Š” ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

R.Swift๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)
let color = UIColor(named: "indicator highlight")
let viewController = CustomViewController(nibName: "CustomView", bundle: nil)
let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")

 

R.Swift๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let color = R.color.indicatorHighlight()
let viewController = CustomViewController(nib: R.nib.customView)
let string = R.string.localizable.welcomeWithName("Arthur Dent")

 

์„ค์น˜๋ฐฉ๋ฒ•

์ผ๋‹จ ์ €์˜ ์ผํ™”๋ฅผ ๋จผ์ € ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด

SPM์œผ๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์„ค์น˜๋Š” ์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

README๋ฅผ ๋ณด๋ฉด์„œ ์•ˆ๋‚ดํ•ด ์ฃผ์‹  ๋Œ€๋กœ ์ž˜ ๋”ฐ๋ผ๊ฐ”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์ƒ๊ฐ๋Œ€๋กœ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

cocoa pod์œผ๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€

 

๋ถ„๋ช…ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์— 

R.Swift Issue๋ž€์— ๋“ค์–ด๊ฐ€๋ดค์Šต๋‹ˆ๋‹ค.

 

SPM๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ €์™€ ๊ฐ™์€ ํ˜„์ƒ์„ ๊ฒช๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ

์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ฑ„๋กœ ๋‚จ์•„์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ •๋ง ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๊ตฌ๊ธ€๋ง๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณธ ๋์—

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์•Œ์•„์™”์Šต๋‹ˆ๋‹ค.

 

์ด๋ฏธ ์ž˜ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ œ๊ฐ€ ๋ชจ๋ฅด๊ณ  ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฑธ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ํ˜น์‹œ ๋‹ค๋ฅธ ๋Œ€์•ˆ์„ ์•„์‹œ๋Š” ๋ถ„๊ป˜์„œ๋Š” ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” : - ) 

 

1. Brew install rswift ( ๊ธฐ์กด์— ์„ค์น˜๋œ ๊ฒŒ ์žˆ๋‹ค๋ฉด ์ œ๊ฑฐํ•ด ์ฃผ์„ธ์š” )

2. TARGETS์—์„œ Build Phases๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค! 

 

Target
Build Phases

3. ์œ„์˜ ์ด๋ฏธ์ง€์—์„œ ์ขŒ์ธก ์ƒ๋‹จ์— ์žˆ๋Š” + ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ์ดํ›„  new run script phase๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

 

4. ์Šคํฌ๋ฆฝํŠธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š” + based on dependency analysis ๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ฒดํฌ๋ฅผ ํ•ด์ œํ•ด ์ฃผ์„ธ์š”.

 

5. ํ•˜๋‹จ์— ์žˆ๋Š” Input Files์™€ Output Files์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.

  • Input Files → $TEMP_DIR/rswift-lastrun
  • Output Files → $SRCROOT/R.generated.swift

6. Compile Sources ์œ„๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒจ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

7. ๋นŒ๋“œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

8. ์ด์ œ ๋‹ค์‹œ SPM์œผ๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Rswift๋งŒ ์„ค์น˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Dynamic๊ณผ ๊ด€๋ จ๋œ ๊ฑด ์ฒดํฌํ•ด์ œํ•ด ์ฃผ์„ธ์š”.

 

9. ์„ค์น˜๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๊ณ  ๋‚˜๋ฉด R.generated.swift ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์„ ํ…๋ฐ ์ด๊ฑธ ํ”„๋กœ์ ํŠธ ํด๋”์— ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

 - Copy items if needed๋Š” ์ฒดํฌ ํ•ด์ œํ•ด ์ฃผ์„ธ์š” : - )

 

 

10. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ์กด์— SPM์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š๋˜ ๊ฒƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

์˜ค๋Š˜์€ R.swift ์‚ฌ์šฉ๋ฒ•์ด๋ž‘ SPM์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค.

 

์ •ํ™•ํžˆ ์–ด๋–ค ์ด์œ ์ธ์ง€๋ฅผ ์•Œ์ง€ ๋ชปํ•˜์ง€๋งŒ ์ž˜ ํ•ด๊ฒฐ๋˜์–ด ๊ธฐ์˜๋„ค์š”.

 

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•