2009-05-10 3 views
3

안녕하세요 모두iPhone 펌웨어 버전 확인

iPhone 2.2. * 및 버전 3.0 용으로 하나의 앱을 만들고 싶습니다. 2.2에서는 *의 일부 메소드가 3.0에서 사용되지 않습니다. (있는 UITableViewCell의 setText하고 이때 setLabel 등)

아이폰에 사용되며, 당신은 조건부 컴파일 등을위한 전 처리기 지시어를 사용해야합니다

+2

http://stackoverflow.com/questions/820142/how-to-target-a-specific-iphone-version – Kriem

답변

13

를 사용하는 다른 방법을 설정하는 펌웨어 버전을 확인하는 방법은 없나요 __IPHONE_3_0 및 별도의 실행 파일 두 개를 빌드하십시오. 예를 들어

: 당신이 실행시 버전을 감지해야하는 경우

 
#ifdef __IPHONE_3_0 
// code specific to version 3 
#else 
// code specific to version 2 
#end 

당신은 [[UIDevice currentDevice] systemVersion] 사용할 수 있습니다. iPhone OS의 현재 버전 문자열을 반환합니다. 내가 전에 코멘트에서 언급 한 바와 같이

+1

실질적으로없는 아이폰 OS의 다른 버전에 대한 두 개의 별도의 실행 파일을 구축, 말하기 좋은 사용자 경험. 혼란과 호환성 문제에 기여합니다. 대신 앱이 이전 버전의 iPhone OS와 호환되는 경우 런타임에 최신 API가 제공되는지 확인하십시오. – Elliot

0

다른 참조 스레드에서 언급 한 바와 같이, 당신은 하나 개의 코드베이스에서 두 개의 응용 프로그램을 생성하는 전 처리기 지시어를 사용할 수 있지만, 당신은 여전히 ​​두 개의 응용 프로그램이 필요합니다 (2.x 용과 3.x 용)

컴파일 타임 지시문을 사용하여 런타임 결정을 내릴 수 없습니다.

다른 스레드에 대한 자세한 내용이 있습니다.

0

대체 솔루션은 respondsToSelector를 사용하여 확인하십시오. 대한 예 -

CGSize expectedLabelSize; 
    if ([subTitle respondsToSelector:@selector(sizeWithAttributes:)]) 
    { 
     expectedLabelSize = [subTitle sizeWithAttributes:@{NSFontAttributeName:subTitleLabel.font}]; 
    }else{ 
     expectedLabelSize = [subTitle sizeWithFont:subTitleLabel.font constrainedToSize:subTitleLabel.frame.size lineBreakMode:NSLineBreakByWordWrapping]; 
    }