はじめに
今までアプリ起動から画面が表示されるまでの過程を全く意識せずにコードを書いていました。アプリ開発を行うにあたって、アプリ起動の仕組みを少しでも理解したほうが良いと思い今回のタイトルについて調べてみました。
何を書いたか
UIKitを使用したiOSアプリの起動の仕組みをざっくりと書きました。
内容的には参考にさせていただいた、
『親切すぎるiPhoneアプリ開発の本』に載っている内容です。
あまりアプリ起動の仕組みに触れている本が見つからなかったのですが、
この本では詳しく載っておりとても参考になりました。
ただ2015年出版の本なので、現在との差分にも触れながら、
かつ自分の言葉で噛み砕いてアプリ起動の仕組みをアウトプットしてみたいと思い、本記事を書きました。
対象者
iOSアプリ開発初心者向けです。
アプリ起動の仕組みをざっくりイメージしたい人向け
詳細理解については別の記事や本を参考にしていただけたらと思います。
アプリ起動の流れ
では、本題に入りたいと思います。
登場人物
起動の流れを説明する前に、まず簡単にこの後でてくる用語について説明します。あとで戻ってきてみてもらってもいいと思います。
・UIApplecation
アプリの全体管理者的な存在
アプリケーションの起動、イベントループ(画面のタッチなどのイベントを見張っているところ)やアプリケーションのライフサイクルを管理します。
・AppDelegate
アプリケーションのライフサイクルイベントを処理するメソッドを提供する。
アプリの起動や終了時に実行される処理などを実装することができる
・SceneDelegate
iOS13以降で導入されたマルチタスク対応のアプリケーションで使用されるオブジェクト
UIWindowのインスタンスを作る、シーン(アプリケーションの画面の切り替えに使用される単位)が作成されたり、アクティブになったり、非アクティブになったりする際の処理を実装できる
・UIWindow
iphoneの画面表示を管理するオブジェクト
このUIWindowの上にViewControllerのビューが追加され表示される仕組み。
起動の流れ
-
アプリ起動
アプリが起動されるとイベントループが実行され、UIApplicationがオブジェクト化されます。
UIApplicationが起動の準備をしてくれます。 -
AppDelegateに追加処理がないかを確認
アプリの起動準備ができると、UIApplicationがAppDelegateに
「起動準備できたけど、何かやることある?」と問い合わせます。
AppDelegateの該当のメソッドに処理を記述しておけば、このタイミングでその処理を実行できます。 -
シーンとUIWindowの生成
iOS 13以降では、SceneDelegateがシーンとUIWindowを生成しています。SceneDelegateのscene(_:willConnectTo:options:)メソッド内で、最初に表示するViewControllerをUIWindowに登録し、ウィンドウを表示します。 -
ViewController生成と表示
生成されたViewControllerがUIWindowの最初の画面パート担当を管理するコントローラーとして登録され、ViewControllerのルートビューが画面に表示されます。
参考文献
『親切すぎるiPhoneアプリ開発の本』
最後に
iOSアプリ起動までの流れを大まかに書いてみました。
まだ理解が浅い部分もあるため、実際の挙動と異なる点や間違っている点などありましたら、コメントなどでご指摘いただけたらとても嬉しいです。
ここまで読んでくださりありがとうございました!