애플은 2019년 9월 19일, 지난 4년간 출시된 아이폰(iPhone 6s 이후 모델) 전체를 대상으로 기다려온 iOS 13 업데이트를 전 세계에 동시에 배포했습니다.
이번 업데이트의 핵심 기능 중 하나는 바로 시스템 전반에 적용되는 iOS 13 다크 모드(Dark Mode)입니다. 스마트폰 디스플레이에서 방출되는 백색광으로 인한 눈의 피로를 줄이는 데 큰 도움이 될 것으로 기대됩니다.
일반 사용자에게는 반가운 소식이지만, iOS 개발자 입장에서는 기존 앱을 iOS 13 다크 모드에 대응시키는 작업이 하나의 과제가 됩니다. 이 글에서는 개발자가 기존 iOS 앱을 다크 모드에 맞게 준비하는 데 필요한 유용한 정보와 단계별 방법을 소개합니다.
iOS 13 다크 모드용 앱 설정은 어렵지 않습니다
다행히도 시스템 전체 규모의 변화임에도 불구하고, iOS 13 다크 모드 구현 자체는 그리 어렵지 않습니다. 최신 iOS 13 SDK 덕분에 기존 앱에서 다크 모드를 활성화하는 작업도 비교적 간단하게 처리할 수 있습니다.
최신 SDK로 빌드하면 운영체제가 스위치, 버튼, 테이블 뷰 등 대부분의 시스템 컨트롤을 자동으로 업데이트해 줍니다. 다만 이미지와 텍스트 색상은 자동으로 조정되지 않으므로 별도의 작업이 필요하다는 점에 유의하세요.
그럼에도 불구하고 시스템 전역 변경 사항인 다크 모드가 이렇게 쉽게 적용될 수 있다는 점은 놀라운 일입니다. 코드 수정량이 적어 절약된 시간에 다른 개발 작업을 더 진행할 수 있다는 것이 큰 장점입니다.
iOS 13 다크 모드에 맞춘 색상 조정 방법
먼저 시스템 색상을 다크 모드에 맞게 변경하는 방법부터 살펴보겠습니다.
iOS 13에서는 UIColor에 새로운 시스템 색상들이 추가되었으며, 그중 하나가 라벨 색상(label color)입니다. 이러한 새로운 시스템 색상을 사용하면 다크 모드는 물론 고대비 모드 등 다양한 인터페이스 환경을 손쉽게 지원할 수 있습니다.
label.color = UIColor.secondaryLabel일반적으로는 시스템 색상을 사용하는 것이 좋습니다. 시스템 색상은 인터페이스 변화에 자동으로 대응하여 앱 간의 일관성을 유지해 주기 때문입니다. 하지만 개발자가 원한다면 커스텀 색상으로 다크 모드를 구현할 수도 있습니다.
iOS 11부터 도입된 에셋 카탈로그(Asset Catalog) 색상을 활용하면, 커스텀 색상 세트의 다크 버전을 추가하는 방식으로 다크 모드 지원이 한결 쉬워집니다.
방법은 간단합니다. 카탈로그에서 원하는 색상을 선택한 후, Attributes Inspector에서 Appearances를 'Any, Dark'로 변경하기만 하면 됩니다. 이것으로 앱을 위한 커스텀 다크 모드 설정이 완료됩니다.
iOS 13 다크 모드 문제 해결 방법
앱이 iOS 13 다크 모드를 따르지 않는다면 어떻게 해야 할까요? 아래의 간단한 단계를 따라 문제를 해결해 보세요.
1단계: 앱 업데이트 여부 확인
먼저 앱이 최신 버전으로 업데이트되었는지 확인해야 합니다. 앱이 iOS 13 다크 모드에서 정상 작동하지 않거나 지원하지 않는 경우, 앱 스토어(App Store)를 통해 앱을 업데이트하세요.
2단계: 다크 모드 활성화 상태 점검
기기에서 다크 모드가 실제로 활성화되어 있는지 확인합니다. 활성화되어 있지 않다면 설정 → 디스플레이 및 밝기(Display & Brightness) 메뉴로 이동하여 '다크(Dark)' 옵션이 선택되어 있는지 확인하세요.
3단계: 앱 내부 설정 확인
앱이 완전히 업데이트되었음에도 다크 모드가 적용되지 않는다면, 앱 자체의 내부 설정을 확인해 보세요. 일부 앱은 시스템 설정과 별개로 앱 내에서 테마를 직접 지정할 수 있는 옵션을 제공합니다.
더 많은 도움이 필요하다면 전문 개발팀의 지원을 받는 것도 좋은 방법입니다. 또한 iOS 모바일 앱 개발 관련 팁도 함께 참고하시면 도움이 될 것입니다.
iOS 13 다크 모드에 맞춘 이미지 조정 방법
대부분의 이미지는 다크 모드에서도 잘 어울리며, 때로는 배경과의 대비 덕분에 디테일이 더욱 돋보이기도 합니다. 하지만 일부 이미지는 다크 배경에서 어색하거나 부자연스럽게 보일 수 있습니다.
다행히 이미지도 텍스트와 동일한 방식으로 다크 모드에 맞게 조정할 수 있습니다.
카탈로그에서 해당 이미지를 선택한 뒤, 앞서 설명한 것처럼 Attributes Inspector에서 속성을 'Any, Dark'로 변경하고 이미지의 다크 버전을 추가하면 끝납니다.
프로그래밍 방식으로 다크 모드 변화 감지하기
개발 과정에서 프로그래밍 방식으로 외관(appearance) 변화를 감지해야 하는 상황이 발생할 수 있습니다. 이때는 다음과 같이 처리합니다.
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
{
super.traitCollectionDidChange(previousTraitCollection)
let userInterfaceStyle = traitCollection.userInterfaceStyle // .unspecified, .light, .dark 중 하나
// 외관에 맞춰 UI를 업데이트
}traitCollectionDidChange를 오버라이드하면 외관 변화를 감지할 수 있으며, 이후 traitCollection.userInterfaceStyle 값을 확인하기만 하면 됩니다.
새로 구현한 메서드로 현재 외관 상태를 검증할 수도 있습니다:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
let hasUserInterfaceStyleChanged = previousTraitCollection.hasDifferentColorAppearance(comparedTo: traitCollection) // Bool 반환
// 외관에 맞춰 UI를 업데이트
}사용자 인터페이스 스타일 재정의(Overriding)하기
앱 전체에 적용하기
iOS 13.0 이상 SDK로 링크된 앱은 시스템에 의해 자동으로 라이트 모드와 다크 모드 양쪽을 모두 지원하도록 설정됩니다.
앱의 다크 모드 지원 작업에 추가 시간이 필요하거나, 앱을 단일 스타일로 유지하고 싶다면 Info.plist 파일에 UIUserInterfaceStyle 키를 추가하고 값을 'Light' 또는 'Dark'로 지정하여 옵트아웃(opt-out)할 수 있습니다.
이 키를 설정하면 시스템은 사용자의 선호 설정을 무시하고 항상 지정된 외관을 앱에 적용합니다.
참고: iOS 13 다크 모드 지원은 강력히 권장됩니다. UIUserInterfaceStyle 키를 통한 옵트아웃은 다크 모드 지원 작업을 진행하는 동안에만 임시적으로 사용해야 합니다.
특정 화면에만 적용하기
iOS 13에서는 특정 뷰(view)나 뷰 컨트롤러(view controller)에 한해서만 인터페이스 스타일을 재정의할 수도 있습니다. 예를 들어, 앱 전체는 라이트 모드로 유지하면서 특정 화면만 다크 모드로 표시하고 싶은 경우가 있을 수 있습니다.
이 경우 최상위 뷰 또는 뷰 컨트롤러에서 해당 변수를 오버라이드하면, 설정값이 하위 뷰들까지 자동으로 전파됩니다.
// UIViewController 내부
override func viewDidLoad()
{
super.viewDidLoad()
// 항상 다크 인터페이스 스타일 적용
overrideUserInterfaceStyle = .dark
}마무리하며
이번 글에서는 앱을 iOS 13 다크 모드에 대응시키는 다양한 방법을 살펴보았습니다. iOS 13 다크 모드는 스마트폰을 더욱 편안하게 사용할 수 있는 새로운 방식을 제공하며, 언젠가 흰 배경의 기본 모드를 대체하는 미래가 올지도 모릅니다.
위에서 소개한 코딩 가이드라인과 팁을 따르면 iOS 13에서 앱의 다크 모드를 손쉽게 설정할 수 있습니다. 전문적인 도움이 필요하다면 iOS 13 다크 모드 관련 문의를 위해 숙련된 iOS 개발자와 상담해 보세요.