일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ios
- 스크롤 탭
- swift #swift keychain #keychain 사용법
- Side Menu
- transformation.map
- 기존 앱
- DataBinding
- base64 변환
- detect url
- 개발자 면접
- url 추적
- DevelopmentRegion
- development language
- SwiftUI
- oberve url
- List
- swift
- pod install
- 상단 탭바
- convert base64
- GeometryReader
- notifychanged
- scrolling tab
- ViewBuilder
- UIViewControllerTransitioningDelegate
- Tuist
- UIPresentationController
- url 관찰
- Android
- Swift Package Manager
- Today
- Total
버그 잡이
아이패드(iPad) 기능 지원 삽질기 (to 기존 앱) 본문
기조 상용중인 앱에 아이패드 모드를 지원하게 되었습니다. 관련 작업을 하면서 새롭게 배운점과 느낀점들을 정리해보겠습니다.
1. frame 보다는 Auto-layout을 사용하자.
앱을 보면 팝업, 커스텀 키패드 등이 frame으로 layout이 잡혀 있었습니다.
이는 가로/세로 디바이스 회전시 레이아웃을 깨지게 만듭니다.
간단하게 오토레이아웃으로 변경할 수 있는 View는 오토레이아웃으로 레이아웃을 설정하도록 변경해주고,
변경이 다소 무리인 경우에는 "viewWillTransition()" 이라는 viewController의 override 메서드를 활용하여 문제를 대응할 수 있습니다. 디바이스의 회전을 감지하고 디바이스 스크린 Size를 받을 수 있는 메서드이다. size 값을 활용하면 회전시 화면 대응이 가능하다.
https://developer.apple.com/documentation/uikit/uicontentcontainer/1621466-viewwilltransition
2. iPad Multitasking 모드
아이패드는 데스크탑처럼 여러 앱을 한 화면에 띄워서 동시에 사용할 수 있는 멀티태스킹 모드를 지원합니다.
작업하면서 멀티태스킹 관련 몇 가지 특이사항을 마주했습니다.
1) 앱의 카메라 접근 X
앱에서 QR코드 인식과 같이 카메라에 접근해야 하는 기능이 있을 수 있습니다. 이러한 기능이 멀티태스킹 상태에서는 불가능합니다. https://developer.apple.com/documentation/avkit/accessing_the_camera_while_multitasking
2) 강제로 가로/세로 전환 X
UIViewController.attemptRotationToDeviceOrientation()
위 코드를 통해서 앱에서 디바이스 화면 가로/세로 전환을 강제로 할 수 있습니다.
그런데 아이패드에서는 위 코드가 동작하지 않습니다. 아이패드의 경우 멀티태스킹 모드를 지원하기 때문에 한 앱에서 강제로 가로/세로 전환을 하지 못하도록 막았다고 합니다.
(단, 멀티태스킹 모드를 지원하지 않는 아이패드는 위 코드를 실행할 수 있습니다.)
3) 멀티태스킹 지원 안 하는 방법
project -> general -> deployment info 를 보면 아래와 같이 아이패드 지원 여부를 선택할 수 있습니다.
하단의 "Requires full screen" 을 체크하면 멀티태스킹 지원이 되지 않습니다. 아이패드에서 오로지 풀스크린으로만 사용할 수 있는 것이지요
3. WKWebview의 userAgent가 Mac으로 넘어오는 이슈
웹뷰 설정 중에서 해당 웹뷰의 ContentMode를 설정할 수 있는데, 이를 통해서 mobile에서 접속했는지, desktop에서 접속했는지 알 수 있습니다.
그런데, iPad && iOS 13 인 경우, preferredContentMode가 .desktop으로 설정되는 문제가 있습니다. 그에 따라 웹뷰에 설정해두었던 인터페이스가 제대로 동작하지 않는 경우가 있었습니다.
아래와 같이 웹 config를 설정해주면 웹뷰가 모바일용으로 정상 동작하게 됩니다.
if #available(iOS 13.0, *) {
let pref = WKWebpagePreferences.init()
pref.preferredContentMode = .mobile
webConfiguration.defaultWebpagePreferences = pref
}
4. .pushViewController(), .present() -> showDetailViewController()
아이패드의 경우 기존 PushViewController 와 Present로 화면 이동 하던 것과는 조금 다른 구조로 화면이 이동될 것입니다.
기존에는 현재 화면 위에 띄우던 화면도 아이패드에서는 detail 화면으로 빠지게 될 것인데요.
이 경우 기존 .pushViewController() -> .showDetailViewController() 함수로 변경해서 화면 이동을 처리해줘야합니다.
'IOS' 카테고리의 다른 글
Reactorkit에 coordinator 패턴 적용해보기 (0) | 2022.04.17 |
---|---|
ReactorKit - transform() 은 무엇일까? (0) | 2022.04.06 |
iOS - 앱 스토어 > 앱 정보 언어 변경하기 #DevelopmentRegion (0) | 2021.12.04 |
pod install 명령어를 Xcode 단축키로 등록하기 (0) | 2021.11.09 |
iOS/Swift - background 진입 방법 구분하기 (Home 버튼, Lock 버튼) (0) | 2021.10.29 |