¿Cómo puedo determinar la ejecución de la versión de Mac OS X mediante programación?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un programa que debe comportarse de forma ligeramente diferente en Tiger que en Leopard. ¿Alguien sabe de una llamada al sistema que me permita determinar con precisión qué versión de Mac OS X estoy ejecutando? He encontrado varias definiciones de macros para determinar el sistema operativo de la máquina de compilación, pero nada realmente bueno para determinar el sistema operativo de la máquina en ejecución.

Gracias, Joe

¿Fue útil?

Solución

Consulte este artículo aquí

Pero en resumen, si está usando carbón, use la llamada Gestalt (), y si está usando cacao, hay una constante llamada NSAppKitVersionNumber con la que simplemente puede verificar.

Editar : para Mac OSX 10.8 y superior, no uses Gestalt () más. Consulte esta respuesta para obtener más detalles: ¿Cómo puedo determinar la versión del sistema operativo en tiempo de ejecución en OS X o iOS (sin usar Gestalt)?

Otros consejos

¿Podrías simplemente verificar la presencia de una capacidad? Por ejemplo:

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

o

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

entonces sabes que el sistema operativo hace lo que necesitas que haga, no que el grupo de marketing de productos de Apple le haya dado un número específico ;-)

La API es a través del Gestalt Manager.

Consulte " Cómo determinar la versión del SO " en el sitio de CocoaDev.

En la terminal:

system_profiler SPSoftwareDataType

Da:

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

O:

sw_vers

Da:

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

¿Es la versión del sistema operativo realmente lo que quieres? Puede haber algo más apropiado para probar, como la presencia o el número de versión de un marco en particular.

dentro de tu programa puedes usar Gestalt. Aquí está el código que estoy usando para mi programa para obtener la versión del sistema operativo.

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);
}

respondesToSelector: es casi seguro que es mejor que usted mantener una tabla de lo que hacen y no implementan los lanzamientos dados.

Sé perezoso. Deje que el tiempo de ejecución le diga si puede hacer algo o no, y recurra a métodos más antiguos cuando lo necesite. Su código será mucho menos frágil porque no tiene que mantener sus propios datos globales con los que el resto del código tiene que seguir comprobando.

Ejecuta esto en la línea de comando:

system_profiler SPSoftwareDataType | grep Mac
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top