[ios] iOS 애플리케이션을 실행할 때 검은 화면

Xcode에서 새로운 iOS 앱을 만들려고합니다. 메인 스토리 보드를 만들고 ViewController에 레이블을 추가했습니다. 응용 프로그램을 실행하면 먼저 레이블을 표시 한 다음 오류없이 화면이 검은 색이됩니다.

Xcode 11 (Swift 5)에서 작업 중이며이 메시지가 출력에 나타납니다.

[SceneConfiguration] UIWindowSceneSessionRoleApplication에 대한 Info.plist 구성 “기본 구성”에 UISceneDelegateClassName 키가 포함되었지만 이름이 “gina.SceneDelegate”인 클래스를로드 할 수 없습니다.

내 실수가 어디에 있는지 모르겠습니다.

실행할 때 검은 화면



답변

iOS 13

대상이 13 이상인 경우에만 해당됩니다.

SceneDelegateiOS 13 이전에는 지원되지 않습니다 . iOS 13 이전의 iOS 를 사용 SceneDelegate하고 지원 하려면 프로젝트에 일부 변경 사항을 추가해야합니다.

  1. SceneDelegate.swift 파일 의 전체 클래스에 가용성 속성을 추가 하십시오.
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. AppDelegate.swift 파일에는 두 가지 새로운 SceneDelegate방법이 있습니다. 그들에게 가용성 속성을 추가하십시오.
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
  ...
}

@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
  ...
}
  1. 마지막으로 AppDelegate.swiftUIWindow객체를 추가하십시오 .
class AppDelegate: UIResponder, UIApplicationDelegate {

    //Add this line
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    ...
}

iOS 12 및 이전

AppDelegateUIWindow재산이 필요합니다 . iOS 13SceneDelegate새로운 프로젝트에서 사용 합니다. UIWindow객체를 지정하고 SceneDelegate.swift 파일을 제거 하십시오.

당신은을 제거한 경우 SceneDelegate프로젝트에서, 당신은 제거해야합니다 응용 프로그램 장면 매니페스트 에서 사전 의 Info.plist를 .

Info.plist


답변

다음과 같이 창을 초기화해야합니다.

let window = UIWindow(windowScene: scene as! UIWindowScene)

info.plist에 추가하십시오.

<key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <true/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UILaunchStoryboardName</key>
                    <string>LaunchScreen</string>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                </dict>
            </array>
        </dict>
    </dict>

그게 당신이해야 할 전부입니다.


답변