์ฌ๋ฌ์ฌ๋์ด ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ปค๋ฐ๋ฉ์์ง ์ ๋๊ฒ ๋ํ ๋งค์ฐ ๊ณ ๋ฏผ์ค๋ฝ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์ฌ๋์ด ์ง ๊ฒ์ฒ๋ผ ์ฝ๋ ๊ท์น์ ์ ์งํค๋๊ฒ ๋ํ ์ด๋ ต๋ค. ์ปค๋ฐ๋ฉ์์ง๋ ์๋๋๋ผ๋, 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
https://tngusmiso.tistory.com/59
'potato's iOS Story > CloneApp + ์ฝ๋๋ฆฌ๋ทฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CloneApp] (UIKit) toss ์ฑ ํด๋ก ์ฝ๋ฉ - (2) Home ํญ UI ๋ง๋ค๊ธฐ (0) | 2022.07.14 |
---|---|
[CloneApp] (UIKit) toss ์ฑ ํด๋ก ์ฝ๋ฉ - (1) TabBar ๋ง๋ค๊ธฐ (2) | 2022.06.30 |
[iOS] Swift๋ก ์์ฃผ ๊ฐ๋จํ Todo List ๋ง๋ค๊ธฐ (1) (0) | 2022.02.04 |