Swift Basics: AppDelegate

Learn about the AppDelegate in the Swift Programming Language

Stanley Miller 
4 min readMar 9, 2023

As an iOS developer, one of the most important classes in a Swift application is the AppDelegate. Think of it as the head of the app, the one who sets the tone and direction for the rest of the app. If your app were a party, the AppDelegate would be the party planner who makes sure everything runs smoothly and everyone has a good time.

Let’s start with the basics. The AppDelegate is a class that acts as the entry point for your app. It’s responsible for handling app-level events and maintaining the app’s global state. When the app launches, the AppDelegate is the first thing that gets called. It initializes the app, sets up the initial view controller, and starts the app’s event loop.

Here’s a code example that shows the basic structure of an AppDelegate:

In this example, we’re importing UIKit, which is the framework that provides the basic building blocks for iOS apps. We’re also using the @UIApplicationMain attribute to mark this class as the app's main entry point. The AppDelegate class inherits from UIResponder and conforms to the UIApplicationDelegate protocol.

The window property is an optional UIWindow object that represents the app's main window. The didFinishLaunchingWithOptions method is called when the app finishes launching. This is where you can perform any initial setup or customization for your app.

Now let’s get to the fun stuff. In 2016, the game Pokémon Go was released and became an instant hit. Let’s use this game as an analogy to explain some of the features of the AppDelegate.

In Pokémon Go, you start out with a small collection of Pokémon that you can catch and train. As you progress in the game, you can evolve your Pokémon, battle other trainers, and level up your character. Similarly, in the AppDelegate, you start out with a basic app that you can customize and evolve as you build new features.

One of the features of Pokémon Go is the ability to track your location and display a map of nearby Pokémon. In the AppDelegate, you can use the didFinishLaunchingWithOptions method to set up location tracking and display a map view.

In this example, we’re using a custom LocationManager class to start tracking the user's location. We're also creating a new instance of MapViewController and setting it as the root view controller for the app's main window.

Another feature of Pokémon Go is the ability to display notifications when a nearby Pokémon is detected. In the AppDelegate, you can use the didReceiveRemoteNotification method to handle incoming push notifications.

In this example, we’re using a custom Notification class to parse the incoming payload and create a new notification object. We're also using a NotificationManager class to display the notification to the user.

Finally, let’s talk about one more feature of Pokémon Go: the ability to save your progress and resume where you left off. In the AppDelegate, you can use the applicationDidEnterBackground and applicationWillEnterForeground methods to save and restore the app's state.

In this example, we’re using a custom StateManager class to save and restore the app's state. We're also using the applicationDidEnterBackground and applicationWillEnterForeground methods to perform these operations when the app enters the background and foreground, respectively.

In summary, the AppDelegate is like the party planner for your app. It sets the tone and direction for the rest of the app, handles app-level events, and maintains the app’s global state. Whether you’re building a game like Pokémon Go or a more traditional app, understanding the AppDelegate is essential for building a great iOS app.

The LocationManager, NotificationManager & StateManager are simply placeholders. But if you were interested in an example implementation, here you go:

In this example, the StateManager class is a singleton that provides methods for saving and restoring the app's state.

When you call saveState(), the method creates a dictionary that represents the current state of your app. This could include things like the user's current location, the contents of a shopping cart, or the user's preferences. The method then serializes the dictionary into a Data object using JSON serialization and saves the data to UserDefaults using a unique key.

When you call restoreState(), the method retrieves the saved data from UserDefaults, deserializes it back into a dictionary, and uses the dictionary to restore the app's state.

Remember, this is just an example implementation, and you would need to customize it to suit your specific needs. For example, you might want to use a different serialization format or save the state data to a file instead of UserDefaults

🤟 If this article helps you, help someone else and share it.

🌮 BuyMeATaco if you’re in a generous mood.

🚀 @MrMkeItHappen

--

--