Como posso determinar o executando a versão Mac OS X por meio de programação?
-
03-07-2019 - |
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
Solução
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