<!--
{
  "availability" : [
    "macOS: 11.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "SwiftUI",
  "identifier" : "/documentation/SwiftUI/NSApplicationDelegateAdaptor",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "SwiftUI"
    ],
    "preciseIdentifier" : "s:7SwiftUI28NSApplicationDelegateAdaptorV"
  },
  "title" : "NSApplicationDelegateAdaptor"
}
-->

# NSApplicationDelegateAdaptor

A property wrapper type that you use to create an AppKit app delegate.

```
@MainActor @preconcurrency @propertyWrapper struct NSApplicationDelegateAdaptor<DelegateType> where DelegateType : NSObject, DelegateType : NSApplicationDelegate
```

## Overview

To handle app delegate callbacks in an app that uses the
SwiftUI life cycle, define a type that conforms to the
<doc://com.apple.documentation/documentation/AppKit/NSApplicationDelegate>
protocol, and implement the delegate methods that you need. For example,
you can implement the
<doc://com.apple.documentation/documentation/AppKit/NSApplicationDelegate/application(_:didRegisterForRemoteNotificationsWithDeviceToken:)>
method to handle remote notification registration:

```
class MyAppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
    func application(
        _ application: NSApplication,
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
    ) {
        // Record the device token.
    }
}
```

Then use the `NSApplicationDelegateAdaptor` property wrapper inside your
[`App`](/documentation/SwiftUI/App) declaration to tell SwiftUI about the delegate type:

```
@main
struct MyApp: App {
    @NSApplicationDelegateAdaptor private var appDelegate: MyAppDelegate

    var body: some Scene { ... }
}
```

SwiftUI instantiates the delegate and calls the delegate’s
methods in response to life cycle events. Define the delegate adaptor
only in your [`App`](/documentation/SwiftUI/App) declaration, and only once for a given app. If
you declare it more than once, SwiftUI generates a runtime error.

If your app delegate conforms to the
<doc://com.apple.documentation/documentation/Combine/ObservableObject>
protocol, as in the example above, then SwiftUI puts the delegate it
creates into the [`Environment`](/documentation/SwiftUI/Environment). You can access the delegate from
any scene or view in your app using the [`EnvironmentObject`](/documentation/SwiftUI/EnvironmentObject) property
wrapper:

```
@EnvironmentObject private var appDelegate: MyAppDelegate
```

This enables you to use the dollar sign (`$`) prefix to get a binding to
published properties that you declare in the delegate. For more information,
see [`projectedValue`](/documentation/SwiftUI/NSApplicationDelegateAdaptor/projectedValue).

> Important: Manage an app’s life cycle events without using an app
> delegate whenever possible. For example, prefer to handle changes
> in ``doc://com.apple.SwiftUI/documentation/SwiftUI/ScenePhase`` instead of relying on delegate callbacks, like
> <doc://com.apple.documentation/documentation/AppKit/NSApplicationDelegate/applicationDidFinishLaunching(_:)>.

## Topics

### Creating a delegate adaptor

[`init(_:)`](/documentation/SwiftUI/NSApplicationDelegateAdaptor/init(_:))

Creates an AppKit app delegate adaptor using an observable delegate.

### Getting the delegate adaptor

[`projectedValue`](/documentation/SwiftUI/NSApplicationDelegateAdaptor/projectedValue)

A projection of the observed object that provides bindings to its
properties.

[`wrappedValue`](/documentation/SwiftUI/NSApplicationDelegateAdaptor/wrappedValue)

The underlying delegate.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)