최근 iOS 13이 출시 되면서 다양한 기능이 추가되고 변경사항이 생겼습니다.
업데이트를 통해 더 풍부한, 개선된 기능을 제공받을 수 있는건 좋은 일입니다.
하지만 개발자들은 개발 시 주의해야할 이슈들이 생겼습니다. 한번씩 읽어보시는 걸 추천드립니다.
* 시간 나시면 공식 사이트에서 자세히 보시길 추천드립니다.
소개
항목내용
최초 공개일 | 2019.06.03 (WWDC) |
정식 배포일 | 2019.09.20 |
공식 사이트 | https://www.apple.com/ios/ios-13/ |
기능 소개 | https://www.apple.com/ios/ios-13/features/ |
iOS 13은 2019년 9월 업데이트 되었습니다. 주요 업데이트 내용으로는 다크모드, 애플 아케이드(오락실), 사진앱 변경, 사파리 다운로드 관리자, 애플 맵 3D 지원이 있습니다.
0. 대응이 필요한 변경사항
- 다크모드
- 위치 요청 정책 변경
- StatusBar 색상 수정 방식 변경
- View Controller Presentation 동작 방식 변경
1. 다크모드
다크 모드는 Mac OS 모하비에서 처음 선보인 기능이며, iOS13 부터 지원합니다.
요약해서 설명하자면 "UI 컬러를 전반적으로 어둡게 바꾸는 기능"입니다. 물론 사용자가 제어센터에서 사용여부를 선택할 수 있습니다.
이로인해 앱이 다크모드를 지원해야 한다면, 기획, 디자인, 개발, QA 단계에서 다크모드에 대응해야 합니다.
대응
현재 배포되어 있거나 iOS 13에 따로 대응하지 않은 앱은 무조건 대응이 필요합니다. 다크모드에서는 Color 값을 별도로 적용하지 않은 뷰들은 다크모드의 Default 값을 따르게 됩니다.
대응되지 않은 앱은 아래와 같은 문제들이 발생합니다.
- 텍스트 가독성이 저하될 수 있습니다.
- 다크모드에서 텍스트는 밝은 색, 배경 색상은 어두운 색이 Default 입니다.
- 따로 백그라운드의 색깔을 변경해주지 않은 뷰들이 다크 모드를 준수하게 됩니다. 이 때 제일 문제가 되는 경우는 UITextView 입니다. 보통 텍스트 컬러는 직접 지정해주는데 백그라운드 색상은 지정하지 않는 경우가 많기 때문입니다.
이렇게 될 경우 다크 모드로 전환하면 백그라운드는 다크모드의 Default 값을 따라서 어두운 색깔로 변경되는 반면 텍스트 컬러는 그대로 검은색이라 가독성이 심각하게 떨어집니다. (보이지 않는 수준이라고 봐도 무방할 듯)
-
UIStatusBarStyle.default 로 지정되었던 StatusBar 색깔이 일괄적으로 흰색으로 바뀌게 됩니다.
-
Status 색상을 밝은 계열로 지정한 경우, 가독성이 심각하게 떨어집니다. 이에 대응해 UIStatusBarStyle.darkContent 가 새로 제공됩니다. UIStatusBarStyle.darkContent로 지정할 경우, 다크 모드일 경우에도 StatusBar 컨텐츠 색깔이 검은색으로 유지됩니다.
-
해결 방법으로는 직접적으로 대응, 다크모드를 미 지원 두 가지가 있습니다.
1) 직접적 대응
네이티브 방식에서는 iOS 13, 다크모드를 설정한 디바이스에서 앱을 설치하고, 가독성이 떨어지는 텍스트, 괴리감이 발생하는 UI 색상 등을 하나하나 수정해주는 방법이 있습니다.
대응 가이드가 필요하다고 여겨지면 추후 별도로 작성해보겠습니다.
2) 다크모드 비활성화
적용이 불필요하다고 판단되면 무시할 수 있는 방법이 있습니다.
info.plist 설정을 통한 비활성화
프로젝트 info.plist에 아래와 같이 설정해주면 됩니다.
참고로 애플 개발 문서에 따르면 애플은 다크모드를 지원할 것을 추천합니다.
StatusBar Style 스타일 변경
Xcode - Project Setting General - Deployment Info 에서 해당 설정을 바꾸어 주면 됩니다.
2. 위치 요청 정책 변경
위치 권한 한 번만 허용 추가
위치 접근 허용 권한에 "다음번에 묻기" 가 추가됐습니다.
권한 허용 팝업에서 "한 번 허용"을 누르면 CLLocationManager.authorizationStatus 값이 authorizedWhenInUse 로 변경됩니다.
이 권한은 유저가 앱을 사용 중일 때만 유지되며, 백그라운드에 돌아갔다가 다시 오거나, 앱을 재 실행할경우 다시 notdetermined로 변경됩니다.
'항상 허용' 정책 변경
CLLocationManager.requestalwaysAuthorization()을 콜할 경우 기존에는 왼쪽과 같이 '항상 허용' 창이 있었습니다. 하지만 이 선택지는 iOS 13에서 사라졌습니다. 대신 한 번 허용이 추가된 걸 확인할 수 있습니다.
단 항상 허용할지 물어보는 Alert는 아래 조건에 부합하면 별도로 사용자에게 노출됩니다.
- 백그라운드에서 위치 탐색을 시도하는 경우
- 위치 권한이 "사용하는 동안"(authorizedAlways) 으로 설정된 사용자일 경우
- CLLocationManager의 allowBackgroundLocationupdates가 True인 경우
- 위 조건을 만족하고 startUpdatingLocation() 함수를 호출할 경우
유저가 '사용하는 동안 유지'를 선택할 경우 'authorizedWhenInUse로 권한이 변경된다. 반면 '항상 허용'을 누르면 영구적으로 'authorizedAlways'로 유지된다.
결과적으로 '항상 허용'을 직접적으로 요청하는 방법은 사라졌지만, 설정에서 유저가 '항상' 을 선택할 경우 이전 로직이 그대로 돌아갑니다. 항상 허용 권한이 필요하다면 아래와 같은 안내 화면을 사용자에게 보여주는 것을 추천합니다.
위치 트래킹 알림
백그라운드에서 위치 탐색 시 어디에서 위치를 취득했는지 시스템 Alert을 주기적으로 띄워 경고합니다.
3. 개인정보 보호 및 보안
업데이트 예정
4. Apple 로그인
트위터, 페이스북, 구글 들이 제공하는 OAuth 로그인 기능이 추가된 것으로 보인다.
업데이트 예정
5. 애플 아케이드
재미를 선물하는 업데이트입니다.
업데이트 예정
6. 사진 앱
- 일, 월, 연도별로 최고의 사진을 자동으로 엄선해서 보여주는 기능
- 새롭게 마련된 사진 편집 기능
- 강력한 동영상 편집
업데이트 예정
7. 비디오 편집
업데이트 예정
8. 애플 지도
3D 지도 탐색 기능이 추가 됨. (미국 에서 우선 적용)
업데이트 예정
9. Siri
업데이트 예정
10. 미리 알림
업데이트 예정
11. 성능 향상
- Face ID 잠금 해제 속도 30% 향상
- 앱 실행 속도가 2배 향상
자세한 벤치마킹 데이터는 추후 업데이트 예정
12. iPad
업데이트 예정
13. ARKit3
업데이트 예정
14. 그 외 개발 시 주의해야 할 점
1) StatusBar 색상 변경 방식
Native 개발 방식에서 앱의 StatusBar 색상을 변경할 때 사용했던 보편적인 방법은 iOS 13 환경에서는 허용되지 않으며, 만약 코드에 존재한다면 Crash가 발생해 앱이 죽습니다.
애플은 [StatusBarManager|https://developer.apple.com/documentation/uikit/uistatusbarmanager] 를 제공하나, BackgroundColor는 변경할 수 없습니다. Background Color를 변경해야 하는 경우 아래 대응 커밋을 참고해주세요.
2) View Controller Presentation 동작 변경
View controller presentation의 동작이 변경됐습니다. Presentation의 Default 속성은 이제 PageSheet 입니다.
대응
모달을 호출할 때, UIViewController 객체의 'modalPresentatonStyle' 속성을 조절해주면 됩니다
기존과 같은 모달 방식을 사용하고 싶다면 '.fullScreen' 설정을 주면 됩니다.
대응법은 테스트 후 업데이트 하겠습니다.
15. 기타
Swift UI
업데이트 중
16. 참고 사이트
https://www.apple.com/kr/ios/ios-13/
https://www.apple.com/kr/ios/ios-13/features/
https://www.apple.com/kr/newsroom/2019/06/apple-previews-ios-13/
https://developer.apple.com/kr/ios/
https://g-y-e-o-m.tistory.com/150
https://sesang06.tistory.com/138
https://brunch.co.kr/@genkino/169
https://medium.com/@hacknicity/view-controller-presentation-changes-in-ios-13-ac8c901ebc4e
https://sarunw.com/posts/modality-changes-in-ios13/
'iOS' 카테고리의 다른 글
[iOS] rsync error: some files could not be transferred (0) | 2024.05.12 |
---|---|
[iOS] error: SDK does not contain 'libarclite' at the path (0) | 2024.05.12 |
Xcode iOS Device 목록 표시안되는 문제 (0) | 2020.11.06 |
테이블 뷰 최적화 방법 (0) | 2020.10.20 |
댓글