iPhone手机或者iPad如何通过代码实现电池的充电和放电功能

需求:最大限度保护iPhone/iPad 手机电池

参考一款MacOs软件的方法

  • AlDente 是一款可以限制 Macbook Air / Pro 系列设备最大充电百分比的工具,它能让你的电脑在插着电源的情况下,保持电池容量在 80% 以下,以延长电池寿命

方案一: 通过代码控制(待验证实现)

手机在连接充电线的情况下!

  1. 当电量大于某个值(比如 80%)的时候 通过系统私有函数让其停止充电。

  2. 当低于某个值(比如20%)的时候让其正常充电。

方案二: 网上搜索到的别人的方案(已成功验证)

  • https://ngabbs.com/read.php?&tid=28924769
    我的iPad插了一个 磁吸usb口,平时磁吸充电。 iphone都是用无线充电。。
    最近捣鼓捷径发现一个 能保护ipad电源低电量自动充电,冲到80%自动断电的功能,在不刻意的情况下舒适使用保护电池

  • 大概思路

    1. 搞几个智能插座,接入homekit,他家里电器几乎都接入了homekit(大概意思就是都能通过网络请求远程控制插座的开关)
    1. 在捷径里面设置 电量低于30% 的时候 控制家庭里面的设备- 智能插座-打开
    1. 在捷径里面设置 点了高于80%的时候 控制家庭里面的设备-智能插座-关闭

我的问题

  1. 有没有类似的软件开源闭源皆可
  2. 有没有大概逆向系统的思路
在大佬指点之前打算自己先从打开优化电池充电的log入手分析试试。



-[PowerUISmartChargeClient enableSmartCharging:]
-[PowerUISmartChargeClient setState:error:]

评论区 lich4 开源的核心函数

static io_service_t getIOPMPSServ() {
    static io_service_t serv = 0;
    if (serv == 0) {
        serv = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPMPowerSource"));
        // IOPMPowerSource:AppleARMPMUPowerSource:AppleARMPMUCharger
        //      IOAccessoryTransport:IOAccessoryPowerSource:AppleARMPMUAccessoryPS
        // AppleSmartBattery >=iPhone11才有, 且数据相同
    }
    return serv;
}


static int setChargeStatus(BOOL flag) {
    io_service_t serv = getIOPMPSServ();
    if (serv == 0) {
        return -1;
    }
    NSMutableDictionary* props = [NSMutableDictionary new];
    props[@"IsCharging"] = @(flag);
    props[@"PredictiveChargingInhibit"] = @NO; // PredictiveChargingInhibit为IsCharging总开关
    kern_return_t ret = IORegistryEntrySetCFProperties(serv, (__bridge CFTypeRef)props);
    if (ret != 0) {
        return -2;
    }
    
    NSLog(@"ret %d",ret);
    
    return 0;
}

谢谢

逆向就直接逆好了,什么思不思路的

两位带chao的大佬都成功了