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