You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15.3.1/16.2设备名称显示为标识符问题求解决方案

解决iOS 15.3.1/16.2中获取设备实际型号名称的问题

在iOS 15.3.1和16.2版本中,通过sysctlbyname("hw.machine")只能获取到设备标识符(如iPhone14,5对应iPhone13、iPhone12,1对应iPhone11),而非用户认知的实际型号名称。以下是可靠的解决方案:

方案:维护设备标识符-实际名称映射表

苹果的设备标识符是固定且公开的,通过维护映射表可以将标识符转换为实际型号名称,不受系统版本限制。

1. 创建映射字典

添加所有需要支持的设备标识符与对应名称的映射:

+ (NSDictionary *)deviceModelMap {
    return @{
        // iPhone系列示例
        @"iPhone14,5": @"iPhone 13",
        @"iPhone12,1": @"iPhone 11",
        @"iPhone14,2": @"iPhone 13 Pro",
        @"iPhone14,3": @"iPhone 13 Pro Max",
        @"iPhone12,3": @"iPhone 11 Pro",
        @"iPhone12,5": @"iPhone 11 Pro Max",
        // 可根据需求补充iPad、Apple Watch等其他设备的映射
        @"iPad13,1": @"iPad Air (4th generation)"
    };
}

2. 修改设备信息获取方法

修正原代码中的内存错误,并添加映射转换逻辑:

+ (NSString *)getSysctlValue:(char *)typeSpecifier {
    size_t size;
    // 获取所需内存大小
    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
    char *valueBuffer = malloc(size);
    // 读取系统信息
    sysctlbyname(typeSpecifier, valueBuffer, &size, NULL, 0);
    NSString *result = [NSString stringWithCString:valueBuffer encoding:NSUTF8StringEncoding];
    free(valueBuffer);
    return result;
}

+ (NSString *)deviceModelName {
    NSString *machineIdentifier = [self getSysctlValue:@"hw.machine"];
    NSDictionary *modelMap = [self deviceModelMap];
    // 优先返回映射的实际名称,无映射则返回原始标识符
    return modelMap[machineIdentifier] ?: machineIdentifier;
}

注意事项

  • 原代码中存在未定义变量answer的错误,已修正为valueBuffer避免内存异常;
  • 映射表需根据苹果发布的新设备及时更新,确保覆盖所有需要支持的机型;
  • 该方法兼容性强,不受特定iOS版本的API限制。

内容的提问来源于stack exchange,提问作者SonalB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:41:00