macos – 使用Swift获取MacBook的电池状态

我想设置一个Playground来获取我的macbook的电池状态.

我已经尝试过以下方法

import Cocoa
import IOKit
import Foundation

var blob = IOPScopyPowerSourcesInfo()

我目前收到如下错误

Use of unresolved identifier ‘IOPScopyPowerSourcesInfo’

它在Playground中不起作用,但它可以在真实的应用程序中运行.

我无法使用Swift访问IOPowerSources.h头文件并仅导入IOKit,但是:我必须建立一个与Objective-C的桥梁.

这是我的解决方案:

>将IOKit.framework添加到项目中(单击Linked Frameworks and Libraries)
>创建一个新的空.m文件,无论其名称如何.然后Xcode将询问它是否应该制作“桥接头”.说是的.
>忽略.m文件.在Xcode刚创建的新YOURAPPNAME-Bridging-Header.h文件中,添加#import< IOKit / ps / IOPowerSources.h>行; (并且不要在Swift文件添加导入IOKit)
>您现在可以访问大多数IOPowerSources功能.

例:

func getBatteryStatus() -> String {
    let timeRemaining: CFTimeInterval = IOPSGetTimeRemainingEstimate()
    if timeRemaining == -2.0 {
        return "Plugged"
    } else if timeRemaining == -1.0 {
        return "Recently unplugged"
    } else {
        let minutes = timeRemaining / 60
        return "Time remaining: \(minutes) minutes"
    }
}

let batteryStatus = getBatteryStatus()
print(batteryStatus)

注意:我无法访问像kIOPSTimeRemainingUnlimited和kIOPSTimeRemainingUnkNown这样的常量,所以我使用了它们的原始值(-2.0和-1.0),但如果它们仍然存在于某处,最好找到这些常量.

一个例子,使用IOPScopyPowerSourcesInfo:

let blob = IOPScopyPowerSourcesInfo()
let list = IOPScopyPowerSourcesList(blob.takeRetainedValue())
print(list.takeRetainedValue())

结果:

( { “Battery Provides Time Remaining” = 1; BatteryHealth = Good; Current = 0; “Current Capacity” = 98; DesignCycleCount = 1000; “Hardware Serial Number” = 1X234567XX8XX; “Is Charged” = 1; “Is Charging” = 0; “Is Present” = 1; “Max Capacity” = 100; Name = “InternalBattery-0”; “Power Source State” = “AC Power”; “Time to Empty” = 0; “Time to Full Charge” = 0; “Transport Type” = Internal; Type = InternalBattery; } )

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...