从 WatchOS 捕获 Apple Watch 的型号标识符

标签 c swift apple-watch watchos

似乎没有任何记录在案的从 watch 应用程序获取 Apple Watch 模型的官方方法,但有一篇文章展示了 sysctlbyname 的特殊用法:

How to determine the Apple Watch model?

有人能帮我弄清楚为什么这个功能不起作用吗?有时会返回

"Watc\t"

而不是预期的

"Watch2,4"

Swift 的 sysctlbyname 函数似乎是这里描述的这个 c 函数: https://opensource.apple.com/source/Libc/Libc-167/gen.subproj/sysctlbyname.c.auto.html

我的代码是从 SO 帖子中的快速答案复制的:

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) 

你应该可以开始了!

关于从 WatchOS 捕获 Apple Watch 的型号标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64455391/

相关文章:

c - 我的代码有什么问题吗?

mysql - libmemcached 存储 mysql 结果

ios - UIActivityViewController 主题不适用于 Outlook

arrays - 如何在 Swift 中查找列表项的索引?

ios - 通过 HRV 跟踪节拍以节拍心率 Apple Watch

c - 大型阵列的 SSE 性能较慢

c - Mempool amd memcheck 在 C 中的实现

ios - 如何将数据传递给另一个 Viewcontroller?

ios - Apple Watch 应用程序在 iOS 应用程序启动时获取数据

ios - 如何在 Apple Watch 中发送推送通知?