Entry Point einer UIKit-App in Xcode richtig setzen
- Grundlagen zum Entry Point einer UIKit-App
- Verwendung von @UIApplicationMain
- Alternativer Einstieg über main.swift
- Storyboard und Info.plist
- Zusammenfassung
Grundlagen zum Entry Point einer UIKit-App
In einer UIKit-basierten iOS-App ist der Entry Point der Ort, von dem aus die Ausführung der App startet. Traditionell übernimmt dies die Funktion main.swift oder – wenn kein eigener Einstiegspunkt definiert ist – das vom System bereitgestellte Standard-Entry-Point-Verhalten. Das Ziel ist, der App mitzuteilen, welche Klasse die App-Delegierung übernimmt und wie das initiale User Interface aufgebaut wird. In modernen UIKit-Projekten wird häufig das @UIApplicationMain-Attribut verwendet oder eine main.swift-Datei mit einem expliziten Aufruf von UIApplicationMain eingesetzt.
Verwendung von @UIApplicationMain
Die einfachste Methode, den Entry Point zu definieren, ist das Setzen des Attributs @UIApplicationMain vor der App-Delegate-Klasse. Dieses Attribut erzeugt automatisch den Startpunkt für die App und verbindet die App-Delegate-Klasse, die von UIResponder erbt und das UIApplicationDelegate-Protokoll implementiert. Der Vorteil besteht darin, dass keine separate main.swift-Datei benötigt wird und Xcode den Einstieg automatisch verwaltet. Beispiel:
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow?func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: ?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = ViewController() window?.makeKeyAndVisible() return true } }func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: ?) -> Bool {
Hier ist die Klasse AppDelegate der Entry Point, welcher von iOS beim Start aufgerufen wird.
Alternativer Einstieg über main.swift
Falls du mehr Kontrolle brauchst, z.B. um die Startparameter zu verändern oder eine andere Hauptklasse zu verwenden, kannst du eine eigene main.swift-Datei anlegen. Diese Datei übernimmt dann manuell den Start der Anwendung mit einem Aufruf von UIApplicationMain. Dort gibst du die Klasse des App-Delegates explizit an. So könnte eine main.swift aussehen:
import UIKit UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self) )Wichtig ist, dass in den Projekteinstellungen oder in der Info.plist die Einstellung für den Entry Point nicht mehr auf @UIApplicationMain verweist oder irgendwie doppelt definiert ist. Der Aufruf in main.swift ist die definitive Startstelle.
Storyboard und Info.plist
Neben dem reinen Code-Entry-Point spielt die Info.plist eine Rolle, da dort unter anderem der Name des Start-Storyboard angegeben wird, falls du Storyboards verwendest. Der Schlüssel UIMainStoryboardFile gibt das Main Interface an. Falls du programmgesteuert mit Fenster und View Controllern arbeitest, kannst du diesen Eintrag leer lassen. Wichtig ist, dass das UI-Windows im AppDelegate korrekt initialisiert wird.
Zusammenfassung
Der Entry Point in einer UIKit-App wird offiziell durch den Aufruf von UIApplicationMain definiert. In Xcode-Projekten wird die App meist mit dem @UIApplicationMain-Attribut am AppDelegate automatisch gestartet, alternativ kann eine main.swift-Datei mit expliziter Funktion benutzt werden. Für die UI-Initialisierung muss die Fenster-Hierarchie im AppDelegate entsprechend eingerichtet werden. Durch korrekte Konfiguration des Storyboards in der Info.plist oder Verzicht darauf bei rein programmatischer UI wird der Start der App sauber gesteuert.