Question

J'ai un programme qui doit se comporter légèrement différemment sur Tiger que sur Leopard. Est-ce que quelqu'un connaît un appel système qui me permettra de déterminer avec précision la version de Mac OS X que j'utilise? J'ai trouvé un certain nombre de définitions de macro pour déterminer le système d'exploitation de la machine de génération, mais rien de vraiment bien pour déterminer le système d'exploitation de la machine en cours d'exécution.

Merci, Joe

Était-ce utile?

La solution

Voir cet article ici

Mais en résumé, si vous utilisez du carbone, utilisez l'appel de Gestalt (), et si vous utilisez du cacao, il existe une constante appelée NSAppKitVersionNumber contre laquelle vous pouvez simplement vérifier.

Éditer : pour Mac OSX 10.8 et ultérieur, n'utilisez plus Gestalt (). Voir cette réponse pour plus de détails: Comment déterminer la version du système d'exploitation au moment de l'exécution sous OS X ou iOS (sans utiliser Gestalt)?

Autres conseils

Pourriez-vous simplement vérifier la présence d'une capacité? Par exemple:

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

ou

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

alors vous savez que le système d'exploitation fait ce dont vous avez besoin, pas que le groupe de marketing produit d'Apple lui a attribué un numéro particulier; -)

L'API se fait via Gestalt Manager.

Voir " Détermination de la version du système d'exploitation " sur le site CocoaDev.

Dans le terminal:

system_profiler SPSoftwareDataType

donne:

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

donne:

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

La version du système d'exploitation est-elle vraiment ce que vous voulez? Il peut y avoir une chose plus appropriée à tester, telle que la présence ou le numéro de version d'un framework particulier.

dans votre programme, vous pouvez utiliser Gestalt. Voici le code que j'utilise pour que mon programme obtienne la version du système d'exploitation.

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: est certainement meilleur que de conserver un tableau de ce que les versions données implémentent ou non.

Soyez paresseux. Laissez le moteur d’exécution vous dire s’il peut faire quelque chose ou non, et retenez-vous au besoin avec des méthodes plus anciennes. Votre code sera beaucoup moins fragile, car vous n'avez pas à gérer vos propres données globales avec lesquelles le reste de votre code doit continuer à vérifier.

Exécutez ceci en ligne de commande:

system_profiler SPSoftwareDataType | grep Mac
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top