티스토리 뷰
[1] 프로젝트 세팅
app target의 General settings 으로 가서 Supports multiple windows를 체크해주세요
이 옵션을 체크하면 XCode는 info.plist파일에서
Application Scene Manifest > Enable Multiple Windows를 yes로 바꿔줍니다.
이 key가 system에게 나의 앱이 multiple simultaneous scenes을 지원해!! 라고 알려주는 역할을 합니다.
[2] 실험
이제 돌려보겠습니다.
1. 앱을 처음 런치할때,
AppDelegate.swift > application(_:didFinishLaunchingWithOptions:)
SceneDelegate.swift > scene(_:willConnectTo:options:) // UIWindowScene: 0x106c00580 UISceneSession: 0x281a58a00
SceneDelegate.swift > sceneWillEnterForeground(_:) // UIWindowScene: 0x106c00580
SceneDelegate.swift > sceneDidBecomeActive(_:) // UIWindowScene: 0x106c00580
2. 홈버튼 두번 눌러서 백그라운드 상태로 바꾸면
SceneDelegate.swift > sceneWillResignActive(_:)
SceneDelegate.swift > sceneDidEnterBackground(_:)
3. 다시 포그라운드 상태로 바꾸면
SceneDelegate.swift > sceneWillEnterForeground(_:)
SceneDelegate.swift > sceneDidBecomeActive(_:)
4. 같은 앱을 하나 더 띄워서 split view로 놓으면
AppDelegate.swift > application(_:configurationForConnecting:options:) // UISceneSession: 0x281ae9200
SceneDelegate.swift > scene(_:willConnectTo:options:) // UIWindowScene: 0x106c00440 UISceneSession: 0x281ae9200
SceneDelegate.swift > sceneWillEnterForeground(_:) // UIWindowScene: 0x106c00440
SceneDelegate.swift > sceneDidBecomeActive(_:) // UIWindowScene: 0x106c00440
=> 새로운 UIWindowScene과 UISceneSession이 생겼다
5. 같은 앱을 하나 더 띄워서 slide over로 놓으면
AppDelegate.swift > application(_:configurationForConnecting:options:) // UISceneSession: 0x281ae4e00
SceneDelegate.swift > scene(_:willConnectTo:options:) // UIWindowScene: 0x106f0d840 UISceneSession: 0x281ae4e00
SceneDelegate.swift > sceneWillEnterForeground(_:) // UIWindowScene: 0x106f0d840
SceneDelegate.swift > sceneDidBecomeActive(_:) // UIWindowScene: 0x106f0d840
=> 새로운 UIWindowScene과 UISceneSession이 생겼다
6. slide over로 띄운 앱을 날리면
SceneDelegate.swift > sceneWillResignActive(_:) // UIWindowScene: 0x106f0d840
SceneDelegate.swift > sceneDidEnterBackground(_:) // UIWindowScene: 0x106f0d840
7. split로 띄운 앱을 날리면
참고로 split 상태에서 하나를 날리면 없어지는 게 아니라 두개로 나눠져서 밀어버린 씬이 백그라운드 상태에 들어갑니다.
app switcher에 들어가보면 이렇게 두개로 나눠져있어요
SceneDelegate.swift > sceneWillResignActive(_:) // UIWindowScene: 0x106c00580
SceneDelegate.swift > sceneWillResignActive(_:) // UIWindowScene: 0x106c00440
SceneDelegate.swift > sceneDidEnterBackground(_:) // UIWindowScene: 0x106c00440
SeneDelegate.swift > sceneDidBecomeActive(_:) // UIWindowScene: 0x106c00580
split 모드에서 단일모드 전환할때 두 앱이 모두 resignActive 되었다가
날리는 한 앱은 background로 들어가고
단일모드로 선택된 한 앱은 다시 becomeActive 되나봅니다.
8. 단일 모드가 되버린 앱에서 홈버튼을 두번 눌러 app switcher로 가게 된다면
SceneDelegate.swift > sceneWillResignActive(_:) // UIWindowScene: 0x106c00580
9. app switcher에서 밑에 있는 앱(7번에서 백그라운드 상태로 만든 앱)을 날려서 없애면
아무것도 안불림
10. 방금 갓 백그라운드상태로 들어간 하나 남은 이 앱을 날려서 없애면
SceneDelegate.swift > sceneDidEnterBackground(_:) // UIWindowScene: 0x106c00580
AppDelegate.swift > applicationWillTerminate(_:)
Architecting Your App for Multiple Windows 영상에서
메모리 관리를 위해 시스템에서 앱을 날리면 이 메소드가 불리고
SceneDelegate.swift > sceneDidDisconnect(_:)
사용자가 앱을 날리면 이 메소드가 불린다고 했는데
AppDelegate.swift > application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>)
didDiscardSceneSessions 메소드 왜 안불리는 지 모르겠다 😭😭😭😭😭
'🍏 > iOS' 카테고리의 다른 글
[UIKeyCommand] UIKeyCommand로 키보드의 방향키(Up, Down, Left, Right)를 인지해보자 (0) | 2020.05.11 |
---|---|
[UINavigationItem] autolayout을 이용하여 navigation titleView 만들기 (0) | 2020.05.05 |
[App's Life Cycle] App-Based Life-Cycle과 Scene-Based Life-Cycle (2) | 2020.04.26 |
[UIScene] UIScene, UIWindowScene, UISceneSession 이란 무엇인가 (1) | 2020.04.26 |
[Multitasking] 아이패드 앱에 multitasking을 지원할 때, 고려해야할 점 (0) | 2020.04.24 |
- Total
- Today
- Yesterday
- Sketch 누끼
- 장고 URL querystring
- flutter build mode
- METAL
- drf custom error
- cocoapod
- Django Heroku Scheduler
- Dart Factory
- flutter dynamic link
- ipad multitasking
- Flutter Spacer
- PencilKit
- SerializerMethodField
- Django FCM
- 플러터 얼럿
- flutter deep link
- 구글 Geocoding API
- Flutter Text Gradient
- ribs
- flutter 앱 출시
- DRF APIException
- Python Type Hint
- 플러터 싱글톤
- Flutter getter setter
- github actions
- Flutter 로딩
- 장고 Custom Management Command
- Django Firebase Cloud Messaging
- Flutter Clipboard
- Watch App for iOS App vs Watch App
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |