#結論
エラーも出ないのに、UIWindowがらみのプログラムが動かない時には、
Info.plist
の中にApplication Scene Manifest
という項目を削除してみてください。
この項目は、Xcode11でプロジェクトを新規作成すると自動的に作成される項目のようです。
私の場合、特にSceneの設定はしてないつもりでしたので、おそらくプロジェクトを新規作成した段階でScene対応が有効になっていた
ということになります。
SceneとはアプリのUIを表示するための窓の事です。iPadでは以前から複数のアプリを同時に分割表示する事ができましたが、同一のアプリを同時に複数表示する事はできませんでした。iOS13からはこれが可能になります。この時、分割されている画面1つがSceneに対応します。同一のアプリが複数表示されているときは、内部的にアプリケーションとしては1つのプロセスだけが起動していますが、Sceneオブジェクトは複数生成されており、ユーザはそれぞれの画面ごとに独立した画面遷移を利用できるというしくみです。
(引用: https://qiita.com/omochimetaru/items/31df103ef98a9d84ae6b)
#今回起こった問題(ご参考に)
初回起動時に、アプリのチュートリアルページを表示するため、
AppDelegate.swiftにて以下のようなコードを記述しました。
しかし、起動しませんでした。
コンパイルエラーも起こらず。
エラーがないということは、他のコードによって制限がかけられているのだろうと察しました。(原因が上述した内容でした。)
※OnboardingViewController = チュートリアルページを表示するコントローラ。
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
if launchedBefore != true {
print("first launch.")
//起動を判定するlaunchedBeforeという論理型のKeyをUserDefaultsに用意
UserDefaults.standard.set(true, forKey: "launchedBefore")
let introViewController = UIStoryboard.init(name: "Main", bundle: nil)
.instantiateViewController(withIdentifier: "onBoarding") as! OnboardingViewController
let navigationController = UINavigationController(rootViewController: introViewController)
self.window?.rootViewController = navigationController
} else {
print("Not first launch.")
//動作確認のために1回実行ごとに値をfalseに設定し直す
UserDefaults.standard.set(false, forKey: "launchedBefore")
}
return true
}
#引用文献(スペシャルサンクス)