1

I'm trying to figure out a way to determine whether a Mac has a MagSafe charging port programmatically. If that's not possible, alternatively, I suppose detecting whether any USB-C ports exist (and thus MagSafe is not present).

I've searched around the web for APIs for this as well as shell commands but haven't found any good solutions. I need this to work in a sandboxed environment distributed through the Mac App Store. Ideally, any solution would be in pure Cocoa/Objective-C, but I am also fine with achieving this via NSTask or similar.

Thank you so much in advance for any suggestions!

1 Answers1

0

I ended up compiling a list from EveryMac.com of all the models with MagSafe:

- (bool) macHasMagSafe
{
    NSString *macModel = @"";

    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);
        macModel = [NSString stringWithUTF8String:model];
        free(model);
    }
    else
    {
        macModel = @"UNKNOWN";
    }
    
    NSArray *magSafeModels = [[NSArray alloc] initWithObjects:
                              
                              // MACBOOK MODELS
                              @"MacBook7,1",
                              @"MacBook6,1",
                              @"MacBook5,2",
                              @"MacBook5,1",
                              @"MacBook4,1",
                              @"MacBook3,1",
                              @"MacBook2,1",
                              @"MacBook1,1",
                              
                              // MACBOOK PRO MODELS
                              @"MacBookPro11,5",
                              @"MacBookPro11,4",
                              @"MacBookPro12,1",
                              @"MacBookPro11,3",
                              @"MacBookPro11,2",
                              @"MacBookPro11,1",
                              @"MacBookPro10,1",
                              @"MacBookPro10,2",
                              @"MacBookPro9,1",
                              @"MacBookPro9,2",
                              @"MacBookPro8,3",
                              @"MacBookPro8,2",
                              @"MacBookPro8,1",
                              @"MacBookPro6,1",
                              @"MacBookPro6,2",
                              @"MacBookPro7,1",
                              @"MacBookPro5,2",
                              @"MacBookPro5,3",
                              @"MacBookPro5,4",
                              @"MacBookPro5,5",
                              @"MacBookPro5,1",
                              @"MacBookPro4,1",
                              @"MacBookPro3,1",
                              @"MacBookPro2,1",
                              @"MacBookPro2,2",
                              @"MacBookPro1,2",
                              @"MacBookPro1,1",
                              
                              // MACBOOK AIR MODELS
                              @"MacBookAir7,2",
                              @"MacBookAir7,1",
                              @"MacBookAir6,2",
                              @"MacBookAir6,1",
                              @"MacBookAir5,2",
                              @"MacBookAir5,1",
                              @"MacBookAir4,2",
                              @"MacBookAir4,1",
                              @"MacBookAir3,2",
                              @"MacBookAir3,1",
                              @"MacBookAir2,1",
                              @"MacBookAir1,1",
                              
                              nil];
    
    if ([magSafeModels containsObject:macModel])
    {
        return YES;
        //NSLog(@"This Mac has a MagSafe port");
    }
    else
    {
        return NO;
        //NSLog(@"This Mac DOES NOT have a MagSafe port");
    }
}