programing

UIScene에서 탈퇴 선택(위임자/스위프트)iOS의 UI

lovejava 2023. 5. 4. 17:52

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, *)절은 당신이 선택하지 않았다는 것을 의미합니다.SceneDelegateiOS 12를 실행하고 무엇을 추측합니까?그것은 거기에 없습니다.ApDelegate!

AppDelegate에 추가합니다.

var window: UIWindow?

그 시점에서, 당신은 달리기를 해야 합니다.UIKitiOS 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