Entry Point


アクセスポイント(Entry Point)からアプリケーション画面前の状態までの手順を説明します.
Entry Point

上の写真にはマークが付いていませんが、iOS 15以降はアプリケーション起動時にPrewarmingのプロセスを行うことができるそうです.まずmain関数の呼び出しから始めます.
1.main関数を呼び出す(main()
アクセスポイントとして実行される最初のコードです.
// main.m
int main(int argc, char * argv[]) {
  @autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}
Objective-Cで生成されたプロジェクトでmain.mファイルが生成され、上記の内容の主な関数を確認できます.
ただし、SWIFTプロジェクトではmain関数を特定できません.@UIアプリケーションMainまたは@Mainをクラスに書き込むと、自動的にmain関数が呼び出されます.
@UIApplicationMain // Swift 5.3 이전
class AppDelegate: UIResponder, UIApplicationDelegate {
}

@main // Swift 5.3 이후
class AppDelegate: UIResponder, UIApplicationDelegate {
}

@main // SwiftUI 프로젝트
struct myApp: App {

  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}
@(attribute)を使用すると、長いコードを1行に整列させることができます!

本当に同じように処理しますか?
SWIFTプロジェクトmainを作成します.以下に示すように、swiftという名前のファイルを作成し、UIAPplicationMain関数を作成します.
// main.swift

// 함수인데 코드 블럭 내부에서 작성되지 않는다..
UIApplicationMain(
  CommandLine.argc,
  CommandLine.unsafeArgv,
  nil,
  NSStringFromClass(AppDelegate.self)
)
作成後にコンストラクションを実行すると、次の2つのエラーが発生します.
1.top-levelコードを含むモジュールは@mainを使用できません

すなわち、main.swiftファイルの内部にはすでにトップレベルのコードが含まれているため、@mainは使用できません.
トップレベルコードとは?

  • トップレベル宣言(top-level宣言):
    最上位レベルで宣言すると、同じモジュールに属するすべてのコードにアクセスできます.
    (共通のログ・ライブラリSwiftyBeaverのログ定数宣言と同じ...)

  • 実行可能最上位コード(実行可能最上位コード):
    宣言だけでなく、構文と式も含まれており、プログラムでは最上位のエントリポイントとしてのみ使用できます.
  • main.コード
  • は、swiftファイルなどのUIアプリケーションMainなどのコードブロックに含まれない
  • @UIアプリケーション、@main attributeなど
  • 2.繰り返し構成部品
    double symbol for architectureで検索したところ、同じ関数が繰り返しロード時に発生していることがわかりました.

    つまり、UIアプリケーションMainの呼び出しは、特定のクラスで@Mainを作成するのと同じです!
    2. UIApplicationMain
    main関数を実行するとUIApplicationMain関数が実行されます.
    func UIApplicationMain(
      // argv의 갯수.
      _ argc: Int32,     
      // 인자의 변수 목록
      _ argv: UnsafeMutablePointer<UnsafeMutablePointer<CChar>?>,
      // UIApllication 클래스 또는 하위 클래스 이름, nil을 지정하면 UIApplication으로 가정
      _ principalClassName: String?,   
      // application delegate가 인스턴스화 되는 클래스 이름
      _ delegateClassName: String? 
    ) -> Int32
    関数を実行すると、各パラメータの内容などのUIアプリケーションおよびUIアプリケーションDelegateプロトコルを使用したクラスインスタンスが生成されます.
    3. Load Default Storyboard
    info.plistで設定したメインシーケンスイメージボードファイルがロードされます.info.plistで指定されていない場合は、このプロシージャをスキップします.
  • 注意事項
    Xcode 13環境では、info.plistはTarget->Infoラベルページに移動します.

  • https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes
    4. First initialization
    アプリケーションを初期化し、実行準備を行います.基本ストーリーボードまたはnibファイルをロードした後、アプリケーションの状態が回復する前にアプリケーション(:w i l l F i n ishLaunchingWithOptions:)メソッドを呼び出します.
    このメソッドが呼び出されると、アプリケーションは非アクティブになります.
    optional func application(
      _ application: UIApplication,
      willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
    ) -> Bool
  • アプリケーション:アプリケーションオブジェクトを単転します.
  • LaunchOptions:アプリケーションを起動する理由がある場合は、オプションキーのディックシリーズが含まれます.(オプションキーリンクを参照)
  • return value:
  • false:アプリケーションがURLリソースまたはユーザータスクを処理できない場合、またはメイン画面のクイックタスク呼び出しを処理している場合は、application(_:performActionFor:completionHandler:)メソッドを返します.そうでない場合は
  • を返します.
  • true:falseでない場合は
  • を返します.
  • other:リモート通知のため、アプリケーションの起動時に戻り値
  • は無視されます.
    5. App state restoration
    これからは単独の宣伝で皆さんに会いに行きますフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ...
    https://developer.apple.com/documentation/uikit/uiscenedelegate/restoring_your_app_s_state
    6. Final initialization
    アプリケーションの初期化を完了し、最後の変更を行います.アプリケーションの状態が回復した後に呼び出されますが、アプリケーションの画面や他のUIが表示される前にアプリケーション(:d i d F i n ishLaunchingWithOptions:)メソッドを呼び出すことができます.
    optional func application(
      _ application: UIApplication, //
      didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
    ) -> Bool
    このメソッドを返すと、システムはある時点でAppDelegateの他のメソッドを呼び出し、アプリケーションをアクティブ(フロント)状態またはバックグラウンド状態に移動します.
    の最後の部分
    下のFlowではEntry Point部分のみが表示されています.

    アップルのドキュメントアーカイブでEntry PointやApp LifeCycleについての手順図などが見つからず、他の人の整理記事では出典と表記された以前のアドレスに入ると、UIKEアップルの最新ドキュメントに入れなくなり、憂鬱ですが、参考資料があるので助かります.
    [公開するリスト]
  • App Life Cycle
  • Attribute
  • Prewarming
  • App state restoration
  • ソースとコメント
  • AppDelegate In SwiftUI
  • About the App Launch Sequence
  • Responding to the Launch of Your App
  • Entry Point
  • What do @main, @UIApplicationMain, and @NSApplicationMain mean
  • Top-Level Code
  • Life Cycle