针对WatchOS 6和Apple Watch Series 5,稍微更新了@Mathieu Vandeginste的答案。
private func getWatchModel() -> String? {
var size: size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: size)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String(cString: &machine, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
}
为了适应 WatchOS 5,需要对getWatchModel()
返回的原始字符串进行修剪,因为现在它以制表符结尾,使用以下代码进行修剪: ?.trimmingCharacters(in: .whitespacesAndNewlines)
private func getWatchName(model: String) -> String {
switch model {
case "Watch1,1":
return "Apple Watch Series 0 38mm"
case "Watch1,2":
return"Apple Watch Series 0 42mm"
case "Watch2,3":
return "Apple Watch Series 2 38mm"
case "Watch2,4":
return "Apple Watch Series 2 42mmm"
case "Watch2,6":
return "Apple Watch Series 1 38mm"
case "Watch2,7":
return "Apple Watch Series 1 42mm"
case "Watch3,1":
return "Apple Watch Series 3 38mm Cellular"
case "Watch3,2":
return "Apple Watch Series 3 42mm Cellular"
case "Watch3,3":
return "Apple Watch Series 3 38mm"
case "Watch3,4":
return "Apple Watch Series 3 42mm"
case "Watch4,1":
return "Apple Watch Series 4 40mm"
case "Watch4,2":
return "Apple Watch Series 4 44mm"
case "Watch4,3":
return "Apple Watch Series 4 40mm Cellular"
case "Watch4,4":
return "Apple Watch Series 4 44mm Cellular"
case "Watch5,1":
return "Apple Watch Series 5 40mm"
case "Watch5,2":
return "Apple Watch Series 5 44mm"
case "Watch5,3":
return "Apple Watch Series 5 40mm Cellular"
case "Watch5,4":
return "Apple Watch Series 5 44mm Cellular"
case "Watch5,9":
return "Apple Watch SE 40mm"
case "Watch5,10":
return "Apple Watch SE 44mm"
case "Watch5,11":
return "Apple Watch SE 40mm Cellular"
case "Watch5,12":
return "Apple Watch SE 44mm Cellular"
case "Watch6,1":
return "Apple Watch Series 6 40mm"
case "Watch6,2":
return "Apple Watch Series 6 44mm"
case "Watch6.3":
return "Apple Watch Series 6 40mm Cellular"
case "Watch6,4":
return "Apple Watch Series 6 44mm Cellular"
case "Watch6,6":
return "Apple Watch Series 7 41mm"
case "Watch6,7":
return "Apple Watch Series 7 45mm"
case "Watch6,8":
return "Apple Watch Series 7 41mm Cellular"
case "Watch6,9":
return "Apple Watch Series 7 45mm Cellular"
default:
return "unknown"
}
}
根据这篇文章,我们刚刚添加了新的模型到上面。
没有公共API可以获取精确信息。
但是,您可以使用以下方法(我会让您将其翻译为Swift):
- (NSString*) modelIdentifier {
size_t size = 0;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char* machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString* model = [NSString stringWithCString: machine encoding: NSUTF8StringEncoding];
free(machine);
return model;
}
该函数返回一个格式为"Watch1,1"的字符串,您需要提供一个查找表来进行ID->名称的转换。
"Watch1,1" -> Apple Watch 38mm
"Watch1,2" -> Apple Watch 42mm
"Watch2,3" -> Apple Watch Series 2 38mm
"Watch2,4" -> Apple Watch Series 2 42mm
"Watch2,6" -> Apple Watch Series 1 38mm
"Watch2,7" -> Apple Watch Series 1 42mm
"Watch3,1" -> Apple Watch Series 3 38mm Cellular
"Watch3,2" -> Apple Watch Series 3 42mm Cellular
"Watch3,3" -> Apple Watch Series 3 38mm
"Watch3,4" -> Apple Watch Series 3 42mm
编辑:不再适用于watchOS 4+
这是Swift 4+版本:对我来说运行良好 :)
func getWatchModel() -> String {
var size: size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = CChar()
sysctlbyname("hw.machine", &machine, &size, nil, 0)
let model = String(cString: &machine, encoding: String.Encoding.utf8)
switch model {
case "Watch1,1":
return "Apple Watch 28mm"
case "Watch1,2":
return"Apple Watch 42mm"
case "Watch2,3":
return "Apple Watch Series 2 38mm"
case "Watch2,4":
return "Apple Watch Series 2 42mmm"
case "Watch2,6":
return "Apple Watch Series 1 38mm"
case "Watch2,7":
return "Apple Watch Series 1 42mm"
case "Watch3,1":
return "Apple Watch Series 3 38mm Cellular"
case "Watch3,2":
return "Apple Watch Series 3 42mm Cellular"
case "Watch3,3":
return "Apple Watch Series 3 38mm"
case "Watch3,4":
return "Apple Watch Series 3 42mm"
default:
return "unknown"
}
}
model
的值现在是" Watc\t",因此从switch case返回的整体响应始终是“未知的”。 - Luke已更新以适用于watchOS 8和Apple Watch Series 7
其他答案称由于该函数返回Watc\t
而无法工作,本文修正了此问题。
public func getWatchModel() -> String? {
var size: size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: size)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String(cString: &machine, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
}
public func getWatchName(model: String) -> String {
switch model {
case "Watch1,1":
return "Apple Watch Series 0 38mm"
case "Watch1,2":
return"Apple Watch Series 0 42mm"
case "Watch2,3":
return "Apple Watch Series 2 38mm"
case "Watch2,4":
return "Apple Watch Series 2 42mmm"
case "Watch2,6":
return "Apple Watch Series 1 38mm"
case "Watch2,7":
return "Apple Watch Series 1 42mm"
case "Watch3,1":
return "Apple Watch Series 3 38mm Cellular"
case "Watch3,2":
return "Apple Watch Series 3 42mm Cellular"
case "Watch3,3":
return "Apple Watch Series 3 38mm"
case "Watch3,4":
return "Apple Watch Series 3 42mm"
case "Watch4,1":
return "Apple Watch Series 4 40mm"
case "Watch4,2":
return "Apple Watch Series 4 44mm"
case "Watch4,3":
return "Apple Watch Series 4 40mm Cellular"
case "Watch4,4":
return "Apple Watch Series 4 44mm Cellular"
case "Watch5,1":
return "Apple Watch Series 5 40mm"
case "Watch5,2":
return "Apple Watch Series 5 44mm"
case "Watch5,3":
return "Apple Watch Series 5 40mm Cellular"
case "Watch5,4":
return "Apple Watch Series 5 44mm Cellular"
case "Watch5,9":
return "Apple Watch SE 40mm"
case "Watch5,10":
return "Apple Watch SE 44mm"
case "Watch5,11":
return "Apple Watch SE 40mm Cellular"
case "Watch5,12":
return "Apple Watch SE 44mm Cellular"
case "Watch6,1":
return "Apple Watch Series 6 40mm"
case "Watch6,2":
return "Apple Watch Series 6 44mm"
case "Watch6.3":
return "Apple Watch Series 6 40mm Cellular"
case "Watch6,4":
return "Apple Watch Series 6 44mm Cellular"
case "Watch6,6":
return "Apple Watch Series 7 41mm"
case "Watch6,7":
return "Apple Watch Series 7 45mm"
case "Watch6,8":
return "Apple Watch Series 7 41mm Cellular"
case "Watch6,9":
return "Apple Watch Series 7 45mm Cellular"
case "x86_64":
return "Apple Watch Series 9 Simulator"
default:
return "unknown"
}
}
public func getWatchModel() -> String? {
var size: size_t = 0
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](repeating: 0, count: size)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String(cString: &machine, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
}
public func getWatchName(model: String) -> String {
switch model {
case "Watch1,1":
return "Apple Watch Series 0 38mm"
case "Watch1,2":
return"Apple Watch Series 0 42mm"
case "Watch2,3":
return "Apple Watch Series 2 38mm"
case "Watch2,4":
return "Apple Watch Series 2 42mmm"
case "Watch2,6":
return "Apple Watch Series 1 38mm"
case "Watch2,7":
return "Apple Watch Series 1 42mm"
case "Watch3,1":
return "Apple Watch Series 3 38mm Cellular"
case "Watch3,2":
return "Apple Watch Series 3 42mm Cellular"
case "Watch3,3":
return "Apple Watch Series 3 38mm"
case "Watch3,4":
return "Apple Watch Series 3 42mm"
case "Watch4,1":
return "Apple Watch Series 4 40mm"
case "Watch4,2":
return "Apple Watch Series 4 44mm"
case "Watch4,3":
return "Apple Watch Series 4 40mm Cellular"
case "Watch4,4":
return "Apple Watch Series 4 44mm Cellular"
case "Watch5,1":
return "Apple Watch Series 5 40mm"
case "Watch5,2":
return "Apple Watch Series 5 44mm"
case "Watch5,3":
return "Apple Watch Series 5 40mm Cellular"
case "Watch5,4":
return "Apple Watch Series 5 44mm Cellular"
case "Watch5,9":
return "Apple Watch SE 40mm"
case "Watch5,10":
return "Apple Watch SE 44mm"
case "Watch5,11":
return "Apple Watch SE 40mm Cellular"
case "Watch5,12":
return "Apple Watch SE 44mm Cellular"
case "Watch6,1":
return "Apple Watch Series 6 40mm"
case "Watch6,2":
return "Apple Watch Series 6 44mm"
case "Watch6,3":
return "Apple Watch Series 6 40mm Cellular"
case "Watch6,4":
return "Apple Watch Series 6 44mm Cellular"
case "Watch6,6":
return "Apple Watch Series 7 41mm"
case "Watch6,7":
return "Apple Watch Series 7 45mm"
case "Watch6,8":
return "Apple Watch Series 7 41mm Cellular"
fallthrough
case "Watch6,9":
return "Apple Watch Series 7 45mm Cellular"
case "Watch6,10":
return "Apple Watch SE 2 40mm"
case "Watch6,11":
return "Apple Watch SE 2 44mm"
case "Watch6,12":
return "Apple Watch SE 2 40mm Cellular"
case "Watch6,13":
return "Apple Watch SE 2 44mm Cellular"
case "Watch6,14":
return "Apple Watch Series 8 41mm"
case "Watch6,15":
return "Apple Watch Series 8 45mm"
case "Watch6,16":
return "Apple Watch Series 8 41mm Cellular"
case "Watch6,17":
return "Apple Watch Series 8 45mm Cellular"
case "Watch6,18":
return "Apple Watch Ultra"
case "x86_64":
return "Apple Watch Series 9 Simulator"
default:
return "unknown"
}
}
getWatchModel
函数返回Watc\t
,对于我的 Series 3 42mm 来说是错误的。 - itskoBits