Некоторое время назад я написал программу под названием iox, которая похожа на ioreg, за исключением того, что мне легче переводить вызовы IOKit.Когда я запускаю это на своем ноутбуке, я вижу следующее с уровнем заряда батареи.
AppleSmartBattery - IOService:/AppleACPIPlatformExpert/SMB0/AppleECSMBusController/AppleSmartBatteryManager/AppleSmartBattery
CurrentCapacity = 11678
FullyCharged = YES
DesignCapacity = 13000
MaxCapacity = 11910
...
В коде, то есть
IOServiceNameMatching( "AppleSmartBattery" );
Я понятия не имею, будет ли имято же самое на iOS, но я бы попробовал либо найти такую программу, как ioreg, которую можно запустить на iPhone, либо написать что-то простое, чтобы записать эквивалент.следует просто скомпилировать на iPhone.
Редактировать:
CFMutableDictionaryRef matching , properties = NULL;
io_registry_entry_t entry = 0;
matching = IOServiceMatching( "IOPMPowerSource" );
//matching = IOServiceNameMatching( "AppleSmartBattery" );
entry = IOServiceGetMatchingService( kIOMasterPortDefault , matching );
IORegistryEntryCreateCFProperties( entry , &properties , NULL , 0 );
NSLog( @"%@" , properties );
CFRelease( properties );
IOObjectRelease( entry );
Добавить некоторые проверки безопасности.Как только вы определите нужные свойства, вы можете получить их напрямую, а не использовать IORegistryEntryCreateCFProperties, чтобы получить их все сразу.
IOKit представляет все как большое дерево.IOPMPowerSource может не иметь необходимых атрибутов напрямую, в этом случае вам нужно будет перебирать дочерние элементы.Использование чего-то вроде ioreg может сказать вам, что вы ищете, прежде чем вы начнете кодировать.