현재 Xcode 11 Beta 5를 사용하고 있습니다. 내 응용 프로그램 내에서 iOS 12 이하에서 제대로 실행됩니다. 그러나 iOS 13에서는 기본적으로 UIScene을 사용하는 것처럼 보입니다. 이로 인해 내 앱이 아무것도하지 않습니다.
앱이 새로 설치 될 때 실행될 때 사용자가 동의해야하는 이용 약관이 있습니다. 동의하면 로딩 화면으로 이동하여 메인 뷰로 이동합니다. 내가 게시 한 스크린 샷에서 현재 전경의보기 뒤에는 스플래시 로딩 화면이 있습니다.
조만간 애플리케이션 전반에 걸쳐 다중 뷰 씬 지원을 추가하는 방법을 살펴 보 겠지만 지금은 작업해야 할 우선 순위가 더 높습니다.
앱 대상의 일반 설정에서 “여러 창 지원”이 이미 비활성화되어 있습니다. 또한 info.plist 파일에서 Enable Multiple Windows를 NO로 설정했습니다.
지금까지는 아무것도 효과가 없었습니다. 기본적으로 iOS 10-12에서 원래 동작을 복원하기 위해 여러 창 및 UIScene / SwiftUI를 옵트 아웃 / 비활성화하고 싶습니다. iOS 13에서 가능합니까? 아니면 업데이트해야합니까?
최신 정보:
다음은 뷰 디버그 계층 구조의 스크린 샷입니다. 왼쪽은 iOS 12이고 오른쪽은 iOS 13입니다. Info.plist 나 장면 델리게이트 클래스 나 메서드에 아무것도 추가하지 않고 다른 이유는 무엇입니까? Xcode 11의 기존 프로덕션 준비 코드에서 거의 실행했습니다.
답변
앱이 iOS 13 이상에서 실행될 때 장면 사용 을 수용 해야 하지만 iOS 12 또는 이전 버전을 계속 지원하면서 완전히 옵트 아웃 할 수 있습니다.
-
Info.plist에서 “Application Scene Manifest”항목을 완전히 제거합니다.
-
장면 델리게이트 클래스가 있으면 제거하십시오.
-
앱 대리자에 장면 관련 메서드가있는 경우 해당 메서드를 제거합니다.
-
누락 된 경우 속성
var window: UIWindow?
을 앱 대리자에 추가합니다 .
이제 앱은 앱 대리자 만 사용해야하며 iOS 13에서는 iOS 12와 동일한 수명주기를 가져야합니다.
참고 :이 중 어느 것도 Swift 또는 SwiftUI에만 해당되지 않습니다.
답변
답변을 사용하여 댓글보다 더 나은 형식을 지정하십시오. (댓글을 남겨 주시면 편집하겠습니다.)
이것은 내가 직면 한 문제이며 여기에 몇 가지 시나리오가 있습니다.
- Xcode 11 의 기존
UIKit
앱에서 작업하려면 간단히 열면 정상적으로 작동합니다. 내 모든 애플 리케이션과 함께,이 어떤SceneDelegate
파일도를 변경AppDelegate
또는 스토리 보드. - iOS 13을 대상으로 하는 새
UIKIT
앱 을 만들려면 “SwiftUI 사용”확인란을 선택하지 않은 상태에서 만들기 만하면됩니다.
하지만 저는 여러분이 세 번째 시나리오에 직면하고 있는지 궁금합니다. 제가 약 1 주일 전에 한 시나리오입니다. iOS 13 이전 버전을 대상으로 하는 새로운`UIKit 앱 만들기 . (실제로 iOS 9를 타겟팅했습니다!)
예, 템플릿은 SceneDelegate
파일 / 클래스 와 함께 15 개의 오류 (베타 5 기준)를 제공합니다 . 다행히 Xcode는 하나를 제외한 모든 것을 자동 수정하는 데 도움이됩니다.
마지막은 SceneDelegate
클래스의 일부인 한 줄을 추가하는 것입니다. 하지만 불행히도 Apple 은 클래스에서 제외했습니다 AppDelegate
. 12 개 이상의 @available(iOS 13.0, *)
절 이후에 SceneDelegate
iOS 12를 실행 하는 경우 옵트 아웃했고 무엇을 추측할까요? 그건 아니 거기 ApDelegate
!
이것을 AppDelegate에 추가하십시오.
var window: UIWindow?
이 시점에서 UIKit
iOS 12 및 이전 버전을 대상으로 하는 실행중인 앱 이 있어야합니다 .
답변
좋아 그래서 알아 냈어. Apple의 새로운 기본 카드 프레젠테이션 스타일의 iOS 13 변경으로 인해 스토리 보드에서 스플래시 화면에서 사용자 지정 흐름 탐색 컨트롤러로 기본적으로 새 프레젠테이션이 설정되었습니다 (아래 스크린 샷 참조).
내가 그것을 고친 방법은 이전 수명주기를 기본으로 한 이전 스타일로 돌아가는 것이 었습니다. 아래 스크린 샷을 참조하십시오.
왜 그랬는지 잘 모르겠습니다. 내 애플리케이션에서이 문제를 일으킨 유일한 장소 였기 때문입니다 (꽤 큰 앱이므로 확인하기 위해 모든 스토리 보드를 살펴 보는 데 시간을 할애해야합니다).
답변
dfd의 답변을 사용하여이 작업을 수행했지만 내 앱이 Objective-C에 있기 때문에 한 가지 변경해야했습니다.
Objective-C에서는
@property (strong, nonatomic) UIWindow *window;
AppDelegate.h (.m이 아님)
답변
Xcode 11-Swift 5.3
엑스 코드 (11) 이후 및 및 스위프트 5.3의 도움으로 @main
, 당신은 어떤이있는 다중 응용 프로그램 할 수 있습니다 SceneDelegate
또는 이벤트를 AppDelegate
. 다음과 같은 간단한 파일 만 있습니다.
import SwiftUI
@main
struct MyMultiPlatformApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}