[iphone] Xcode에서 더 이상 사용되지 않는 경고 억제

모든 SDK가 떠 다니기 때문에 여러 SDK 및 플랫폼을 빌드하는 것이 편리합니다. 그러나 3.2에서 3.0으로, 때로는 2.x로 튀어 나오면 변경되거나 대체 된 메소드와 관련하여 더 이상 사용되지 않는 경고가 자주 나타납니다.

warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.

이전 OS와의 호환성을 유지하고 싶을 때 빌드 할 때 ‘노이즈’를 제거하려고 노력하고 있기 때문에 이러한 경고를 끄거나 끄는 방법이 있습니까?



답변

-Wno-deprecated-declarationsXcode의, 또는 해당 설정을 사용해보십시오 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS(프로 팁 :이 경고에 대한 특정 설정을 찾으려면 빌드 설정에 “더 이상 사용되지 않음”만 입력하십시오).

Xcode의 현재 버전 (예 : Xcode 9.2) :

여기에 이미지 설명을 입력하십시오


Xcode의 고대 버전 (예 : Xcode 2.x, 3.x) :

여기에 이미지 설명을 입력하십시오


답변

@samiq 게시물에 댓글을 아직 추가 할 수 없으므로 확장 할 것이라고 생각합니다. 더 이상 사용되지 않는 기능을 사용하는 함수 / 메소드 앞에 언급 된 지시문을 입력하십시오. 그런 다음 기능 종료 정의 후 이전 설정을 복원 할 수 있습니다.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma GCC diagnostic pop


답변

Clang은 @manicaesar 포스트의 “복원”단계를 초기 경고 상태와 무관하게 만드는 멋진 기능을 제공합니다.

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
    //use deprecated stuff
}
#pragma clang diagnostic pop

Clang 매뉴얼 을 인용하려면 :

GCC의 pragma에서 제공하는 모든 기능 외에도 Clang을 사용하면 현재 경고 상태를 푸시 및 팝할 수 있습니다. 이것은 다른 사람들이 컴파일 할 헤더 파일을 작성할 때 특히 유용합니다. 어떤 경고 플래그를 사용하는지 알 수 없기 때문입니다.


답변

우리는 구형 OS를 지원해야하지만 경고에주의를 기울여야하기 때문에 좀 더 깔끔한 방법을 원했습니다. 나는 이것을 모질라 코드에서 영감을 얻었습니다.

#define SILENCE_DEPRECATION(expr)                                   \
do {                                                                \
_Pragma("clang diagnostic push")                                    \
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")   \
expr;                                                               \
_Pragma("clang diagnostic pop")                                     \
} while(0)

#define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
#define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr)

이를 통해 다음을 수행 할 수 있습니다.

SILENCE_IOS7_DEPRECATION(return [self sizeWithFont:font constrainedToSize:size]);

또한 코드 블록과 함께 작동합니다.

SILENCE_IOS7_DEPRECATION(
    view = [[MKPolylineView alloc] initWithPolyline:self];
    view.lineWidth = self.lineWidth;
    view.strokeColor = self.color;
);

또한 iOS 7 이전 장치에 대한 지원을 중단하면 코드를 쉽게 검색하여 더 이상 사용되지 않는 사용법을 찾을 수 있습니다.


답변

다음을 사용하여 파일 당 경고를 표시하지 않을 수도 있습니다.

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

결과적으로 모든 경고를 한 번에 억제하는 것보다 조금 더 나은 연습을합니다 … 결국 당신이 무엇을하고 있는지 알고 있어야합니다.


답변

더 이상 사용되지 않는 메소드 구현 또는 더 이상 사용되지 않는 클래스 구현을 경고 하려면 다음을 사용하십시오.

    #pragma clang 진단 푸시
    #pragma clang 진단이 "-사용되지 않는 구현"을 무시했습니다.
    // 코드
    #pragma clang 진단 팝


답변

빌드 설정에서을 찾으십시오 Deprecated Functions.

여기에 이미지 설명을 입력하십시오