2011-10-24 4 views
4

iOS의 버전을 감지하고 iCloud를 지원하는지에 대한 전처리 명령이 있습니다. 내가 궁금 것은 만약 그렇다면 같은 매크로 :버전 특정 전처리 기 매크로

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 50000 
    //stuff 
#endif 

의지의 iOS 4.x를 사용한 사람은 앱 스토어에서 앱을 다운로드하지만이 아이폰 OS 5.x를 위해/컴파일 한 경우이 작업

이것은 컴파일 타임에 평가 될 것이므로 앱이 기기에서 컴파일되었거나 어떻게 작동합니까? 동일한 결과에 대해 더 좋은 방법이 있습니까?

답변

7

매크로를 사용할 수 없습니다. 매크로는 컴파일 타임에 평가되며 런타임에서는 평가되지 않습니다. 이는 iCloud 지원과 같이 기능/기능 탐지에 대해 원하는 것입니다. (그렇지 않은 경우 모든 경우에 을 사용하여 iOS 5 SDK에 대해을 컴파일하게됩니다.)

호출 할 수 있는지 여부를 알려주는 유비쿼터스 메소드가 있는지 테스트해야합니다 , 아이 클라우드 지원 여부를 알 수있는, 예를 들면 :

if ([[NSFileManager defaultManager] respondsToSelector:@selector(isUbiquitousItemAtURL:)])  
{ 
    // call it and do other iCloud stuff 
} 

빠른 후속 노트 재 : 컴파일에 대한 질문. 컴파일은 실제 코드를 장치에서 실행되는 바이너리로 바꾸는 프로세스입니다. 이것은 Xcode에서 빌드를 수행 할 때 발생하며, 사용자 컴퓨터에서만 발생하며 Apple이나 장치에서는 발생하지 않습니다. 이것이 버전 번호에 대한 컴파일 타임 검사가 작동하지 않는 이유입니다. 장치에 보낼 때까지 이미 결정이 내려졌습니다.

+0

고마워요. 나는 확신하지 못했고 많은 기기에서 충돌 할만한 것을 제출하고 싶지 않았습니다. 제안 된 코드는 훌륭하게 작동합니다. – utahwithak

관련 문제