layar hitam ketika saya menjalankan aplikasi iOS saya

12

Saya mencoba membuat aplikasi iOS baru di Xcode. Saya membuat storyboard utama dan menambahkan label pada ViewController saya. Ketika saya menjalankan aplikasi saya, pertama itu menunjukkan label dan kemudian menjadi layar hitam tanpa kesalahan.

Saya sedang mengerjakan Xcode 11 (Swift 5) dan pesan ini muncul di keluaran:

[SceneConfiguration] Konfigurasi Info.plist "Konfigurasi Default" untuk UIWindowSceneSessionRoleAplikasi berisi kunci UISceneDelegateClassName, tetapi tidak dapat memuat kelas dengan nama "gina.SceneDelegate"

Saya tidak tahu di mana kesalahan saya.

layar hitam saat berjalan

jeena azeez
sumber
silakan kirim cuplikan kode
Mark Loyman
Saya pikir Anda menghapus kelas SceneDelegate Anda dari proyek Anda
Alfi
Banyak jawaban di bawah ini sepertinya melewatkan inti kesalahan dan menjelaskan perbaikan yang tidak relevan dengan kesalahan sebenarnya yang dimaksud. Dalam kasus saya, saya baru saja lupa untuk menambahkan SceneDelegateke target saya dan mencentang kotak memperbaikinya.
Wayne

Jawaban:

32

iOS 13

Hanya jika targetnya 13 atau lebih besar.

SceneDelegatetidak didukung sebelum iOS 13 . Jika Anda ingin menggunakan SceneDelegatedan juga ingin mendukung iOS sebelum iOS 13 maka Anda harus menambahkan beberapa perubahan pada proyek Anda.

  1. Tambahkan atribut ketersediaan ke seluruh kelas dalam file SceneDelegate.swift .
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
   ...
}
  1. File AppDelegate.swift memiliki dua SceneDelegatemetode baru . Tambahkan atribut ketersediaan ke mereka juga.
@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. Terakhir, tambahkan UIWindowobjek di AppDelegate.swift .
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 dan sebelumnya

AppDelegatemembutuhkan UIWindowproperti. iOS 13 digunakan SceneDelegatedalam proyek-proyek baru. Tentukan UIWindowobjek dan hapus file SceneDelegate.swift .

Jika Anda telah menghapus SceneDelegatedari proyek, maka Anda harus menghapus kamus Application Scene Manifest dari Info.plist .

Info.plist

Somoy Das Gupta
sumber
Hebat, Terima kasih
Mohammad Razipour
1

Anda perlu menginisialisasi jendela seperti ini:

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

dan tambahkan ini di 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>

Itu semua yang perlu Anda lakukan.

Munzareen Atique
sumber
Saya memiliki masalah yang sama, awalan $(PRODUCT_MODULE_NAME).menyelesaikan masalah saya.
Sean Howell