Getting Mac Model number in Cocoa

后端 未结 4 702
再見小時候
再見小時候 2020-12-10 05:21

I\'m making a OS X app where I need to get the Mac model, for example:

iMac11,3
MacBook3,1

And so on. Is there any class, or function to ge

相关标签:
4条回答
  • 2020-12-10 05:50

    I'm not sure if there is an exact way of getting it through Cocoa, but you can use NSTask and get this through shell.

    
    sysctl hw.model
    
    0 讨论(0)
  • 2020-12-10 05:55

    The API for that would be in the IOKit. Looking in the IORegistryExplorer app on my laptop, I see that the first node from the root of the IOService tree is an IOPlatformExpertDevice, with a entry under the key "model" equal to "MacBookPro6,1"

    0 讨论(0)
  • 2020-12-10 05:56

    While not using a direct Cocoa API, you could use NSTask to execute the "system_profiler" command line tool. If you execute the tool as: "system_profiler SPHardwareDataType" it will give you a smaller output which could be filtered to extract the model identifier.

    Update

    I found an example using sysctl programmatically:

    int mib[2];
    size_t len = 0;
    char *rstring = NULL;
    
    mib[0] = CTL_HW;
    mib[1] = HW_MODEL;
    sysctl( mib, 2, NULL, &len, NULL, 0 );
    rstring = malloc( len );
    sysctl( mib, 2, rstring, &len, NULL, 0 );
    NSLog(@"%s", rstring );
    free( rstring );
    rstring = NULL;
    

    Sourced from here.

    0 讨论(0)
  • 2020-12-10 06:06

    This information is available via. sysctl:

    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/sysctl.h>
    
    size_t len = 0;
    sysctlbyname("hw.model", NULL, &len, NULL, 0);
    if (len) {
        char *model = malloc(len*sizeof(char));
        sysctlbyname("hw.model", model, &len, NULL, 0);
        printf("%s\n", model);
        free(model);
    }
    
    0 讨论(0)
提交回复
热议问题