이번 포스트에서는 iOS 앱에서 배터리 상태와 잔량을 실시간으로 가져오는 방법을 단계별로 알아보겠습니다. UIDevice 클래스가 제공하는 배터리 모니터링 기능을 활용하면 충전 중인지, 방전 중인지, 배터리가 가득 찼는지 등의 정보를 손쉽게 얻을 수 있습니다.
프로젝트 준비하기
1단계 – Xcode를 실행하고 New Project → Single View Application을 선택한 후, 프로젝트 이름을 "BatteryState"로 지정합니다.
2단계 – Main.storyboard 파일을 열고 아래 이미지와 같이 레이블(Label) 두 개를 추가합니다. 이 레이블에 배터리 상태와 잔량을 표시하게 됩니다.

배터리 모니터링 활성화
3단계 – iOS에서 배터리 정보를 받아오려면 먼저 배터리 모니터링 기능을 활성화해야 합니다. 다음 코드를 ViewController의 viewDidLoad에 추가하세요.
UIDevice.current.isBatteryMonitoringEnabled = true
이 속성이 true로 설정되지 않으면 batteryState와 batteryLevel은 항상 기본값만 반환하므로 반드시 먼저 활성화해야 합니다.
배터리 상태 변수 선언
4단계 – 현재 배터리 상태를 담을 연산 프로퍼티를 선언합니다. 이 변수는 UIDevice.current.batteryState 값을 반환하여 충전, 방전, 가득 참, 알 수 없음 등의 상태를 제공합니다.
var batteryState: UIDevice.BatteryState {
return UIDevice.current.batteryState
}배터리 변화 감지 옵저버 등록
5단계 – 배터리 상태나 잔량이 변경될 때마다 iOS가 발송하는 알림(Notification)을 받기 위해 옵저버를 등록해야 합니다. viewDidLoad에 아래 코드를 추가하세요.
NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
옵저버가 등록되면 배터리 잔량이 변경될 때마다 batteryLevelDidChange 메서드가 자동으로 호출됩니다.
배터리 상태 업데이트 처리
6단계 – batteryLevelDidChange 메서드에서 배터리 변화를 처리하고, 레이블을 갱신하는 함수를 정의합니다.
@objc func batteryLevelDidChange() {
updateBatteryStateLabel()
}
func updateBatteryStateLabel() {
var status = "Unknown"
switch batteryState {
case .charging:
status = "Charging"
case .unknown:
status = "Unknown"
case .unplugged:
status = "Unplugged"
case .full:
status = "Full"
}
DispatchQueue.main.async {
self.batteryStateLabel.text = "Battery State: \(status)"
}
}여기서 updateBatteryStateLabel 함수는 레이블의 텍스트를 현재 배터리 상태에 맞게 갱신하는 역할을 합니다. 이 함수는 옵저버 메서드인 batteryLevelDidChange에서 호출되며, UI 갱신은 반드시 메인 스레드에서 이루어져야 하므로 DispatchQueue.main.async를 사용했습니다.
앱이 처음 실행될 때도 초기 배터리 상태가 화면에 표시되도록 viewDidLoad에서 이 함수를 한 번 호출해 주어야 합니다. 모든 코드를 적용한 최종 viewDidLoad는 다음과 같습니다.
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.isBatteryMonitoringEnabled = true
NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
updateBatteryStateLabel()
}실행 결과 확인하기
코드 작성이 끝났으면 실제 디바이스에서 앱을 실행해 보세요. 시뮬레이터가 아닌 실제 기기에서 테스트해야 정확한 배터리 정보를 확인할 수 있습니다. 충전기를 연결하거나 분리하는 등 배터리 상태를 변경하면 아래 사진과 같이 화면에 표시되는 상태가 실시간으로 바뀌는 것을 볼 수 있습니다.

마무리
이렇게 isBatteryMonitoringEnabled 속성과 batteryLevelDidChangeNotification 알림만 활용하면 별도의 외부 라이브러리 없이 iOS에서 배터리 상태와 잔량 변화를 손쉽게 추적할 수 있습니다. 배터리 잔량 백분율까지 함께 표시하고 싶다면 UIDevice.current.batteryLevel 값(0.0~1.0)을 활용하면 됩니다. 저전력 모드 감지가 필요하다면 ProcessInfo.processInfo.isLowPowerModeEnabled와 NSProcessInfoPowerStateDidChange 알림을 추가로 활용해 보세요.