Saat ini saya menggunakan Xcode 11 Beta 5. Dalam aplikasi saya, ini berjalan dengan baik di iOS 12 dan di bawahnya. Namun, di iOS 13 sepertinya menggunakan UIScene
default. Ini menyebabkan aplikasi saya tidak melakukan apa pun.
Saat aplikasi diluncurkan pada penginstalan baru, ada persyaratan dan ketentuan yang harus diterima pengguna. Setelah setuju, mereka pergi ke layar pemuatan yang kemudian mengarahkan mereka ke tampilan utama. Pada tangkapan layar yang saya posting, tampilan di belakang yang sekarang di latar depan adalah layar pemuatan splash.
Kami akan segera mempertimbangkan untuk menambahkan beberapa tampilan pemandangan di seluruh aplikasi, tetapi saat ini kami memiliki hal-hal dengan prioritas lebih tinggi yang perlu kami kerjakan.
"Mendukung banyak jendela" sudah dinonaktifkan di pengaturan Umum target aplikasi. Juga saya telah Mengaktifkan Beberapa Windows diatur ke NO di file info.plist.
Sejauh ini tidak ada yang benar-benar berhasil. Pada dasarnya saya ingin memilih keluar / menonaktifkan banyak jendela dan UIScene / SwiftUI untuk mengembalikan perilaku asli di iOS 10-12. Apakah ini mungkin di iOS 13 atau kita harus memperbaruinya?
Memperbarui:
Berikut adalah tangkapan layar dari hierarki tampilan debug. Sisi kiri adalah iOS 12, sisi kanan pada iOS 13. Tanpa menambahkan apa pun ke Info.plist atau kelas atau metode delegasi adegan apa pun, mengapa berbeda? Cukup banyak menjalankannya dalam kode siap produksi yang ada di Xcode 11.
viewWill|DidAppear
tidak disebut sama di iOS 13 saat menutup pengontrol tampilan yang disajikan, misalnya. Tambahkan banyak pesan debugging siklus hidup dan breakpoints dan bandingkan aliran antara iOS 12 dan 13 dan lihat perbedaannya.Jawaban:
Meskipun Anda harus menggunakan scene saat aplikasi Anda dijalankan di bawah iOS 13 dan lebih baru, Anda dapat memilih keluar sepenuhnya saat Anda masih mendukung iOS 12 atau lebih lama.
Hapus sepenuhnya entri "Application Scene Manifest" dari Info.plist.
Jika ada kelas delegasi adegan, hapus itu.
Jika ada metode terkait pemandangan dalam delegasi aplikasi Anda, hapus metode tersebut.
Jika tidak ada, tambahkan properti
var window: UIWindow?
ke delegasi aplikasi Anda.Aplikasi Anda sekarang hanya boleh menggunakan app delegate dan di bawah iOS 13 harus memiliki siklus hidup yang sama seperti iOS 12.
Catatan: Tidak ada yang khusus untuk Swift atau SwiftUI.
sumber
AppDelegate
itu yang saya tujukan. Apakah itu secara otomatis kembali dalam proses yang Anda jelaskan ini? (Saya agak menyukai jawaban Anda lebih baik, karena sama sekali mengabaikan adegan.)Menggunakan jawaban untuk mudah-mudahan memformat sesuatu dengan lebih baik daripada komentar. (Jangan ragu untuk berkomentar dan saya akan mengedit.)
Ini adalah sesuatu yang saya hadapi juga, dan ada beberapa skenario yang dimainkan di sini:
UIKit
di Xcode 11, cukup buka dan itu akan berfungsi dengan baik. Semua aplikasi saya memiliki, tanpaSceneDelegate
file atau perubahan apa punAppDelegate
atau storyboard.UIKIT
menargetkan iOS 13 , cukup buat sambil memastikan Anda membiarkan kotak centang "Gunakan SwiftUI" tidak dicentang.Tetapi saya bertanya-tanya apakah Anda menghadapi skenario ketiga - yang saya lakukan sekitar seminggu yang lalu. Membuat `aplikasi UIKit baru yang menargetkan sesuatu yang lebih awal dari iOS 13 . (Saya sebenarnya menargetkan iOS 9!)
Ya, template Anda akan memberikan 15 kesalahan (pada beta 5), bersama dengan file
SceneDelegate
file / kelas. Untungnya, Xcode akan membantu Anda mengoreksi semua kecuali satu secara otomatis.Yang terakhir adalah menambahkan satu baris yang merupakan bagian dari
SceneDelegate
kelas tetapi sayangnya Apple meninggalkannya di luarAppDelegate
kelas - yang setelah lebih dari selusin@available(iOS 13.0, *)
klausul berarti Anda telah memilih untuk tidakSceneDelegate
menjalankan iOS 12 dan coba tebak? Ini tidak ada diApDelegate
!Tambahkan ini ke AppDelegate Anda:
Pada titik itu, Anda harus memiliki
UIKit
aplikasi yang sedang berjalan yang ditargetkan untuk iOS 12 dan sebelumnya.sumber
SceneDelegate
dan pengujian mengatakan (a) mereka bekerja di iOS 13 dan (b) mereka tidak mendukung banyak jendela sama sekali, hanya membagi tampilan antara dua aplikasi. (Saya juga tidak mendukung seret-dan-lepas.) Apakah ada hal lain yang terjadi di pihak Anda?SceneDelegate
, tidakSwiftUI
, tidak ada kemampuan untuk membuat banyak contoh aplikasi iOS 9+ saya. Performanya sama seperti biasanya - semuanya adalahCoreImage
filter kustom yang diperbarui secara real-time - dan, menurut saya? Jika ada beberapa masalah terkait OS yang terkait dengan adegan dalam hierarki tampilan, ini diperdebatkan jika tidak mendukung adegan. (Dan untuk menyelesaikan, ya, saya masih agak khawatir. Tapi ini juga beta 5.) Semoga Anda memiliki cadangan yang bagus yang dapat mereproduksi apa yang saya lihat.Saya mendapatkan ini untuk bekerja menggunakan jawaban dfd, tetapi karena aplikasi saya ada di Objective-C, saya harus membuat satu perubahan:
Di Objective-C, Anda ingin meletakkan
di AppDelegate.h (bukan di .m)
sumber
Oke jadi saya menemukan jawabannya. Karena perubahan di iOS 13 dari gaya presentasi kartu default baru Apple, di storyboard saya beralih dari layar splash ke pengontrol navigasi aliran kustom saya yang default ke presentasi baru (lihat tangkapan layar di bawah).
Cara saya memperbaikinya adalah kembali ke gaya lama yang default ke siklus hidup lama. Lihat gambar di bawah.
Tidak yakin mengapa itu terjadi, karena ini adalah satu-satunya tempat di aplikasi saya yang menyebabkan ini (aplikasi yang cukup besar jadi saya harus meluangkan waktu untuk memeriksa semua storyboard untuk memastikannya).
sumber
Xcode 12 - Swift 5.3 - iOS 14
Sejak Xcode 12 dan dengan bantuan Swift 5.3 dan
@main
, Anda dapat memiliki aplikasi multiplatform yang tidak memilikiSceneDelegate
atau acaraAppDelegate
. Hanya akan ada file sederhana seperti:sumber