Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

potato's iOS Story/CloneApp + ์ฝ”๋“œ๋ฆฌ๋ทฐ

[iOS/Swift] xcode์— SwiftLint ์„ค์น˜ํ•˜๊ธฐ

๊ฐ์ž ๐Ÿฅ” 2022. 5. 29. 14:17
๋ฐ˜์‘ํ˜•

 

์—ฌ๋Ÿฌ์‚ฌ๋žŒ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ์ ๋Š”๊ฒƒ ๋˜ํ•œ ๋งค์šฐ ๊ณ ๋ฏผ์Šค๋Ÿฝ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ์‚ฌ๋žŒ์ด ์ง  ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ”๋“œ ๊ทœ์น™์„ ์ž˜ ์ง€ํ‚ค๋Š”๊ฒƒ ๋˜ํ•œ ์–ด๋ ต๋‹ค. ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋Š” ์•„๋‹ˆ๋”๋ผ๋„, xcode ํ”„๋กœ์ ํŠธ์— swift ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์žก์•„์ฃผ๋Š” SwiftLint๋ฅผ ์ ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. MC1 ํŒ€์›์ด ์•Œ๋ ค์คฌ๋‹ค!

๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‚ด๊ฐ€ ํŒ€์›๋“ค์„ ์•Œ๋ ค์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊นŒ๋จน์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ ๋Œ€์ถฉ ์จ๋ณด๋ฉด์„œ ์„ค์น˜ํ•ด๋ณด๋ ค๊ณ ํ•œ๋‹ค.

Lint๋ž€?
Lint๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด์„œ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์ฃผ๋Š” ๋„๊ตฌ๋กœ ํ™œ์šฉ๋œ๋‹ค. SwiftLint๋Š” ๋ง๊ทธ๋Œ€๋กœ Swift์–ธ์–ด์—์„œ ๊ทœ์น™์— ์–ด๊ธ‹๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋‚ด์„œ ๊ฒฝ๊ณ  ๋˜๋Š” ๋นŒ๋“œ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 


1. SwiftLint ์„ค์น˜

Mac์— swiftLint๋ฅผ ๋จผ์ € ์„ค์น˜ํ•œ๋‹ค. (๋‚˜๋Š” Homebrew๋ฅผ ํ™œ์šฉํ•ด์„œ ์„ค์น˜ํ–ˆ๋‹ค.) (ํ„ฐ๋ฏธ๋„์—์„œ์ž…๋ ฅ)

brew install swiftlint

 

2. Script ์ž‘์„ฑ

์™ผ์ชฝ ์ตœ์ƒ๋‹จ ํ”„๋กœ์ ํŠธ ํด๋ฆญ - Targets์—์„œ ํ”„๋กœ์ ํŠธ ๋ช… ํด๋ฆญ - Build Phases ํƒญ ํด๋ฆญ - + ๋ฒ„ํŠผ ํด๋ฆญ - New Run Script Phase

 

ํด๋ฆญํ•˜๋ฉด ์ƒˆ๋กœ์šด "Run Script"๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ ์ด๊ฑธ ์—ด์–ด์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ž.

export PATH="$PATH:/opt/homebrew/bin"
if which swiftlint > /dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

 

Run Script ๋ผ๋Š” ์ด๋ฆ„์„ SwiftLint Script๋กœ ๋ฐ”๊ฟ” ์ค€ ๋‹ค์Œ, ์œ„์น˜๋ฅผ Compile Sources ์œ„๋กœ ์˜ฌ๋ ค์ค€๋‹ค. (์ปดํŒŒ์ผ ํ•˜๊ธฐ ์ „์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํžˆ์…”์ปท SwiftLint๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋ผ์„œ ์ˆœ์„œ๋ฅผ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.)

3. .swiftlin.yml ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ์—์„œ command+N์„ ๋ˆŒ๋Ÿฌ์„œ new file ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. Empty ํŒŒ์ผ์„ ์„ ํƒ

ํŒŒ์ผ์ด๋ฆ„์€ .swiftlint.yml ๋กœ ํ•ด์•ผ๋งŒํ•œ๋‹ค. .์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆจ๊น€ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

4. ๊ทœ์น™ ์ ์šฉํ•˜๊ธฐ

์ด๋ฏธ ์ ์šฉ๋˜์–ด์žˆ๋Š” ๊ทœ์น™์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ œ์™ธํ• ๊ฑด ์ œ์™ธํ•˜๊ณ  ์ ์šฉํ•  ๊ฑด ์ ์šฉํ•˜๋Š”๊ฒŒ ํ•„์š”ํ•˜๋‹ค. ๋‚˜๋Š” ์ผ๋‹จ ๋ธ”๋กœ๊ทธ์— ๋‚˜์™€์žˆ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ๋‚˜์ค‘์— ๋” ์ž˜ ์•Œ๊ฒŒ๋˜๋ฉด ๋” ์ ์šฉํ• ๋“ฏ?!

disabled_rules: Default rule ์ค‘์— ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์€ ๊ทœ์น™์„ ์ฐพ์•„์„œ ์ ์–ด์ค€๋‹ค.

disabled_rules: # Default Rules์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•  ๊ทœ์น™
    
    # ๋ผ์ธ ๋’ค์— ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://realm.github.io/SwiftLint/trailing_whitespace.html
    - trailing_whitespace
    
    # ๊ฐ•์ œ ์บ์ŠคํŒ…์€ ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. https://realm.github.io/SwiftLint/force_cast.html
    - force_cast
    
    # ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์€ ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. https://realm.github.io/SwiftLint/force_unwrapping.html
    - force_unwrapping

opt_in_rules: ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋น„ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ํ™œ์„ฑํ™” ํ•˜๊ณ ์‹ถ์€ ๊ทœ์น™๋“ค์„ ์ ์–ด์ค€๋‹ค.

opt_in_rules:
  # .count==0 ๋ณด๋‹ค๋Š” .isEmpty๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. https://realm.github.io/SwiftLint/empty_count.html
  - empty_count
  
  # ๋นˆ String ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” .isEmpty๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. https://realm.github.io/SwiftLint/empty_string.html
  - empty_string

 

5. ์™„์„ฑ!

์ผ๋ถ€๋Ÿฌ ๊ณต๋ฐฑ์„ ๋งŽ์ด ์ฃผ๊ณ  ๋นŒ๋“œํ•ด๋ณด๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ ๊ฒฝ๊ณ ๋ฌธ์ด๋œฌ๋‹ค. ์ด์ œ ์ฝ”๋“œ๋ฅผ ์งค๋Œ€ Lint๋ฅผ ์ž˜ ์ง€์ผœ์„œ ์งœ๋Š” ์ผ๋งŒ ๋‚จ์•˜๋‹ค. ํ›„ํ›„ :-)

 

๐Ÿ“– Reference

https://github.com/realm/SwiftLint

 

GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.

A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.

github.com

https://tngusmiso.tistory.com/59

 

[iOS/Swift] XCode ํ”„๋กœ์ ํŠธ์— SwiftLint ์ ์šฉํ•˜๊ธฐ

SwiftLint XCode ํ”„๋กœ์ ํŠธ์— Swift ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์žก์•„์ฃผ๋Š” SwiftLint๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„๋ณด์ž. ์ผ๋ฐ˜์ ์œผ๋กœ Lint๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜

tngusmiso.tistory.com

 

๋ฐ˜์‘ํ˜•