Battery finally died after a month of reading + testing, so I’ve added a voltage label. This is why I needed a proper UI framework: I add a subview, hook it up to the power update event, and magically my UI framework tracks the updated region and refreshes it at a byte boundary.