[iphone] Xcode에서 더 이상 사용되지 않는 경고 억제
모든 SDK가 떠 다니기 때문에 여러 SDK 및 플랫폼을 빌드하는 것이 편리합니다. 그러나 3.2에서 3.0으로, 때로는 2.x로 튀어 나오면 변경되거나 대체 된 메소드와 관련하여 더 이상 사용되지 않는 경고가 자주 나타납니다.
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
이전 OS와의 호환성을 유지하고 싶을 때 빌드 할 때 ‘노이즈’를 제거하려고 노력하고 있기 때문에 이러한 경고를 끄거나 끄는 방법이 있습니까?
답변
-Wno-deprecated-declarations
Xcode의, 또는 해당 설정을 사용해보십시오 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"
결과적으로 모든 경고를 한 번에 억제하는 것보다 조금 더 나은 연습을합니다 … 결국 당신이 무엇을하고 있는지 알고 있어야합니다.