Battery Toolkit - 苹果硅 Mac 电池管理工具

项目标题与描述

Battery Toolkit 是一个专为 Apple Silicon Mac 设计的平台电源状态控制工具。项目旨在提供比 macOS 原生"优化电池充电"更灵活、更精确的电池管理功能,帮助用户延长电池寿命。

Battery Toolkit Logo

功能特性

  • 可自定义电池充电上限:设置电池充电停止的百分比(最低50%),避免电池长期处于满电状态
  • 可自定义电池充电下限:设置电池开始充电的百分比(最低20%),减少频繁短时充电
  • 电源适配器控制
    • 无需物理拔插即可禁用电源适配器
    • 支持在禁用电源适配器时防止系统睡眠
  • 系统级集成
    • 通过 LaunchDaemon 实现后台服务
    • 使用 XPC 进行安全进程间通信
    • 支持 Apple SMC 接口访问

安装指南

  1. 下载最新版本安装包
  2. 在终端运行以下命令进行安装:
# 安装 Battery Toolkit 守护进程
sudo cp /path/to/me.mhaeuser.batterytoolkitd.plist /Library/LaunchDaemons/
sudo cp /path/to/me.mhaeuser.batterytoolkitd /Library/PrivilegedHelperTools/
sudo launchctl load /Library/LaunchDaemons/me.mhaeuser.batterytoolkitd.plist

系统要求:

  • Apple Silicon Mac
  • macOS 12.0 或更高版本

使用说明

基本使用

通过系统偏好设置或命令行工具控制电池设置:

# 设置充电上限为80%
batterytoolkit --upper-limit 80

# 设置充电下限为30% 
batterytoolkit --lower-limit 30

# 禁用电源适配器
batterytoolkit --disable-adapter

高级功能

// 通过 XPC 与服务通信
NSXPCConnection *connection = [[NSXPCConnection alloc] 
    initWithMachServiceName:@BT_DAEMON_CONN_ 
                   options:NSXPCConnectionPrivileged];
connection.remoteObjectInterface = [NSXPCInterface 
    interfaceWithProtocol:@protocol(BatteryToolkitProtocol)];
[connection resume];

核心代码

1. SMC 参数结构定义

// SMCParamStruct.h
typedef struct {
    uint32_t            key;
    SMCVersion          vers;
    SMCPLimitData       pLimitData;
    SMCKeyInfoData      keyInfo;
    uint8_t             result;
    uint8_t             status;
    uint8_t             data8;
    uint32_t            data32;
    uint8_t             bytes[32];
} SMCParamStruct;

2. XPC 连接审计令牌扩展

// NSXPCConnection+AuditToken.h
@interface NSXPCConnection (AuditToken)
@property (nonatomic, readonly) audit_token_t auditToken;
@end

3. 电源管理接口

// IOPMLibPrivate.h
IOReturn IOPMSetSystemPowerSetting(CFStringRef key, CFTypeRef value);
CFDictionaryRef IOPMCopySystemPowerSettings(void);

4. 签名信息获取

// SecCodeEx.h
OSStatus SecCodeCopySigningInformationDynamic(
    SecCodeRef code,
    SecCSFlags flags,
    CFDictionaryRef *information
);

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-07-09 09:01  qife  阅读(26)  评论(0)    收藏  举报