# Objective C et profile système



## Anonyme (12 Janvier 2011)

Bonjour à tous...
Je désirerai créer une application du récupère le profile système d'un mac dans des variable pour en suite comparer cette configuration avec des conditionnelles a une configuration minimum... Je me débrouille en objective-C mais je ne trouve pas comment récupérer le profil système... Quelqu'un peut-il m'aider?
Merci d'avance...
Mitou


----------



## Céroce (12 Janvier 2011)

Franchement je ne sais pas, mais ce n'est pas ainsi qu'il faut procéder.

Si ton programme exige une version minimale de Mac OS X, utilise la clef LSMinimumSystemVersion dans Info.plist.

En général, il vaut mieux demander au système si une fonctionnalité est disponible plutôt que de le déterminer soi-même. Par exemple, si ton appli a absolument besoin de 256 Mo de mémoire vidéo, il vaut mieux demander à OpenGL s'il dispose de cette mémoire plutôt que de savoir quelle carte vidéo équipe le Mac. 
C'est à la fois plus facile, plus parlant dans le code, et plus compatible.


----------



## tatouille (12 Janvier 2011)

En gros oui c'est tres malvenue d'essayer de determiner dynamiquement les capacités hardware dans le userspace, 

_mais ca depend de ce que tu fais par exemple pour un soft je determine si c'est SS2/SS3 capable et aussi combien de  procs et leur cycle au depard, mais c'est dans des cas tres particulier ou tu as besoin de spawn un thread en high priority et de forcer le system to yield, e.g realtime recording, e.g shut up les autres cores pour "empecher dans certain cas" et dynamiquement le systeme de faire tourner un autre thread en attente sur un autre core car tu ne peux pas lock sur ton high priority thread (e.g realtime processing), mais si dans le future nous avions un "SPU" l'equivalent d'un GPU ca "arrangerait" bien tout le monde et eviterait la creation de ce genre de construction et ouvrirait les portes de la "programmation audio" a des gens moins experimentés._

mis a part ca il y a une API sous UNIX/LIBC appelée sysctl c'est peut etre ca que tu veux.

```
//@example SYSCTL(3) Standard C Library, Tatouille (C) 

#include <sys/types.h>
#include <sys/sysctl.h>
#include <errno.h>

uint64_t sysmemsize(void) // total available at boot not usable at T.
{
    int mib[] = {CTL_HW, HW_MEMSIZE};
    uint64_t mem;
    size_t size = 0;
    size = sizeof(mem);
    mem = 0L;
    if(sysctl(mib, 2, &mem, &size, NULL, 0) < 0) {
        errno = ENOATTR;
        return 0;
    }
    return mem;
}

uint32_t syscpucount(void)
{    
    int mib[] = {CTL_HW, HW_NCPU};
    uint32_t ncpus;
    size_t size = 0;
    size = sizeof(ncpus);
    ncpus = 0;
    if(sysctl(mib, 2, &ncpus, &size, NULL, 0) < 0) {
        errno = ENOATTR;
        return 0;
    }
    return ncpus;
}

// d'autres valeurs sont bien plus compliquées a resoudre pour un newb 8-) 
// donc je garde ca pour moi, t'as besoin de transpirer un peu 8-) Mitou, chialou.
```


----------



## Anonyme (24 Janvier 2011)

merci pour vos réponses ... tatouille je vais voir ton code... sinon j'ai trouvé ça mes ça bug un peu lol qu'en pensez vous

```
NSProcessInfo *pi = [NSProcessInfo processInfo];

NSLog(@"environment SHELL: %@", [[pi environment] objectForKey:@"SHELL"]);
NSLog(@"globallyUniqueString: %@", [pi globallyUniqueString]);
NSLog(@"hostName: %@", [pi hostName]);
NSLog(@"processIdentifier: %d", [pi processIdentifier]);
NSLog(@"processName: %@", [pi processName]);
[pi setProcessName:@"MyProcessNewName"];
NSLog(@"processName: %@", [pi processName]);
NSLog(@"operatingSystem: %d", [pi operatingSystem]);
NSLog(@"operatingSystemName: %@", [pi operatingSystemName]);
NSLog(@"operatingSystemVersionString: %@", [pi operatingSystemVersionString]);
NSLog(@"processorCount: %d", [pi processorCount]);
NSLog(@"activeProcessorCount: %d", [pi activeProcessorCount]);
NSLog(@"physicalMemory: %qu", [pi physicalMemory]);
NSLog(@"args: %@", [pi arguments]);
```


----------

