호댕의 iOS 개발

[라이브러리] SwiftLint를 사용해봅시다~ 본문

Software Engineering/iOS

[라이브러리] SwiftLint를 사용해봅시다~

호르댕댕댕 2022. 1. 8. 11:48

일단 라이브러리의 사용법을 작성하기 전에 라이브러리가 뭔지 살펴보자

 

프레임워크 VS 라이브러리

  • 프레임워크: 이게 없으면 iOS 앱을 만들 수 없다. (ex: UIKit, Foundation)
  • 라이브러리: 이게 없이도 iOS 앱을 만들 수 있다. 하나의 모듈화된 기능으로 가져와서 사용할 수 있다. 

 

즉, 라이브러리는 iOS 앱을 만드는데 도움을 주는 도구이나 필수적인 도구는 아닌 것이다. 

SwiftLint도 컨벤션을 지키기 쉽도록 하는 하나의 라이브러리이다. 

 

또한 라이브러리를 사용하기 편리하게 도와주는 것이 의존성 관리 도구이다. 

Xcode에선 주로 다음과 같은 의존성 관리 도구를 사용한다. 

  • Cocoa Pods
  • Carthage
  • Swift Package Manager

 

위의 의존성 관리 도구의 경우 다음 기회에 따로 포스팅해보도록 하겠다.

 

오늘은 Cocoa Pods를 활용해 SwiftLint를 사용하는 방법을 다뤄보고자 한다. 

 

SwiftLint

SwiftLint의 Readme 한국 번역본

 

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는 raywenderlich 스타일 가이드에 기반을 두고 코드 스타일 및 컨벤션을 강제할 수 있는 도구이다. 

즉, 정해진 규칙에 어긋난 코드를 작성하면 warning이나 compile error를 보여준다. 

 

Homebrew를 사용하는 경우 터미널에 다음처럼 작성하면 설치가 된다. 

brew install swiftlint

오늘은 CocoaPods에 중점을 맞춰 보도록 하자. 

 

1. 일단 SwiftLint를 적용하고 싶은 프로젝트의 경로로 이동을 한 후 터미널에 pod init을 적어준다. 

그럼 위 사진처럼 Podfile이 생기게 된다.

그후 use_frameworks! 밑에 사용하고자 하는 라이브러리를 적어주면 된다. 

지금은 SwiftLint를 사용할 것이니 다음과 같이 적어주면 된다. 

pod 'SwiftLint'

 이 때 SwiftLint의 버전을 작성해주는 것이 좋다. 

 

버전을 따로 명시하지 않으면 라이브러리의 최신 버전을 가지고 오게 되는데, 미래에 다른 사람이나 본인이 해당 프로젝트를 사용하게 되면 라이브러리의 버전이 업데이트되어 원하는 대로 동작하지 않을 수 있기 때문이다. 

 

버전은 다음과 같이 작성하면 된다. 

1. 특정 버전만 명시할 경우

  • pod 'SwiftLint', '1.0'

2. 조건으로 명시하는 경우 

  • '> 0.1' : 0.1보다 높은 버전
  • '>= 0.1' : 0.1이거나 이보다 높은 버전 
  • '< 0.1' : 0.1보다 낮은 버전 
  • '<= 0.1' : 0.1이거나 이보다 낮은 버전
  • '~> 0.1.2' : 0.1.2 이상이지만 0.2보다는 낮은 버전 (0.2를 포함하지 않음)
  • '~> 0.1' : 0.1 이상이지만 1.0보다는 낮은 버전 (1.0은 포함하지 않음)

 

그 후 pod install을 터미널에 입력하면 해당 라이브러리를 설치하게 된다.

그럼 다음과 같이 터미널에 뜨게 된다. 

이제 Xcode를 닫고 `파일명.xcworkspace`를 사용하라는 것이다. 

 

그럼 파인더에서 다시 살펴보자. 

다시 파인더로 돌아가보면 이전에는 보지 못했던 파일이 생성되어 있다. 

 

여기로 들어가게 되면 설치한 라이브러리를 사용할 수 있게 되는 것이다. 

만약 라이브러리를 더 이상 사용하지 않아 삭제를 원한다면 Podfile로 가서 작성해놓은 pod '라이브러리명'을 삭제하고 다시 pod install을 해주면 된다.

그럼 tryTableView.xcworkspace에 들어가보자. 여기서 targets에 들어가 Build Phases 탭을 누른다. 

그리고 '+' 버튼을 누르면 위 사진과 같은 창이 나오게 된다. 

 

여기서 New Run Script Phase를 선택하면 된다.

그리고 Run Script를 열어 다음과 같이 작성해주면 된다. 

${PODS_ROOT}/SwiftLint/swiftlint

 

이렇게 하고 빌드를 해주면 

요렇게 굉장히 많은 warning을 보여주며 잘 적용되었다는 것을 확인해볼 수 있다. 

 

이렇게 하면 SwiftLint에서 기본적으로 설정해놓은 규칙을 사용할 수 있다. 

하지만 이렇게만 하면 내가 원하는 규칙을 사용할 수 없다는 문제가 있다. 그리고 불필요한 규칙도 적용이 되어 불편한 점도 있다. 

 

SwiftLint 규칙을 정해보자

그래서 커스텀해서 규칙을 작성해줄 수도 있다!! 

이를 위해선 일단 빈 파일을 만들어줘야 한다!!

Xcode 13.0을 기준으로 Other > Empty로 만들어주면 된다. 

 

이때 파일 명은 반드시 .swiftlint.yml로 작성해줘야 한다. 

이렇게 만드려고 하면 다음과 같은 경고창을 볼 수 있게 된다. 

이름 앞에 .을 붙여서 발생한 경고인데 .을 찍으면 파일이 숨겨진다는 경고이다. 

괜찮으니 Use "."을 누르자. 

이런 식으로 규칙을 어떻게 할지 작성해주면 된다. 

  • disabled_rules: SwiftLint의 룰 중 제외할 룰을 적어주면 된다. 
  • included: 포함할 룰을 작성한다. 
  • excluded: Lint 과정에서 무시할 파일 경로, 파일 명을 작성해준다. -> included보다 우선시된다.
    (만약 'Pods'라고 작성을 하게 되면 Pod으로 받은 라이브러리는 SwiftLint를 적용하지 않는다.)
  • opt_in_rules: 기본 룰이 아닌 룰들을 활성화한다. 
  • only_rules: 지정한 룰만 활성화할 수 있도록 목록을 작성한다. (disabled_rules와 opt_in_rules와 같이 사용할 수 없다. 

예시로 이렇게 작성할 수 있다. 

line_length의 경우 다음처럼 더욱 자세하게 설정해줄 수도 있다. 

line_length:
  warning: 99
  error: 120

 

SwiftLint의 룰들은 SwiftLintDocs에 자세히 정리되어 있다. 

경고에서 Violation 전에 있는 내용을 위 사이트에서 검색하면 쉽게 찾을 수 있다. 

 

 

물론 라이브러리를 잘 알지도 못하면서 남용하면 본인의 코드도 이해하지 못할 수도 있지만 SwiftLint를 사용해보며 잘 사용만 할 수 있다면 개발을 할 때 보다 빠르고 편리하게 할 수 있겠다는 생각을 했다.

 

그럼 다들 참고하셔서 잘 사용하셨으면 좋겠습니다!!  

Comments