-
[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)를 사용하여 클래스에 메서드를 추가하거나 확장할 때 발생하는 경고라고 한다.
이 오류의 해결 방법은
- 동일한 메서드를 카테고리에서 정의한 경우, 해당 메서드를 클래스의 원래 구현에서 제거하고 카테고리에서만 사용하도록 한다
- 카테고리에서 메서드를 재정의하려는 경우, 카테고리 대신 서브클래스를 만들어서 재정의하도록 한다.
- 카테고리에 정의된 메서드의 이름을 변경하여 원래 클래스의 메서드와 충돌을 피할 수 있도록 한다.
- 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
반응형