编程检测Mac是否有MagSafe充电口,或检测USB-C口是否存在

问题描述

我正在尝试找出一种方法来以编程方式确定 Mac 是否具有 MagSafe 充电端口。如果这不可能,或者,我想检测是否存在任何 USB-C 端口(因此 MagSafe 不存在)。

我在网上搜索了相关的 API 以及 shell 命令,但没有找到任何好的解决方案。我需要它在通过 Mac App Store 分发的沙盒环境中工作。理想情况下,任何解决方案都应该使用纯 Cocoa/Objective-C,但我也可以通过 NSTask 或类似方法实现这一点。

非常感谢您提供任何建议!

解决方法

我最终从 EveryMac.com 编制了一份包含 MagSafe 的所有型号的列表:

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

    size_t len = 0;
    sysctlbyname("hw.model",NULL,&len,0);

    if (len)
    {
        char *model = malloc(len*sizeof(char));
        sysctlbyname("hw.model",model,0);
        macModel = [NSString stringWithUTF8String:model];
        free(model);
    }
    else
    {
        macModel = @"UNKNOWN";
    }
    
    NSArray *magSafeModels = [[NSArray alloc] initWithObjects:
                              
                              // MACBOOK MODELS
                              @"MacBook7,1",@"MacBook6,@"MacBook5,2",@"MacBook4,@"MacBook3,@"MacBook2,@"MacBook1,// MACBOOK PRO MODELS
                              @"MacBookPro11,5",@"MacBookPro11,4",@"MacBookPro12,3",@"MacBookPro10,@"MacBookPro9,@"MacBookPro8,@"MacBookPro6,@"MacBookPro7,@"MacBookPro5,@"MacBookPro4,@"MacBookPro3,@"MacBookPro2,@"MacBookPro1,// MACBOOK AIR MODELS
                              @"MacBookAir7,@"MacBookAir7,@"MacBookAir6,@"MacBookAir5,@"MacBookAir4,@"MacBookAir3,@"MacBookAir2,@"MacBookAir1,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");
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...