본문 바로가기

개발경험

"오운완" 앱에 SwiftLint 적용시켜보기

반응형

3월부터 7월말까지 진행했던 오운완 프로젝트가 1.0 버전으로 앱스토어에 출시되었다! 

이제 만든 앱을 하나씩 수정하면서 더 나은 코드를 고민하고 완성도 높은 앱으로 만들기 위해서 고민하고자 한다. 

 

첫 번째로 적용시킬 것이 바로 "SwiftLint"이다. 

 

왜 SwiftLint를 사용하게 되었나?

물론 처음부터 swiftLint를 사용하려고 했던 것은 아니다. 1명의 다른 iOS 개발자와 함께 코딩 컨벤션을 만들고 그렇게 개발을 진행해왔다. 시간이 지나고 더욱 빠르게 작업을 하기 위해서 서로의 코드를 볼 시간이 없어지고 나 스스로도 개발을 빠르게 하기 위해서 내가 쓴 코드에 대해서 자기 검토도 잘 되지 않았다고 생각한다. 

그래서 swiftLint의 도움을 받아서라도 우리들의 규칙을 더 확고히 지키려고 했던 것이다. 

 

한번 프로젝트를 출시할 때까지 진행했고 프로젝트 규모도 상당히 컸기 때문에 좀 두렵기도 했다. 에러 투성이가 되지는 않을까.. 그래도 그만큼 해결할 부분이 생기는 거니까 일단 진행시켜보고자 한다. 

 

 

 

SwiftLint란?

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

SwiftLint는 코드 스타일과 일관성을 유지하기 위한 오픈 소스이다. SwiftLint를 사용하면 개발자 사이에 코드 일관성을 유지하는데 도움을 줄 수 있다. 

 

 

적용시켜보기

brew install swiftlint

터미널에 다음과 같은 명령어를 입력해서 swiftlint를 다운받아주었다. 

 

 

Targets에서 Build Phases에 들어가 + 버튼을 통해 "New Run Script Phase"을 만들어준다. 

 

 

Xcode에서 SwiftLint를 찾지 못하는 이슈가 있어서 다음과 같이 바꿔주었다. 

https://github.com/realm/SwiftLint/issues/3734

 

What should be the path of SwiftLint when installed with Swift Package Dependency · Issue #3734 · realm/SwiftLint

I have installed SwiftLint with Swift Package Dependancy. I have added the following Run script in Build Phases as described in the manual: if which swiftlint >/dev/null; then swiftlint else echo "...

github.com

if test -d "/opt/homebrew/bin/"; then
  PATH="/opt/homebrew/bin/:${PATH}"
fi

if test -d "$HOME/.mint/bin"; then
  PATH="$HOME/.mint/bin:${PATH}"
fi

export PATH

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, run setup.sh (or download from https://github.com/realm/SwiftLint)"
fi

 

 

Run Script 이름을 "SwiftLint Script"로 바꿔준 후, 위치를 Compile Sources 위로 올려주라고 한다. 이렇게 하면 컴파일 하기 전에 스크립트를 실행시켜 SwiftLint를 검사하는게 더 효율적이게 된다고 한다.

 

 

 

그리고 빌드를 딱! 하면!!!

 

........ 순간 좀 후회됐다

 

 

 

하지만 아직 끝난게 아니다 ㅎㅎ 지금은 swiftLint에 있는 모든 룰들을 적용시킨 것이라 그렇다..고 믿고싶다

 

이제 적용하지 않을 것들을 설정해보겠다. 

 

프로젝트에서 새로운 Empty 파일을 생성하고 ".swiftlint.yml" 이라는 이름으로 파일을 만든다. 

 

"."으로 시작되는 파일명은 숨김처리 된다고 한다. 

 

 

 

4가지를 설정할 수 있다.  

disabled_rules:

기본적으로 설정된 룰 중에 비활성화 시키고 싶은 룰들을 적어주면 된다. 

opt_in_rules:

기본적으로 설정되지 않은 룰 중에 활성화 시키고 싶은 룰들을 적어주면 된다. 

included:

검사에 포함할 파일 경로를 적어주면 된다. 

excluded:

검사에 제외할 파일 경로를 적어주면 된다. 

 

https://realm.github.io/SwiftLint/rule-directory.html

 

Rule Directory Reference

 

realm.github.io

여기에 어떤 룰들이 있는지 확인할 수 있는데 정말 너무 많아서.. 차차 추가해 나가야겠다!

 

 

이렇게 프로젝트에 swiftLint를 적용시켜봤다. 사실 더 많은 규칙들을 적용시켜놓고 싶었지만 컴파일 에러가 나서 어쩔 수 없이 규칙들을 뺀 것도 있었다. 차차 프로젝트에 코드 컨벤션을 맞춰나가보면 좋을 것 같다. ㅎㅎ

 

 

반응형