Xcode11で作成したプロジェクトからSceneに関する機能をオミットする
Xcode11とUISceneとUIWindowにまつわるトラブルシュートに追われている。
個別のケースに分解してお届け。
背景
Xcode10で作成したプロジェクトをXcode11で開いた場合と、Xcode11で作成したプロジェクトで UIWindow
の振る舞いが異なった。この違いはプロジェクトがScene Based Lifecycleに対応しているかどうかに左右されることが分かった。
対応
簡単に言うと以下を実施すればよい。
-
AppDelegate
にwindow
を生やす - Info.plistから
Scene
に関する項目を取り除く -
AppDelegate
からScene
に関する項目を取り除く
これにより、iOS13で動かしてもAppDelegateを基本としたアプリのように動作する。(View Hierarchyを見るとUISceneは健在なので、互換性を保っているだけっぽい)
AppDelegate
にwindow
を生やす
Sceneに関連する物事をオミットしたあと、AppDelegateにwindowプロパティが無いとブラックアウトしてしまうので、生やす。
// AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
}
// AppDelegate.h
@interface AppDelegate: UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
@end
Info.plistからScene
に関する項目を取り除く
Info.plist から [Application Scene Manifest] の項目を取り除く。
ここまでの対応だけだと、iOS13でアプリを実行した場合に表示すべきStoryboardの情報が見つけられずブラックアウトする。
AppDelegate
からScene
に関する項目を取り除く
AppDelegateから、Scene Based Lifecycleに関するメソッドを取り除くことで、オミットが達成される。
具体的には、以下を取り除けば良い。
AppDelegate application:configurationForConnectionSceneSession:
AppDelegate application:didDiscardSceneSessions:
Author And Source
この問題について(Xcode11で作成したプロジェクトからSceneに関する機能をオミットする), 我々は、より多くの情報をここで見つけました https://qiita.com/yajamon/items/b72f79237ffb2fc9cdca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .