As great as iOS devices are, their batteries tend to be on the weaker side. Tools like BatteryInfo IPA for TrollStore allow you to monitor the battery health of your iPhone, iPad, or iPod Touch with advanced features currently unavailable in iOS settings.
Since the BatteryInfo IPA is a TrollStore tweak, it has access to parts of iOS that would not normally be accessible to standard App Store apps.
I’ve used started using this app since version 1.0 and I can certainly say it has improved quite a lot in the latest versions. The initial version was buggy and sometimes failed to get some of the parameters. I’ve had no issues whatsoever with the current version so far.
TrollStore allows apps to have entitlements (privileges, permissions) only system apps or daemons can have on iOS. This makes TrollStore tweaks incredibly powerful as they can access any file and any value just like being on a jailbroken device.


What is BatteryInfo IPA?
At its core, BatteryInfo IPA is a free, simple, and real-time iOS application that displays battery health data for your device. It has access to a lot of data thanks to TrollStore so you get a great outlook on how your battery is performing.
BatteryInfo IPA can display the following battery health parameters:
- Device Model and iOS Version.
- Device Uptime.
- Maximum Battery Capacity (in %).
- Cycle Count.
- Design Capacity (in mAh).
- Remaining Capacity (in mAh).
- Current Battery Temperature (in degrees Celsius).
- Available Charger Options.
- Maximum charging handshake.
Important: It’s worth mentioning that you cannot install this application using tools like AltStore, Sideloadly, Feather IPA Signer, GBox, Esign, or other similar tools. These apps use developer certificates to sign the apps so the system entitlements will not be available thus gimping the app severely.
BatteryInfo Pros
BatteryInfo Cons
How to install BatteryInfo IPA for iOS?
Here’s how you can easily install this tweak on your iOS device running iOS 12.2 – iOS 17.0:
- Enable Developer Mode in Settings / Privacy & Security on your device.
- Install TrollStore on your device. You can install it on iOS 14.0 – 16.x using TrollInstallerX and on iOS 17.0 using TrollRestore.
- Open this article in Safari on your iOS device.
- Obtain the BatteryInstaller TIPA / IPA file from here and save it to Files on the device.
- Open the Downloads section in Safari or the Files app. Tap and hold the downloaded TIPA file and open it in TrollStore.
- When asked, confirm the installation in TrollStore.
- You can find the app installed on your Home Screen.
Alternative methods to fetch battery health info on iOS
If you are comfortable programming iOS apps, you might be able to get some of the battery info BatteryInfo IPA displays using private iOS Frameworks such as IOKit (the app won’t be accepted in the App Store).
Here’s an example of using a combination of AppleSmartBattery and MobileGestalt to grab battery health data on iOS but you still need a jailbreak.
Here’s an example I wrote using AppleSmartBattery:
#import <Foundation/Foundation.h>
#import <IOKit/IOKitLib.h>
@interface BatteryHealth : NSObject
+ (NSDictionary *)getBatteryHealth;
@end
@implementation BatteryHealth
+ (NSDictionary *)getBatteryHealth {
io_service_t powerSource = IOServiceGetMatchingService(kIOMainPortDefault, IOServiceMatching("AppleSmartBatteryManager"));
if (!powerSource) {
NSLog(@"Failed to access AppleSmartBatteryManager.");
return nil;
}
CFMutableDictionaryRef batteryInfo = NULL;
IORegistryEntryCreateCFProperties(powerSource, &batteryInfo, kCFAllocatorDefault, 0);
IOObjectRelease(powerSource);
if (!batteryInfo) {
return nil;
}
NSDictionary *batteryDict = (__bridge_transfer NSDictionary *)batteryInfo;
return @{
@"CycleCount": batteryDict[@"CycleCount"] ?: @-1,
@"MaximumCapacity": batteryDict[@"MaximumCapacity"] ?: @-1,
@"DesignCapacity": batteryDict[@"DesignCapacity"] ?: @-1,
@"BatteryTemperature": batteryDict[@"Temperature"] ?: @-1
};
}
@end
int main(int argc, char * argv[]) {
@autoreleasepool {
NSDictionary *batteryHealth = [BatteryHealth getBatteryHealth];
NSLog(@"Battery Health: %@", batteryHealth);
}
return 0;
}
And here’s an example I wrote using MobileGestalt:
#import <Foundation/Foundation.h>
#import <dlfcn.h>
typedef id (*MGCopyAnswer_t)(CFStringRef key);
@interface BatteryHealth : NSObject
+ (NSDictionary *)getBatteryHealth;
@end
@implementation BatteryHealth
+ (NSDictionary *)getBatteryHealth {
void *handle = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_LAZY);
if (!handle) {
NSLog(@"Failed to open MobileGestalt.");
return nil;
}
MGCopyAnswer_t MGCopyAnswer = (MGCopyAnswer_t)dlsym(handle, "MGCopyAnswer");
if (!MGCopyAnswer) {
NSLog(@"Failed to find MGCopyAnswer.");
dlclose(handle);
return nil;
}
NSMutableDictionary *batteryInfo = [NSMutableDictionary dictionary];
NSNumber *cycleCount = (__bridge NSNumber *)MGCopyAnswer(CFSTR("BatteryCycleCount"));
NSNumber *maxCapacity = (__bridge NSNumber *)MGCopyAnswer(CFSTR("BatteryMaximumCapacity"));
NSNumber *designCapacity = (__bridge NSNumber *)MGCopyAnswer(CFSTR("BatteryDesignCapacity"));
NSString *serialNumber = (__bridge NSString *)MGCopyAnswer(CFSTR("BatterySerialNumber"));
NSNumber *isCharging = (__bridge NSNumber *)MGCopyAnswer(CFSTR("IsCharging"));
if (cycleCount) [batteryInfo setObject:cycleCount forKey:@"CycleCount"];
if (maxCapacity) [batteryInfo setObject:maxCapacity forKey:@"MaxCapacity"];
if (designCapacity) [batteryInfo setObject:designCapacity forKey:@"DesignCapacity"];
if (serialNumber) [batteryInfo setObject:serialNumber forKey:@"SerialNumber"];
if (isCharging) [batteryInfo setObject:isCharging forKey:@"IsCharging"];
dlclose(handle);
return batteryInfo.count > 0 ? batteryInfo : nil;
}
@end
int main(int argc, char * argv[]) {
@autoreleasepool {
NSDictionary *batteryHealth = [BatteryHealth getBatteryHealth];
if (batteryHealth) {
NSLog(@"Battery Health: %@", batteryHealth);
} else {
NSLog(@"Failed to retrieve battery health data.");
}
}
return 0;
}
Also worth noting is that before iOS 12 or so, you could access the battery health info from AppleARMPMUCharger but nowadays it’s been gimped quite badly and it won’t give you much.
MobileGestalt contains hundreds of keys that define the properties of the device so it can definitely be used for various similar apps. There’s also /usr/libexec/MobileGestaltHelper which is MobileGestalt’s helper daemon that could prove useful to reverse engineer if you are looking to extract device data, including battery info.
AppleSmartBattery is the recommended component these days and it’s also what BatteryInfo IPA uses.
Please do keep in mind that the code may need further tweaking/fixing depending on the iOS version and there’s very little in the way of sanity checks.
However, the examples should illustrate pretty well why a jailbreak or at least TrollStore is required for apps like BatteryInfo to fetch the battery health data. Most of the battery data is locked under private iOS frameworks otherwise inaccessible because of the Sandbox on iOS.
Final Thoughts
This is a great application if you need advanced iPhone battery monitoring such as cycle count, battery temperature, charger info, design, maximum capacity in mAh, etc.
It does require TrollStore and that is a major limitation, but such apps would not be possible without it due to how restricted iOS is.
Do keep in mind that while the tweak is safe to use, installing TrollStore and TrollStore apps should be done carefully. TrollStore is very powerful and allows apps a high degree of access to the device. Only install apps you trust and periodically back up your device in case of anything.
Overall I believe this app definitely serves an important purpose in keeping an eye on your device’s health and from my usage in the past week I have encountered no issues with the app.
More iDevice Central Guides
- iOS 17 Jailbreak RELEASED! How to Jailbreak iOS 17 with PaleRa1n
- How to Jailbreak iOS 18.0 – iOS 18.2.1 / iOS 18.3 With Tweaks
- Download iRemovalRa1n Jailbreak (CheckRa1n for Windows)
- Dopamine Jailbreak (Fugu15 Max) Release Is Coming Soon for iOS 15.0 – 15.4.1 A12+
- Cowabunga Lite For iOS 16.2 – 16.4 Released in Beta! Install Tweaks and Themes Without Jailbreak
- Fugu15 Max Jailbreak: All Confirmed Working Rootless Tweaks List
- iOS 14.0 – 16.1.2 – All MacDirtyCow Tools IPAs
- iOS Jailbreak Tools for All iOS Versions
Leave a Reply
You must be logged in to post a comment.