ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift]SwiftLint로 또는 그외 원인으로 생긴 warning 제거기 🤟
    카테고리 없음 2023. 8. 24. 19:21
    어휴.. 진짜 많다..
    개발하다보면 또 생기고...
    개발하다보면 또 생기고...
    개발하다보면 또 생기고...
    무한 반복기 🥲

     


    Method '블라블라..' in category from 

    Method '-trackingVastVideoIcons' in category from /Users/Library/Developer/Xcode/DerivedData/AppName-djwzzwqunbxgugfjhpwscrrwlufh/Build/Intermediates.noindex/AppName.build/Debug-iphoneos/AppName.build/Objects-normal/arm64/AppName_lto.o/967.arm64.thinlto.o overrides method from class in /Users/Library/Developer/Xcode/DerivedData/AppName-djwzzwqunbxgugfjhpwscrrwlufh/Build/Intermediates.noindex/AppName.build/Debug-iphoneos/AppName.build/Objects-normal/arm64/AppName_lto.o/967.arm64.thinlto.o

    👉 해당오류가 나는 이유는 주로 Objective-C 코드에서 발생하며, Objective-C에서 카테고리(category)를 사용하여 클래스에 메서드를 추가하거나 확장할 때 발생하는 경고라고 한다.

     

    이 오류의 해결 방법은 

    1. 동일한 메서드를 카테고리에서 정의한 경우, 해당 메서드를 클래스의 원래 구현에서 제거하고 카테고리에서만 사용하도록 한다
    2. 카테고리에서 메서드를 재정의하려는 경우, 카테고리 대신 서브클래스를 만들어서 재정의하도록 한다.
    3. 카테고리에 정의된 메서드의 이름을 변경하여 원래 클래스의 메서드와 충돌을 피할 수 있도록 한다.
    4. Objective-C 대신 Swift로 개발하면서 카테고리를 사용하는 대신 확장(extension)을 사용하여 클래스를 확장하는 방법도 고려할 수 있다.

    하지만.. 나는 Warning 뜨는 것만 제거 하는 것으로 결정!

    해당 Warning이 광고 라이브러리에서 주로 많이 났는데... Warning만 40개.. 🫢

     

    issue Navigator에 해당 Warning안뜨게 하는 방법은 👇 아래 처럼 설정해주면 안남.ㅎ

    (-Xlinker -no_objc_category_merging)


    Syntactic Sugar Violation: Shorthand syntactic sugar should be used, i.e. [Int] instead of Array<Int> (syntactic_sugar)

    👉 Array 타입을 사용할 때, `Array<Element>` 보다 `[Element]`로 명시하는 것을 권장

    // 변경 전
    var 파라미터 = Array<String>()
    // 변경 후
    var 파라미터 = [String]()

    consider replacing with assignment to '_' or removing it

    👉 함수의 반환 값을 사용하지 않을 때, `let _  = 함수()`보다 그냥 `_ = 함수()` 로 사용하는 것이 더 좋다.

    아니면 함수를 정의할 때 @discardableResult를 붙여주면 반환 값이 사용되지 않더라도 에러가 뜨지 않게 할 수 있다

    // 변경 전
    let _ = 함수명()
    
    // 변경 후
    _ = 함수명()
    
    OR
    
    @discardableResult
    func 함수명() -> 반환값 {

    Unused Optional Binding Violation: Prefer != nil over let _ = (unused_optional_binding)

    👉 사용하지 않는 옵셔널 바인딩은 nil이 아닌 것을 확인하는 방식이 더 좋다.

    // 변경 전
    if let _ = 변수 {}
    
    // 변경 후
    if 변수 != nil {}

    Result of call to 'bind(onNext:)' is unused

    👉 bind(onNext:) 함수를 호출한 결과가 사용되지 않은 경우에 발생

    // 변경 전 
    observable.bind{ value in
        print(value)
    }.disposed(by: disposeBag)
    
    // 변경 후 
    observable.bind(onNext: { value in
        print(value)
    }).disposed(by: disposeBag)
    
    // 또는 경고를 무시하고자 할 때 사용
    
    // swiftlint:disable unused_result
    observable.bind{ value in
        print(value)
    }.disposed(by: disposeBag)
    // swiftlint:enable unused_result
    반응형
Designed by Tistory.