Pergunta

Eu tenho um programa que precisa se comportar de forma ligeiramente diferente no Tiger que no Leopard. Alguém sabe de uma chamada de sistema que vai permitir-me para determinar com precisão qual versão do Mac OS X Estou executando. Eu descobri uma série de definições de macro para determinar o sistema operacional da máquina de compilação, mas nada realmente bom para determinar o sistema operacional da máquina em execução.

Obrigado, Joe

Foi útil?

Solução

Veja este artigo aqui

Mas, em suma, se você estiver usando carbono, utilizar a chamada Gestalt (), e se você estiver usando cacau, há uma constante chamada NSAppKitVersionNumber que você pode simplesmente verificar contra.

Editar : Para Mac OSX 10.8 e acima, não use Gestalt () anymore. Veja esta resposta para mais detalhes: Como faço para determinar a versão do sistema operacional em tempo de execução no oS X ou iOS (sem usar Gestalt)?

Outras dicas

Você poderia apenas verificar a presença de uma capacidade? Por exemplo:

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

ou

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

então você sabe que o sistema operacional faz o que você precisa fazer, não que grupo de marketing de produtos da Apple deu um número particular; -)

A API é através da Gestalt Manager.

Veja " Determinando OS Versão " no local CocoaDev.

No terminal:

system_profiler SPSoftwareDataType

Dá:

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

Ou:

sw_vers

Dá:

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

É a versão OS realmente o que você quer? Não pode ser uma coisa mais apropriado para testar, tais como a presença de, ou número da versão, um quadro particular.

dentro de seu programa você pode usar Gestalt. Aqui está o código que estou usando para o meu programa para obter a versão 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: quase certamente é melhor do que a manutenção de uma tabela do que dadas lançamentos fazer e não fazer implementar.

Seja preguiçoso. Deixe o tempo de execução dizer se ele pode fazer alguma coisa ou não, e cair de volta para métodos mais antigos quando você precisa. Seu código será muito menos frágil, porque você não tem que manter seus próprios dados globais que o resto do seu código tem que manter a verificação com.

Executar este na linha de comando:

system_profiler SPSoftwareDataType | grep Mac
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top