2012-02-27 3 views
1

OS X 개발을 배우면서 여기에서 대상이 10.6 이상인 응용 프로그램을 빌드하는 방법을 알아야하는 이상한 상황이 발생했으며 10.7이면 호출해야합니다. 몇 가지 새로 추가 된 메서드 또는 열거 형 그런 길은 없지만 그것을 구할 생각입니다.Mac OS X 버전 별 API 사용법

매크로 또는 비슷한 것을 통해 사용해야하는 방법이 있어야합니다. OS 별 빌드를 만들고 싶지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 그런 길은 없지만 그것을 구할 생각입니다.

감사합니다, M P.

당신은 속성 파일에서 버전을 읽을 수

답변

0

:

/System/Library/CoreServices/SystemVersion.plist 

이러한 방법으로, 당신은 #ifdefine

에 의해 다른 버전없이 동적 코드를 만들 수 있습니다 편집 : @ 음 글쎄, 당신이 버전 특정 코드를 생성하고 싶지 않아 이해했습니다. 준비가 되었으면 매우 쉽습니다. 간단하게 사용

#include <Availability.h> 
    #ifdef __MAC_10_7 
     /* 10.7 only code */ 
    #else 
     /* not 10.7 code */ 
    #endif 
+0

응답 해 주셔서 감사합니다. 그래서 당신은 내가 #ifdefine의 도움을 받아 10.7의 특정 열거 형과 메서드를 사용할 수 있고, 10.6보다 높은 목표를 위해 컴파일 할 수 있습니까? #ifdefine의 예가 도움이 될 것입니다. –

+0

조금만 튜닝 해 주셔서 감사합니다. –

+0

사실,이 목적으로 __MAC_10_7 매크로를 안정적으로 사용할 수 있다고 보장 할 수는 없습니다. 10.7 이전의 현재 SDK는이 상수를 정의하지 않지만 10.4 SDK의 최신 버전은 __MAC_10_5도 정의합니다. – Tobias

1

한 가지 방법은 NSFoundationVersionNumber10_*NSFoundationVersionNumber를 비교하는 것입니다 - 가능한 버전 Foundation/NSObjCRuntime.h를 참조하십시오.

경우에 따라 -[NSObject respondsToSelector:]을 시도 할 수 있습니다.

+0

그것을 지적 해 주셔서 고마워하지만 또한 나는 10.if 열거 형을 사용해야하므로 #ifdefine을 사용하고 그 열거 형을 사용하는 메서드를 추가해야 할 것입니다. if 정의를 사용하면 Goess가 컴파일 시간 오류를 생성하지 않습니다. –

+0

@MP'SDKROOT'을 10.7로 설정하면, 그 헤더와 열거 형을 표시 할 수 있습니다. – justin