ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftLint 사용하기 2
    iOS 2023. 2. 14. 18:25


    지난 포스팅에서 설명드렸던 SwiftLint에 대해서 한번 더 간단히 말씀드리겠습니다.
    SwiftLint는 Swift 언어를 사용하는 프로젝트에서 일관된 코드 스타일을 유지하고 코드 품질을 향상시키는 데 도움을 주는 도구이고, 이를 사용하여 코딩 스타일, 네이밍 규칙, 문법 및 버그에 대한 일반적인 문제를 감지하고 수정한다는 목적을 가지고 있습니다.


    이번 시간에는 SwiftLint 설치 이후 적용하는 방법에 대해서 알려드리겠습니다.
    SwiftLint 설치방법은 SwiftLint적용하기1을 참고 하시면 됩니다.
    SwiftLint적용하기1의 방법을 성공적으로 끝내셨다면 Xcode Build를 진행합니다.
    (Xcode에서 Build 단축키 Command + B)


    빌드 후 아래와 같이 해당 프로젝트내에서 발생한 컨벤션 관련되어 발생한 경고가 떴다면 설치 및 SwiftLint적용이 성공적으로 된것입니다.🙆🏻‍♀️‼️

    아래의 이미지에서는 Trailing Whitespace Violation: Lines should not have trailing whitespace. (trailing_whitespace)
    해당 줄에는 공백이 있으면 안된다는 경고를 띄워주고 있습니다.


    저는 위의 사진에 나와있는 것처럼 아래와 같은 경고가 떴습니다! (경고 ㅓ어쩔티비..📺)

    Run script build phase 'SwiftLint Script' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase.

    해당 에러는 SwiftLint 스크립트 단계가 아웃풋을 명시하지 않았기 때문에 발생합니다.
    Xcode는 빌드에 대해 다른 스크립트를 실행하는지 여부를 판단할 수 없으므로 빌드가 실행될 때마다
    SwiftLint 스크립트가 실행되고 불필요한 실행을 하거나 빌드 시간을 지연시킬 수 있습니다.


    위의 에러를 해결하기 위한 방법 2가지

    1. 스크립트의 출력 의존성을 추가
    # Add the output file as a dependency of the build phase
    output_file=".swiftlint.result.json"
    "$PODS_ROOT/SwiftLint/swiftlint" lint --reporter json > "$output_file"
    
    # Mark the output file as an output of the build phase
    echo "Generated output file: $output_file"
    echo "Marking it as an output dependency..."
    echo "$output_file" > "$SCRIPT_OUTPUT_FILE_0"
    


    2. 아래 예시처럼 SwiftLint Script에서 "Based on dependency analysis"의 체크박스를 해제하여
    모든 빌드에서 스크립트를 실행하도록 설정하면 됩니다.



    우리는 드디어 💡.swiftlint.yml 파일을 생성하여 프로젝트에서 적용할 규칙 및 구성을 설정해봅니다. 💡
    .swiftlint 파일에서는 적용하고 싶은 규칙 제외하고 싶은 규칙등 원하는대로 커스터마이징을 할 수 있습니다.

    .swiftlint.yml 파일에서 사용 가능한 설정 중 일부는 다음과 같습니다:

    • included: SwiftLint가 검사해야하는 파일의 경로와 패턴을 정의합니다.
    • excluded: SwiftLint가 검사하지 않아야하는 파일의 경로와 패턴을 정의합니다.
    • disabled_rules: 비활성화할 규칙을 나열합니다.
    • opt_in_rules: 활성화할 규칙을 나열합니다.
    • whitelist_rules: 비활성화한 규칙 중에서 특정 파일 또는 라인에 대해 규칙을 다시 활성화할 수 있습니다.


    이 외에도 SwiftLint는 다양한 규칙을 제공합니다.
    예를 들어, identifier_name, function_parameter_count, line_length, unused_import, force_cast, trailing_whitespace, colon, file_length 등과 같은 많은 규칙들이 있습니다.


    ⭐️ SwiftLint의 모든 규칙과 설정은 https://github.com/realm/SwiftLint 여기서 참고하면 됩니다! ⭐️


    .swiftlint.yml 파일에서 이러한 규칙을 활성화, 비활성화 또는 수정하려면 각 규칙에 대한 옵션을 수정하거나 추가하면 됩니다.
    예를 들어, type_name 규칙을 수정하려면 다음과 같이 작성할 수 있습니다:

    type_name:
      min_length: 4 # only warning
      max_length: # warning and error
        warning: 40
        error: 50

    위 예시에서는 경고 수준에서는 타입 이름의 최소 길이가 4자 이상이어야 하며,
    최대 길이는 경고 수준에서 40자, 에러 수준에서는 길이가 50자를 초과하지 않아야 합니다.



    또 다른 방법으로는 // swiftlint:disable// swiftlint:enable 주석을 사용하여 규칙을 적용할 파일의 특정 부분을 비활성화하거나
    다시 활성화 할 수 있습니다. 이 방법은 파일의 특정 부분에만 규칙을 적용해야하는 경우 유용합니다.
    예를 들어, 다음과 같은 코드를 작성할 수 있습니다.

    final class CalculatorTests: XCTestCase {
        // swiftlint:disable trailing_whitespace
        var sut = CalculatorItemQueue<Int>()
        
        // swiftlint:enable trailing_whitespace
        func test_enqueue실행시_처음_값을_넣어주면_처음넣은값이_출력된다() {
            // given when
            sut.enqueue(1)
            let expectation = sut.peek
            
            // then
            XCTAssertEqual(1, expectation)
        }
    


    위 코드에서는 trailing_whitespace 규칙을 // swiftlint:disable 주석으로 비활성화하고 //swiftlint:enable주석으로 다시 활성화합니다.
    이렇게하면 아래처럼 test 함수에 대해서만 trailing_whitespace규칙이 활성화됩니다.




    이제 우리는 .swiftlint.yml을 사용할 수 있습니다!!!
    프로젝트마다 적용하고 싶은 기본 규칙을 정리해두고 활용한다면
    사소한 실수를 줄이고 코드를 깔끔하게 작성하는데 큰 도움이 될 것 같습니다. 💙

    'iOS' 카테고리의 다른 글

    SwiftLint 사용하기 1  (2) 2023.02.10

    댓글

Designed by Tistory.