실행중인 Mac OS X 버전을 프로그래밍 방식으로 결정하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/157759

  •  03-07-2019
  •  | 
  •  

문제

표범과는 다른 호랑이에서 약간 다르게 행동 해야하는 프로그램이 있습니다. Mac OS XI가 실행중인 버전의 버전을 정확하게 결정할 수있는 시스템 호출을 아는 사람이 있습니까? 빌드 머신의 OS를 결정하기위한 여러 매크로 정의를 찾았지만 러닝 머신의 OS를 결정하는 데 실제로는 좋은 것은 없습니다.

고마워요, 조

도움이 되었습니까?

해결책

여기 에서이 기사를 참조하십시오

그러나 간단히 말해서 탄소를 사용하는 경우 gestalt () 호출을 사용하고 코코아를 사용하는 경우 NSappKitversionNumber라는 상수가 있습니다.

편집하다: Mac OSX 10.8 이상의 경우 더 이상 Gestalt ()를 사용하지 마십시오. 자세한 내용은이 답변을 참조하십시오. OS X 또는 iOS에서 런타임에서 OS 버전을 결정하려면 어떻게합니까 (게슈탈트를 사용하지 않고)

다른 팁

능력의 존재를 확인할 수 있습니까? 예를 들어:

if (NSClassFromString(@"NSKeyedArchiver") != Nil)

또는

if ([arrayController respondsToSelector: @selector(selectedIndexes)])

그런 다음 Apple의 제품 마케팅 그룹이 특정 번호를 준 것이 아니라 운영 체제가 필요한 일을한다는 것을 알고 있습니다. ;-)

API는 게슈탈트 관리자를 통해 이루어집니다.

보다 "OS 버전 결정"Cocoadev 사이트에서.

터미널에서 :

system_profiler SPSoftwareDataType

제공 :

Software:

    System Software Overview:

      System Version: Mac OS X 10.5.5 (9F33)
      Kernel Version: Darwin 9.5.0
      Boot Volume: Main
      Boot Mode: Normal
      Computer Name: phoenix
      User Name: Douglas F Shearer (dougal)
      Time since boot: 2 days 16:55

또는:

sw_vers

제공 :

ProductName:    Mac OS X
ProductVersion: 10.5.5
BuildVersion:   9F33

OS 버전이 실제로 원하는 것입니까? 특정 프레임 워크의 존재 또는 버전 번호와 같이 테스트해야 할 것이 더 적절할 수 있습니다.

프로그램 내에서 Gestalt를 사용할 수 있습니다. 다음은 OS 버전을 얻기 위해 내 프로그램에 사용하는 코드입니다.

long version = 0;
OSStatus rc0 = Gestalt(gestaltSystemVersion, &version);
if((rc0 == 0) && (version >= 0x1039)) {      
    // will work with version 10.3.9
    // works best with version 10.4.9
    return; // version is good
}
if(rc0) {
    printf("gestalt rc=%i\n", (int)rc0);
} else {
    printf("gestalt version=%08x\n", version);
}

respondsToSelector: 주어진 릴리스가 무엇을하고 구현하지 않는지에 대한 테이블을 유지하는 것보다 거의 확실합니다.

게을러 라. 런타임이 무언가를 할 수 있는지 여부를 알려 주시고 필요할 때 오래된 방법으로 넘어가십시오. 코드는 나머지 코드가 계속 확인 해야하는 글로벌 데이터를 유지할 필요가 없기 때문에 코드가 훨씬 덜 취약합니다.

명령 줄에서 이것을 실행합니다.

system_profiler SPSoftwareDataType | grep Mac
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top