UIScene에서 탈퇴 선택(위임자/스위프트)iOS의 UI
저는 현재 Xcode 11 베타 5를 사용하고 있습니다.제 애플리케이션 내에서는 iOS 12 이하에서 정상적으로 실행됩니다.하지만 iOS 13에서는 다음을 사용하는 것처럼 보입니다.UIScene
은 내 이 아무것도.이것은 내 앱이 아무것도 하지 못하게 합니다.
새로 설치할 때 앱이 시작되면 사용자가 동의해야 하는 약관이 있습니다.동의한 후에는 로드 화면으로 이동하여 기본 보기로 이동합니다.제가 올린 스크린샷에서 현재 전경 뒤의 뷰는 스플래시 로딩 화면입니다.
조만간 애플리케이션 전반에 걸쳐 다중 뷰 씬(scene) 지원을 추가하는 방안을 검토할 예정이지만, 지금은 우선순위가 더 높은 작업을 수행해야 합니다.
앱 대상의 일반 설정에서 "여러 창 지원"이 이미 비활성화되어 있습니다.또한 info.plist 파일에서 Enable Multiple Windowss를 NO로 설정했습니다.
지금까지 아무 것도 효과가 없었습니다.기본적으로 여러 창과 UISScene/Swift를 선택/사용하지 않도록 설정합니다.iOS 10-12에서 원래 동작을 복원하는 UI입니다.iOS 13에서 이것이 가능한가요 아니면 업데이트 해야 하나요?
업데이트:
다음은 보기 디버그 계층의 스크린샷입니다.왼쪽은 iOS 12, 오른쪽은 iOS 13입니다.Info.plist 또는 씬(scene) 위임 클래스나 메서드에 아무것도 추가하지 않고 왜 다른가요?거의 Xcode 11의 기존 생산 준비 코드로 실행했습니다.
iOS 13 이상에서 앱을 실행할 때 장면을 사용하는 것을 수용해야 하지만 iOS 12 이전 버전을 지원하면서도 완전히 종료할 수 있습니다.
Info.plist에서 "Application Scene Manifest" 항목을 완전히 제거합니다.
씬(scene) 위임 클래스가 있으면 해당 클래스를 제거합니다.
앱 대리자에 장면 관련 메서드가 있으면 해당 메서드를 제거합니다.
경우 을 합니다.
var window: UIWindow?
당신의 앱 대리인에게.
이제 앱은 앱 대리자만 사용해야 하며 iOS 13에서는 iOS 12와 동일한 수명 주기를 가져야 합니다.
참고: 이 중 Swift 또는 Swift에만 해당되는 것은 없습니다.UI.
이것은 제가 직면한 문제이기도 합니다. 여기에는 몇 가지 시나리오가 있습니다.
- Xcode 11에서 기존 앱을 작업하려면 열기만 하면 됩니다.내 모든 앱이 가지고 있으며, 없음
SceneDelegate
파일 또는 변경 사항AppDelegate
스토리보드나. - iOS 13을 대상으로 하는 새로운 앱을 만들고 싶다면, "Use Swift"를 떠나면서 만들기만 하면 됩니다.UI" 확인란을 선택하지 않았습니다.
하지만 저는 당신이 제가 약 일주일 전에 했던 세 번째 시나리오를 직면하고 있는지 궁금합니다.iOS 13 이전을 대상으로 한 새로운 'UIKit 앱 만들기. (실제로 iOS 9를 대상으로 했습니다!)
예, 당신의 템플릿은 15개의 오류(베타 5 기준)를 제공합니다.SceneDelegate
파일/클래스다행히 Xcode는 하나를 제외한 모든 것을 자동으로 수정할 수 있도록 도와줄 것입니다.
마지막 하나는 다음의 일부인 한 줄을 추가하는 것입니다.SceneDelegate
클래스 하지만 안타깝게도 애플은 그것을 제외했습니다.AppDelegate
클래스 - 12개 이상이 지난 후.@available(iOS 13.0, *)
절은 당신이 선택하지 않았다는 것을 의미합니다.SceneDelegate
iOS 12를 실행하고 무엇을 추측합니까?그것은 거기에 없습니다.ApDelegate
!
AppDelegate에 추가합니다.
var window: UIWindow?
그 시점에서, 당신은 달리기를 해야 합니다.UIKit
iOS 12 및 이전 버전을 대상으로 하는 앱입니다.
저는 dfd의 답변을 사용하여 이것을 작동시키지만, 제 앱이 Objective-C에 있기 때문에 한 가지 변경을 해야 했습니다.
목표-C에 다음과 같이 입력합니다.
@property (strong, nonatomic) UIWindow *window;
AppDelegate.h(.m이 아님)에서
알았어요. 그래서 알아냈어요.Apple의 새로운 기본 카드 프레젠테이션 스타일의 iOS 13의 변경으로 인해 내 스토리보드에서 스플래시 화면에서 사용자 지정 흐름 탐색 컨트롤러로 segue가 새 프레젠테이션으로 기본 설정되었습니다(아래 스크린샷 참조).
제가 그것을 고친 방법은 이전의 라이프사이클을 기본으로 하는 이전의 스타일로 돌아가는 것이었습니다.아래 스크린샷을 참조하십시오.
왜 그런지는 모르겠지만, 애플리케이션에서 이것을 일으킨 유일한 장소였기 때문입니다(꽤 큰 앱이므로 확실히 하기 위해 모든 스토리보드를 살펴봐야 합니다).
Xcode 12 - Swift 5.3 - iOS 14
Xcode 12 이후 그리고 Swift 5.3의 도움으로 그리고.@main
당신은 없는 멀티 플랫폼 앱을 가질 수 있습니다.SceneDelegate
또는 이벤트AppDelegate
다음과 같은 간단한 파일만 있습니다.
import SwiftUI
@main
struct MyMultiPlatformApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
선택을 취소하려고 할 때 장면을 찾을 수 없는 문제가 info.plist 파일에 있을 수 있습니다.
만약 당신이 이것을 가지고 있다면.info.plist
.
Scene Configuration
Application Session Role
Item 0 (Default Configuration)
Delegate Class Name : SceneDelegate
Storyboard Name : Main
그럴 것 같네요.
Scene Configuration
Application Session Role
Item 0 (Default Configuration)
Delegate Class Name : $(PRODUCT_MODULE_NAME).SceneDelegate
Storyboard Name : Main
언급URL : https://stackoverflow.com/questions/57467003/opt-out-of-uiscenedelegate-swiftui-on-ios
'programing' 카테고리의 다른 글
.gitignore를 사용하지 않고 추적되지 않은 파일이 표시되지 않도록 'git status'를 어떻게 해야 합니까? (0) | 2023.05.04 |
---|---|
날짜별 Java/MongoDB 쿼리 (0) | 2023.05.04 |
MongoDB 셸에서 실행 중인 쿼리를 중단하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
Angular를 사용하는 이유JS 선택에 빈 옵션이 포함되어 있습니까? (0) | 2023.05.04 |
'Id' 요소가 클래스의 어떤 필드나 속성과도 일치하지 않습니다. (0) | 2023.05.04 |