【SwiftUI】Life Cycle SwiftUI App 뭐야 이거,,
아리키나, 사토입니다.
그래, 나야.
Xcode12부터, Life Cycle: SwiftUI App이 증가하고 있었다.
최근 Xcode를 12.1로 업데이트했습니다.
최근 SwiftUI를 만지지 마라. 뭔가 만들어 보자.
앱을 만들려고 했습니다.
본 적이없는 항목이있었습니다.
Life Cycle은 항목이 없어!
음, 선택할 수있는 것은
SwiftUI App! 그래! 몰라! 너에게 결정했다!
환경
초기 파일 구성
'AppDelegate.Swift', 'SceneDelegate.swift'가 언제나 진좌하고 있지만
평소 너희들은 없다. . 「앱명 App.swift」가 있다. .
매우 간단하고 매우 좋아하지만.
소총주기는 어떻게 관리합니까?
기동시에, 〇〇 처리하고,
백그라운드로 갈 때, □□ 처리하고, 등 잘 Appdelegate에 신세를 지고 있었지만
사라졌습니다.
어떻게 할 것인가, 조사해 보았습니다.
ScenePhase
몰랐던 것만으로, ScenePhase 에 확실히 기재되고 있었습니다.
@Environment (.scenePhase)를 추가하고 상태를 얻는 것 같습니다.
@Environment(\.scenePhase) private var scenePhase
WindowGroup에 .onChange를 추가하고 아래와 같이 실행해 보겠습니다.
struct MyAppApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
NSLog("・scenePhase : active")
case .inactive:
NSLog("・scenePhase : inactive")
case .background:
NSLog("・scenePhase : background")
@unknown default:
NSLog("・scenePhase : @unknown")
}
}
}
}
부팅 전용
2020-11-11 15:07:19.852837+0900 MyApp[65073:4732940] ・scenePhase : active
시작 후 홈 화면으로 돌아가기
2020-11-11 15:07:19.852837+0900 MyApp[65073:4732940] ・scenePhase : active
2020-11-11 15:11:43.979548+0900 MyApp[65073:4732940] ・scenePhase : inactive
2020-11-11 15:11:44.701499+0900 MyApp[65073:4732940] ・scenePhase : background
1, 기동 후, 홈 화면으로 돌아온다
2, 홈 화면에서 아이콘 탭
2020-11-11 15:07:19.852837+0900 MyApp[65073:4732940] ・scenePhase : active
2020-11-11 15:11:43.979548+0900 MyApp[65073:4732940] ・scenePhase : inactive
2020-11-11 15:11:44.701499+0900 MyApp[65073:4732940] ・scenePhase : background
2020-11-11 15:12:52.412940+0900 MyApp[65073:4732940] ・scenePhase : inactive
2020-11-11 15:12:52.720381+0900 MyApp[65073:4732940] ・scenePhase : active
뭐, 이것이라도 괜찮으면 괜찮지만. . .
UIApplicationDelegateAdaptor를 사용하는 방법도 있습니다.
다음을 구현하고 "didFinishLaunchingWithOptions"를 구현합니다.
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
NSLog("・\(#function)")
return true
}
}
부팅 전용
2020-11-11 15:16:35.748372+0900 MyApp[68348:4752272] ・application(_:didFinishLaunchingWithOptions:)
2020-11-11 15:16:35.780670+0900 MyApp[68348:4752272] ・scenePhase : active
음. 평소처럼 ^^
다음으로 didFinishLaunchingWithOptions에서 NotificationCenter를 작성하여 Log를 내 보았습니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
NSLog("・\(#function)")
NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { _ in
NSLog("・didBecomeActiveNotification")
}
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: .main) { _ in
NSLog("・didEnterBackgroundNotification")
}
NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: .main) { _ in
NSLog("・willResignActiveNotification")
}
NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: .main) { _ in
NSLog("・willEnterForegroundNotification")
}
NotificationCenter.default.addObserver(forName: UIApplication.willTerminateNotification, object: nil, queue: .main) { _ in
NSLog("・willTerminateNotification")
}
return true
}
부팅 전용
2020-11-11 16:11:55.657872+0900 MyApp[86873:4856069] ・application(_:didFinishLaunchingWithOptions:)
2020-11-11 16:11:55.669768+0900 MyApp[86873:4856069] ・scenePhase : active
2020-11-11 16:11:55.670455+0900 MyApp[86873:4856069] ・willEnterForegroundNotification
2020-11-11 16:11:55.670839+0900 MyApp[86873:4856069] ・didBecomeActiveNotification
시작 후 홈 화면으로 돌아가기
2020-11-11 16:11:55.657872+0900 MyApp[86873:4856069] ・application(_:didFinishLaunchingWithOptions:)
2020-11-11 16:11:55.669768+0900 MyApp[86873:4856069] ・scenePhase : active
2020-11-11 16:11:55.670455+0900 MyApp[86873:4856069] ・willEnterForegroundNotification
2020-11-11 16:11:55.670839+0900 MyApp[86873:4856069] ・didBecomeActiveNotification
2020-11-11 16:12:40.028331+0900 MyApp[86873:4856069] ・scenePhase : inactive
2020-11-11 16:12:40.028830+0900 MyApp[86873:4856069] ・willResignActiveNotification
2020-11-11 16:12:41.232107+0900 MyApp[86873:4856069] ・scenePhase : background
2020-11-11 16:12:41.256543+0900 MyApp[86873:4856069] ・didEnterBackgroundNotification
1, 기동 후, 홈 화면으로 돌아온다
2, 홈 화면에서 아이콘 탭
// App起動
2020-11-11 16:11:55.657872+0900 MyApp[86873:4856069] ・application(_:didFinishLaunchingWithOptions:)
2020-11-11 16:11:55.669768+0900 MyApp[86873:4856069] ・scenePhase : active
2020-11-11 16:11:55.670455+0900 MyApp[86873:4856069] ・willEnterForegroundNotification
2020-11-11 16:11:55.670839+0900 MyApp[86873:4856069] ・didBecomeActiveNotification
// バックグラウンドへ
2020-11-11 16:12:40.028331+0900 MyApp[86873:4856069] ・scenePhase : inactive
2020-11-11 16:12:40.028830+0900 MyApp[86873:4856069] ・willResignActiveNotification
2020-11-11 16:12:41.232107+0900 MyApp[86873:4856069] ・scenePhase : background
2020-11-11 16:12:41.256543+0900 MyApp[86873:4856069] ・didEnterBackgroundNotification
// フォアグラウンドへ
2020-11-11 16:13:29.154073+0900 MyApp[86873:4856069] ・scenePhase : inactive
2020-11-11 16:13:29.154485+0900 MyApp[86873:4856069] ・willEnterForegroundNotification
2020-11-11 16:13:29.466073+0900 MyApp[86873:4856069] ・scenePhase : active
2020-11-11 16:13:29.467123+0900 MyApp[86873:4856069] ・didBecomeActiveNotification
구현에 따라 지금까지와 같이 할 수 있어서 좋았다.
앞으로
ScenePhase만으로도, 대부분은, 대응을 할 수 있을 것 같습니다만, 세세하게 나누고 싶은 경우는,
지금까지와 같이 AppDelegate를 사용하는 것이 무난할 것이라고 생각합니다.
아직, 서둘러, SwiftUIApp에 대응하는 일도 없고, UIKit AppDelegate로 만들면 아무것도 신경쓰는 것은 없는 것입니다만, 신경이 쓰여 버렸기 때문에! !
오늘은 여기까지! !
Reference
이 문제에 관하여(【SwiftUI】Life Cycle SwiftUI App 뭐야 이거,,), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SSato0227/items/f453f7eb97a5603ae4a5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)