- 菜单栏:CPU/GPU/内存多样式、网速两行、温度、风扇 - 面板:概览仪表盘、进程、散热、防休眠,液态玻璃与浅色/深色主题 - 采集层:CPU/内存/网络/GPU/磁盘/电池/进程/SMC 温度与风扇,按界面分级采样 - root 辅助工具:风扇调速、合盖不睡眠,断开时自动恢复 - XcodeGen 工程、单元测试、截图模式
39 lines
1.3 KiB
Swift
39 lines
1.3 KiB
Swift
import Darwin
|
|
import Foundation
|
|
import IOKit
|
|
|
|
enum Sysctl {
|
|
static func int(_ name: String) -> Int? {
|
|
var value: Int64 = 0
|
|
var size = MemoryLayout<Int64>.size
|
|
guard sysctlbyname(name, &value, &size, nil, 0) == 0 else { return nil }
|
|
// 32 位值只写入低 4 字节
|
|
return size == MemoryLayout<Int32>.size ? Int(Int32(truncatingIfNeeded: value)) : Int(value)
|
|
}
|
|
|
|
static func string(_ name: String) -> String? {
|
|
var size = 0
|
|
guard sysctlbyname(name, nil, &size, nil, 0) == 0, size > 0 else { return nil }
|
|
var buffer = [CChar](repeating: 0, count: size)
|
|
guard sysctlbyname(name, &buffer, &size, nil, 0) == 0 else { return nil }
|
|
return String(nullTerminated: buffer)
|
|
}
|
|
}
|
|
|
|
enum IORegistry {
|
|
static func property(_ service: io_registry_entry_t, _ key: String) -> Any? {
|
|
IORegistryEntryCreateCFProperty(service, key as CFString, kCFAllocatorDefault, 0)?.takeRetainedValue()
|
|
}
|
|
|
|
static func string(fromData value: Any?) -> String? {
|
|
guard let data = value as? Data else { return value as? String }
|
|
return String(decoding: data.prefix { $0 != 0 }, as: UTF8.self)
|
|
}
|
|
}
|
|
|
|
extension String {
|
|
init(nullTerminated buffer: [CChar]) {
|
|
self = String(decoding: buffer.prefix { $0 != 0 }.map { UInt8(bitPattern: $0) }, as: UTF8.self)
|
|
}
|
|
}
|