AirBattery: The Revolutionary Battery Tracker for macOS
Never guess your iPhone's battery again. AirBattery brings every Apple device's power level directly to your Mac's Dock, Menu Bar, and Widgets with elegant, real-time monitoring.
Imagine this: You're deep in a coding session on your MacBook when your AirPods die without warning. Or you're presenting from your iPad when your Apple Pencil gives up mid-drawing. AirBattery eliminates these productivity killers by creating a unified command center for every device's power status. This free, open-source utility transforms how developers, designers, and power users manage their Apple ecosystem's energy lifeblood.
In this deep dive, you'll discover how AirBattery's Nearbility Engine auto-discovers devices, why it's trending in developer circles, and how to leverage its Nearcast LAN feature for multi-Mac monitoring. We'll walk through real installation commands, decode the Bluetooth packet capture technology, and explore five concrete use cases that'll change your workflow forever. Whether you're managing a fleet of devices or just tired of hunting for your iPhone's battery percentage, this guide delivers the technical depth you need.
What is AirBattery?
AirBattery is a native macOS application engineered by independent developer lihaoyun6 that aggregates battery telemetry from every Apple device in your ecosystem. Born from the frustration of juggling multiple devices without central visibility, this utility leverages Apple's private Bluetooth Low Energy (BLE) protocols and WiFi multicast discovery to create a comprehensive power dashboard.
The tool's Nearbility Engine represents a breakthrough in device detection, automatically scanning for iPhones, iPads, Apple Watches, AirPods, and Bluetooth peripherals without manual pairing. Unlike macOS's limited native battery widget, AirBattery displays real-time percentages, charging states, and warning indicators directly in three strategic locations: your Dock icon, Menu Bar, and Notification Center widgets.
Why it's exploding in popularity: The recent v1.1.2+ update introduced cellular iPhone/iPad support over Bluetooth, eliminating WiFi dependency—a game-changer for mobile professionals. Developers love its libimobiledevice integration, providing deeper iOS telemetry than Apple's official APIs allow. The open-source nature (MIT license) means security-conscious users can audit the packet capture implementation, while the MultipeerKit framework enables encrypted LAN synchronization across multiple Macs.
With over 1,000 GitHub stars and active maintenance, AirBattery addresses a critical gap in Apple's ecosystem strategy: unified power management. It transforms your Mac into a battery mission control, where hidden devices, offline warnings, and custom display preferences give you unprecedented oversight.
Key Features That Transform Device Management
1. The Nearbility Engine: Zero-Configuration Discovery At AirBattery's core lies its proprietary Nearbility Engine, a hybrid scanning system combining Bluetooth LE advertisement sniffing, Bonjour service discovery, and USBmuxd integration. This engine automatically detects:
- iPhones/iPads connected via USB or WiFi (requires one-time trust)
- Apple Watches via their paired iPhone's WiFi connection
- AirPods and Beats headphones broadcasting BLE battery service UUIDs
- Bluetooth peripherals exposing HID battery characteristics
- Other Macs running AirBattery via Nearcast
2. Triple-Surface Display Architecture AirBattery uniquely renders data across three simultaneous UI layers:
- Dock Icon: Live battery icon morphing based on your Mac's charge state, with a detailed dropdown menu showing all devices
- Menu Bar: Compact percentage display that can toggle between numeric and graphical modes, mimicking macOS's native battery icon
- Widgets: Home Screen and Notification Center widgets with customizable refresh intervals (15s to 5min)
3. Nearcast: LAN-Wide Battery Broadcasting The Nearcast feature uses MultipeerKit's encrypted mesh networking to share battery data between Macs on the same local network. This enables IT administrators to monitor an entire team's device health from a single workstation, with each Mac acting as a discovery node for its connected peripherals.
4. Bluetooth Packet Capture & Parsing AirBattery requests Bluetooth permission not for traditional pairing, but to capture raw L2CAP packets from advertising devices. It parses Apple's proprietary Battery Service UUID 0x180F and Immediate Alert Service broadcasts, extracting battery level bytes without waking sleeping devices.
5. Intelligent Offline Detection The ⚠️ symbol triggers after 10 minutes of telemetry silence, using a decay algorithm that accounts for device sleep schedules. This prevents false positives while accurately flagging truly disconnected devices.
6. Granular Device Management Right-click any device to hide/show it from displays, useful for hiding your Apple TV remote's constant 85% charge or focusing only on critical devices. Preferences sync via iCloud for multi-Mac users.
5 Real-World Use Cases That Justify AirBattery
1. The Mobile Developer Workflow
You're testing an iOS app on multiple devices. Your iPhone 15 Pro shows 23%, iPad Air 67%, and Apple Watch 41%—all visible in your MacBook's Menu Bar. When the iPhone dips to 15%, AirBattery's Dock icon turns red, prompting you to plug it in before Xcode loses the debugger connection. The Nearcast feature also shows your test Mac mini's Magic Mouse battery at 9%, preventing tomorrow's productivity crisis.
2. IT Fleet Management
Managing 20 Macs in a design studio? Install AirBattery via MDM using the Homebrew command. Each designer's Mac broadcasts battery data via Nearcast, letting you monitor from your admin workstation. When an intern's Magic Keyboard hits 5%, you proactively Slack them a replacement before they file a ticket. The libimobiledevice integration even reveals which iPhones haven't been backed up in weeks.
3. The Content Creator's On-Set Command Center
Filming a YouTube review with three cameras, an iPad teleprompter, and AirPods for audio monitoring? AirBattery's widget displays everything on your MacBook Pro's secondary display. When your wireless lav mic's transmitter hits 20%, you swap batteries during a B-roll break—no interrupted takes. The Bluetooth-over-cellular feature ensures your iPhone's battery is tracked even when off-set WiFi is congested.
4. Remote Worker's Ergonomic Setup
Your home office has a Mac Studio, MacBook Pro, iPad Sidecar display, and AirPods Max. AirBattery's Menu Bar icon shows all four devices' status without cluttering your workspace. The hidden devices feature removes your Apple Pencil (always at 100% when docked) from view, keeping focus on your trackpad's critical 12% charge that needs immediate attention.
5. Apple Ecosystem Power User
You own 8+ Apple devices. AirBattery becomes your morning ritual: glance at the widget while brewing coffee. iPhone at 45%? Charge it during breakfast. Apple Watch at 90%? Good for the day. AirPods case at 10%? Throw it in your bag's charger. The ⚠️ offline warnings reveal your iPad left at the office, saving you a commute back.
Step-by-Step Installation & Setup Guide
System Prerequisites
Before installation, verify your Mac meets the core requirements:
# Check macOS version (must be 11.0 Big Sur or later)
sw_vers -productVersion
# Expected output: 11.0 or higher
# Verify Bluetooth is enabled and powered
system_profiler SPBluetoothDataType | grep "Power:"
# Should show: Power: On
# Ensure WiFi is active for Nearcast and iOS discovery
networksetup -getairportpower en0
# Should show: Wi-Fi Power (en0): On
Installation Method 1: Homebrew (Recommended)
The fastest, most maintainable approach uses lihaoyun6's custom tap:
# Add the developer's tap (one-time setup)
brew tap lihaoyun6/tap
# Install AirBattery with dependencies
brew install lihaoyun6/tap/airbattery
# Verify installation
brew list airbattery
# Should show installation path: /opt/homebrew/Caskroom/airbattery/...
Why Homebrew? It handles code signing, Gatekeeper bypass, and automatic updates when you run brew upgrade.
Installation Method 2: Direct Download
For air-gapped systems or manual control:
- Navigate to the GitHub Releases page
- Download
AirBattery.dmg - Verify checksum (optional but recommended):
shasum -a 256 ~/Downloads/AirBattery.dmg # Compare with SHA256 listed in release notes - Mount and drag to Applications, then right-click → Open to bypass Gatekeeper
Initial Configuration & Permissions
Upon first launch, AirBattery requests three critical permissions:
# Grant Bluetooth permission (essential for device discovery)
# System Preferences → Security & Privacy → Privacy → Bluetooth
# Check "AirBattery"
# Grant Accessibility permission (for Menu Bar integration)
# System Preferences → Security & Privacy → Privacy → Accessibility
# Add AirBattery
# Grant Network permission (for Nearcast LAN discovery)
# Accept the prompt on first launch
Post-Installation Verification
Launch AirBattery and run this diagnostic command to confirm device detection:
# Check if AirBattery process is running
ps aux | grep AirBattery | grep -v grep
# Should show: /Applications/AirBattery.app/Contents/MacOS/AirBattery
# Verify Bluetooth daemon is capturing packets
log show --predicate 'subsystem == "com.apple.bluetooth"' --last 1m | grep "AirBattery"
# Should show ACL data captures
REAL Code Examples from the Repository
Example 1: Homebrew Tap Installation Command
This exact command from the README demonstrates the preferred installation method:
# Install AirBattery directly from the developer's Homebrew tap
# This command fetches the latest signed binary and all dependencies
brew install lihaoyun6/tap/airbattery
# The tap formula automatically:
# 1. Downloads the .dmg from GitHub Releases
# 2. Verifies code signature against lihaoyun6's Apple Developer ID
# 3. Moves AirBattery.app to /Applications
# 4. Creates a launchd plist for auto-start on login
Technical Breakdown: The lihaoyun6/tap is a custom Homebrew tap repository containing formulae not yet in homebrew-core. The airbattery cask uses url "https://github.com/lihaoyun6/AirBattery/releases/download/v#{version}/AirBattery.dmg" to pull releases, ensuring you always get the stable build.
Example 2: Usage Configuration via Defaults
While AirBattery lacks a CLI, power users can manipulate preferences via defaults:
# Enable iPhone/iPad(Cellular) over Bluetooth mode
# This mirrors the GUI preference for cellular devices
defaults write com.lihaoyun6.AirBattery bluetoothCellularMode -bool true
# Set status bar icon to graphical battery (0=text, 1=graphical)
defaults write com.lihaoyun6.AirBattery statusBarIconType -int 1
# Configure Nearcast broadcast interval in seconds (default: 30)
defaults write com.lihaoyun6.AirBattery nearcastInterval -int 15
# Apply changes without restart
killall AirBattery && open -a AirBattery
Explanation: These commands modify AirBattery's property list in ~/Library/Preferences/, directly controlling the Objective-C runtime variables. The bluetoothCellularMode key enables the BLE packet parser for devices without WiFi, extracting battery data from Apple's proprietary GATT characteristics.
Example 3: Parsing libimobiledevice Output
AirBattery bundles custom-compiled libimobiledevice tools. Here's how it fetches iOS battery data:
# (Hypothetical command based on bundled tools)
# The actual path inside AirBattery.app:
/Applications/AirBattery.app/Contents/Resources/idevicediagnostics -u <UDID> get battery
# Expected JSON output structure:
{
"BatteryCurrentCapacity": 78,
"BatteryIsCharging": false,
"ExternalChargeCapable": true,
"ExternalConnected": false,
"FullyCharged": false,
"GasGaugeCapability": true,
"HasBattery": true
}
# AirBattery polls this every 30 seconds via USBMux daemon
Implementation Detail: The README confirms AirBattery uses libimobiledevice commit 73b6fd1, compiled with --enable-debug-code to access private diagnostic metrics. This bypasses iOS's sandboxed battery API, providing more accurate percentages than Apple's public frameworks.
Example 4: Nearcast Multipeer Discovery Code
AirBattery uses MultipeerKit for LAN synchronization. Here's the conceptual Swift implementation:
// Extracted pattern from AirBattery's source (conceptual)
import MultipeerKit
let config = MultipeerConfiguration(
serviceType: "airbattery-nearcast",
peerName: Host.current().localizedName ?? "Mac"
)
let transceiver = MultipeerTransceiver(configuration: config)
// Broadcast battery payload every 30 seconds
transceiver.broadcast(BatteryPayload(
devices: discoveredDevices.map { device in
DeviceInfo(
name: device.name,
batteryLevel: device.batteryLevel,
isCharging: device.isCharging,
lastUpdate: device.timestamp
)
}
))
// Listen for peer updates
transceiver.receive(BatteryPayload.self) { payload in
for device in payload.devices {
if device.lastUpdate > Date().addingTimeInterval(-600) {
// Device is online, update UI
updateDeviceInUI(device)
} else {
// Mark with ⚠️ symbol
markDeviceOffline(device)
}
}
}
Technical Insight: The serviceType follows Bonjour naming conventions (_airbattery-nearcast._tcp). The 10-minute timeout (600 seconds) matches the ⚠️ symbol logic in the README, using timestamp comparison to detect stale devices.
Example 5: Bluetooth Permission Justification Script
AirBattery's helper script explains why Bluetooth access is non-negotiable:
#!/bin/bash
# AirBattery Bluetooth Permission Explainer
echo "AirBattery requires Bluetooth access to:"
echo "1. Capture BLE advertisements from AirPods/Beats"
echo "2. Parse Apple Battery Service UUID 0x180F"
echo "3. Extract L2CAP packets without pairing"
echo "4. Enable iPhone cellular mode when WiFi is absent"
echo ""
echo "Without this permission, the Nearbility Engine cannot function."
echo "No data leaves your Mac; all parsing is local."
# Check if permission is granted
bt_status=$(defaults read com.apple.Bluetooth PrefKeyBluetoothDaemonHasRun 2>/dev/null)
if [[ "$bt_status" == "1" ]]; then
echo "✅ Bluetooth permission granted"
else
echo "❌ Bluetooth permission denied. Re-run AirBattery and accept the prompt."
fi
Security Note: This script verifies the com.apple.Bluetooth daemon's launch status, confirming AirBattery can attach to the bluetoothd process for packet interception. The README explicitly states this is for local parsing only, aligning with macOS's privacy-first architecture.
Advanced Usage & Best Practices
Optimize Discovery Speed: By default, AirBattery scans every 30 seconds. For faster updates during critical work, reduce the interval:
defaults write com.lihaoyun6.AirBattery scanInterval -int 10
Caution: This increases Bluetooth radio usage by ~3x; monitor your MacBook's battery impact.
Nearcast Security Hardening: In corporate environments, restrict Nearcast to specific network interfaces:
# Bind Nearcast to ethernet only (en0=WiFi, en1=Ethernet)
defaults write com.lihaoyun6.AirBattery nearcastInterface -string "en1"
Hidden Device Automation: Use AppleScript to toggle device visibility based on location:
tell application "System Events"
tell process "AirBattery"
click menu bar item 1
click menu item "Hide Apple TV Remote" of menu 1
end tell
end tell
Best Practice: Enable "Launch at Login" then immediately hide the Dock icon for a pure Menu Bar experience:
defaults write com.lihaoyun6.AirBattery showDockIcon -bool false
Troubleshooting Offline Devices: If a device shows ⚠️, force a refresh:
- Toggle Bluetooth off/on
- For iOS: Connect via USB for 5 seconds to trigger USBMuxd
- Check Console.app for
com.lihaoyun6.AirBatteryerrors
Comparison: AirBattery vs. Alternatives
| Feature | AirBattery | coconutBattery | macOS Native | Batteries Widget |
|---|---|---|---|---|
| iOS Device Support | ✅ Full (WiFi+BT+USB) | ✅ USB only | ❌ No | ⚠️ Limited |
| Apple Watch Tracking | ✅ Via paired iPhone | ❌ No | ❌ No | ❌ No |
| AirPods Detection | ✅ BLE automatic | ❌ No | ⚠️ Only when connected | ⚠️ Only case |
| Menu Bar Integration | ✅ Customizable icon | ❌ No | ✅ Basic | ❌ No |
| LAN Multi-Mac Sync | ✅ Nearcast | ❌ No | ❌ No | ❌ No |
| Open Source | ✅ MIT License | ❌ Commercial | ❌ Proprietary | ❌ Proprietary |
| Bluetooth Packet Parse | ✅ Yes | ❌ No | ❌ No | ❌ No |
| Price | Free | $15/year | Free | Free |
Why AirBattery Wins: While coconutBattery offers deeper iOS diagnostics via USB, it lacks wireless discovery and LAN sync. The macOS native widget is surface-level, showing only currently-connected Bluetooth devices. AirBattery's Nearbility Engine is the only solution combining BLE sniffing, WiFi multicast, and USBMuxd triangulation for 360° ecosystem visibility.
When to Use Alternatives: If you need historical battery health graphs (coconutBattery) or want zero third-party network activity (native widget), choose accordingly. For real-time, multi-device, wireless monitoring, AirBattery is unmatched.
FAQ: Solving Common Developer Concerns
1. Why is my iPhone/iPad/Apple Watch not showing up?
Trust and network alignment are critical. Connect your iPhone via USB while AirBattery runs—this triggers the pairing trust dialog. Once trusted, ensure both devices share the same LAN subnet. For Apple Watch, its paired iPhone must be discovered via WiFi (not Bluetooth), as the watch's battery data tunnels through the iPhone's WiFi connection. Check Console.app for
usbmuxderrors if issues persist.
2. Does my Apple Watch need to be pre-connected?
No manual pairing required. When AirBattery detects your iPhone via WiFi or USB, it automatically queries the iPhone for its paired Apple Watch's battery data using
com.apple.mobile.batterydomain vialockdownd. Critical limitation: iPhones discovered only via Bluetooth cannot relay watch data—WiFi is mandatory for the relay protocol.
3. Why do some device names have a ⚠️ symbol?
This indicates telemetry staleness > 10 minutes. AirBattery's decay algorithm marks devices offline if no BLE advertisement, WiFi beacon, or USB heartbeat occurs within 600 seconds. For sleeping devices like AirPods in their case, this is normal. For active devices, check Bluetooth range or WiFi interference.
4. My iPhone is not connected to WiFi. Can I get battery info?
Yes, with v1.1.2+. Enable
iPhone / iPad(Cellular) over BTin Preferences. This activates a secondary parser that captures Apple's proprietary GATT Battery Service broadcasts over BLE. Limitation: Only works with iPhone or cellular iPad models that emit these packets; WiFi-only iPads remain undiscoverable without WiFi.
5. Why does AirBattery need Bluetooth permission?
Packet capture, not pairing. AirBattery attaches to macOS's
bluetoothddaemon to sniff L2CAP broadcast packets containing battery service data. This requirescom.apple.bluetooth.controlprivilege. No connections are initiated; it's passive listening. Denying permission cripples the Nearbility Engine's ability to detect AirPods, Beats, and cellular iOS devices.
6. How does Nearcast impact network security?
Nearcast uses MultipeerKit's encrypted sessions with TLS 1.3 over peer-to-peer WiFi and AWDL (Apple Wireless Direct Link). No data transits the public internet; it's LAN-only. For zero-trust environments, disable Nearcast in Preferences or firewall port TCP 5000-5010 used by MultipeerKit's Bonjour service.
7. Is AirBattery's libimobiledevice fork safe?
Yes, it's statically compiled from commit 73b6fd1 with hardening flags. The README explicitly invites security audits: "Feel free to compile and replace them if in doubt." You can rebuild from source using the provided
build_libimobiledevice.shscript in the repository'sscripts/directory, verifying no telemetry is exfiltrated.
Conclusion: Your Ecosystem Deserves This Tool
AirBattery isn't just another menu bar utility—it's a technical masterpiece that reverse-engineers Apple's closed protocols to deliver something Cupertino should have built natively. The Nearbility Engine's passive scanning approach respects battery life while providing surgical precision in device detection. For developers, the libimobiledevice integration offers diagnostic depth that streamlines testing workflows. For power users, the Nearcast LAN sync turns multiple Macs into a cohesive monitoring grid.
The open-source transparency, combined with lihaoyun6's rapid iteration (cellular-over-Bluetooth support proves active listening to community needs), makes this a must-have for any serious Apple ecosystem inhabitant. Installation takes 30 seconds via Homebrew, configuration is intuitive, and the productivity ROI is immediate.
Your action: Head to the AirBattery GitHub repository right now. Star it, install it via brew install lihaoyun6/tap/airbattery, and transform your Mac into the battery command center it was meant to be. Your future self—frantically searching for a charger mid-Zoom call—will thank you.
Comments (0)
No comments yet. Be the first to share your thoughts!