从 WatchOS 捕获 Apple Watch 的型号标识符
Capture model identifier for Apple Watch from WatchOS
官方似乎没有任何从手表应用程序中获取 Apple Watch 型号的官方方法,但是 post 显示了 sysctlbyname
的特殊用途:
谁能帮我弄清楚为什么这个功能不起作用?有时 returns
"Watc\t"
而不是预期的
"Watch2,4"
Swift 的 sysctlbyname 函数似乎是这里描述的这个 c 函数:
https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/sysctlbyname.c.auto.html
我的代码是从 SO post:
中的 swift 答案复制而来的
private 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)
return String(cString: &machine, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
} // Should return a string like "Watch2,4"
您永远不会分配缓冲区来接收机器字符串。
变化
var machine = CChar()
至
var machine = [CChar](repeating: 0, count: size)
你应该可以开始了!
官方似乎没有任何从手表应用程序中获取 Apple Watch 型号的官方方法,但是 post 显示了 sysctlbyname
的特殊用途:
谁能帮我弄清楚为什么这个功能不起作用?有时 returns
"Watc\t"
而不是预期的
"Watch2,4"
Swift 的 sysctlbyname 函数似乎是这里描述的这个 c 函数: https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/sysctlbyname.c.auto.html
我的代码是从 SO post:
中的 swift 答案复制而来的private 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)
return String(cString: &machine, encoding: String.Encoding.utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
} // Should return a string like "Watch2,4"
您永远不会分配缓冲区来接收机器字符串。 变化
var machine = CChar()
至
var machine = [CChar](repeating: 0, count: size)
你应该可以开始了!