有几个终端命令来检索Mac硬件的数字/缩写模型标识符。
sysctl hw.modelsystem_profiler SPHardwareDataType它们转储一个具有硬件名称和x,y版本的字符串。目前,我们必须维护一个表,以便将这些标识符转换为完整的英文机器描述。
是否有一个API,或者更好的命令行工具,可以生成更人性化的名称,与苹果的文档MacBookPro5,3 MacBook Pro 15英寸、Mid 2009或MacBook Pro (13英寸,2016,4 Thunderbol3端口)相匹配,而不是更简略的或MacBookPro13,2模型标识符?


总之,systematically是如何获得Macintosh硬件的全本地化名称的,我可以通过脚本或程序生成这些信息来系统地使用这些信息?
发布于 2019-09-06 11:18:09
不需要网络请求来获取这一信息。
当前的模型,如在这个Mac中所显示的,可以从以下几个方面收集:
~/Library/Preferences/com.apple.SystemProfiler.plistplist包含以当前用户添加的语言本地化的名称:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>GTF1-sv-SE_SE</key>
<string>MacBook Pro (15 tum, 2016)</string>
<key>GTF1-en-SE_SE</key>
<string>MacBook Pro (15-inch, 2016)</string>
</dict>
</plist>其中,密钥只是序列号(GTF1)的最后4个字母,后面跟着地区。
如果你愿意的话,你甚至可以编辑这个plist来定制你关于这个Mac窗口的信息,这是黑客用户的一种常见做法。
编辑:
在Swift 5中全面实施:
public enum SystemInfo {
public static var serialNumber: String? {
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"))
return IORegistryEntryCreateCFProperty(service, "IOPlatformSerialNumber" as CFString, kCFAllocatorDefault, 0).takeUnretainedValue() as? String
}
public static var modelName: String? {
guard let serial = serialNumber,
let plist = try? PropertyList.load(from: .init(fileURLWithPath: "\(NSHomeDirectory())/Library/Preferences/com.apple.SystemProfiler.plist")),
let regionCode = Locale.current.regionCode,
let names = plist["CPU Names"] as? [String: String],
!names.isEmpty else {
return nil
}
for language in Locale.preferredLanguages {
let key = "\(serial.suffix(4))-\(language)_\(regionCode)"
if let entry = names[key] {
return entry
}
}
return nil
}
}在这里,我还使用了这个助手枚举:
public enum PropertyList {
public static func load(from url: URL) throws -> [String: Any]? {
guard let plist = FileManager.default.contents(atPath: url.path) else { return nil }
var format = PropertyListSerialization.PropertyListFormat.xml
return try PropertyListSerialization.propertyList(from: plist, options: .mutableContainersAndLeaves, format: &format) as? [String: Any]
}
public static func save(_ plist: [String: Any], to url: URL) throws {
let data = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)
try data.write(to: url, options: .atomic)
}
}用法:
print(SystemInfo.modelName)返回(瑞典语):
MacBook Pro (15 tum, 2016)发布于 2011-11-22 03:41:31
查过网络流量了。系统信息连接到
http://support-sp.apple.com
完整的查询如下:
http://support-sp.apple.com/sp/product?cc=DJWR&lang=de_DE
“DJWR”是序列号的最后四个字符
更多信息在这里:http://blog.coriolis.ch/get-your-apple-device-model-name-in-a-readable-format/
发布于 2011-11-16 01:16:36
ServerKit.framework的资源中有一个属性列表,可以帮助您处理模型标识符<->模型名称字符串转换:
/System/Library/PrivateFrameworks/ServerKit.framework/Versions/A/Resources/English.lproj/XSMachineAttributes.plist
https://stackoverflow.com/questions/8058151
复制相似问题