1
1

More than 3 years have passed since last update.

UIWindowが上手く動いてくれない時に

Last updated at Posted at 2020-01-10

#結論

エラーも出ないのに、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 = チュートリアルページを表示するコントローラ。

AppDelegate.swift

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
    }

#引用文献(スペシャルサンクス)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1