1. ホーム
  2. swift

[解決済み] iOSのUISceneDelegate/SwiftUIからオプトアウトする。

2022-05-02 07:07:06

質問

現在、Xcode 11 Beta 5を使用しています。私のアプリケーション内では、iOS 12以下では問題なく動作します。しかし、iOS 13では、それが UIScene をデフォルトで使用します。このため、私のアプリは何もできない状態になっています。

新規インストール時にアプリを起動すると、ユーザーが同意しなければならない利用規約があります。同意後、ローディング画面が表示され、メインビューに誘導されます。投稿したスクリーンショットでは、手前にある現在のビューの後ろにあるビューが、スプラッシュローディング画面です。

近々、アプリケーション全体で複数のビューのシーンをサポートすることを検討する予定ですが、今はもっと優先順位の高いものに取り組む必要があります。

アプリのターゲットの一般設定で、"Support multiple windows"がすでに無効になっています。また、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? をアプリのデリゲートに追加してください。

アプリはapp delegateのみを使用するようになり、iOS 13ではiOS 12と同じライフサイクルになるはずです。

注意 このどれもがSwiftやSwiftUIに特化したものではありません。