<!--
{
  "availability" : [
    "iOS: 14.0.0 -",
    "iPadOS: 14.0.0 -",
    "macCatalyst: 14.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "NetworkExtension",
  "identifier" : "/documentation/NetworkExtension/NEAppPushProvider",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Network Extension"
    ],
    "preciseIdentifier" : "c:objc(cs)NEAppPushProvider"
  },
  "title" : "NEAppPushProvider"
}
-->

# NEAppPushProvider

An object that creates and maintains a persistent network connection to a local push server.

```
class NEAppPushProvider
```

## Overview

Subclass [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider) to provide the connection to your local push server. A [`NEAppPushManager`](/documentation/NetworkExtension/NEAppPushManager) creates instances of your provider class based on the [`providerBundleIdentifier`](/documentation/NetworkExtension/NEAppPushManager/providerBundleIdentifier) in the manager’s configuration. The manager then calls methods on your provider to start and stop communication with the server, and periodically check the provider’s status. When your provider receives an incoming call from your server, call the provider’s [`reportIncomingCall(userInfo:)`](/documentation/NetworkExtension/NEAppPushProvider/reportIncomingCall(userInfo:)) method to alert the manager’s [`delegate`](/documentation/NetworkExtension/NEAppPushManager/delegate).

### Creating a Local Push Provider Extension

Local Push Providers run as App Extensions for the `app-push-provider` extension point, which is a possible value the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.networking.networkextension>.

To create a Local Push Provider extension, first create a new App Extension target in your project.

For an example of an Xcode build target for this app extension, see the [Receiving Voice and Text Communications on a Local Network](/documentation/NetworkExtension/receiving-voice-and-text-communications-on-a-local-network) sample code project.

Once you have an extension target, create a subclass of [`NEAppPushProvider`](/documentation/NetworkExtension/NEAppPushProvider). Then set the `NSExtensionPrincipalClass` key in the extension’s `Info.plist` to the name of your subclass. Set the `NSExtensionPointIdentifier` key in the extension’s `Info.plist` to `com.apple.networkextension.app-push`, if it’s not set already.

Here’s an example of the `NSExtension` dictionary in a Local Push Provider extension’s `Info.plist`:

```xml
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.networkextension.app-push</string>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_MODULE_NAME).MyPushProvider</string>
</dict>
```

Finally, add your Local Push Provider extension target to your app’s Embed App Extensions build phase.

## Topics

### Inspecting provider properties

[`providerConfiguration`](/documentation/NetworkExtension/NEAppPushProvider/providerConfiguration)

A dictionary that contains current vendor-specific configuration parameters.

### Implementing provider life cycle

[`-  start`](/documentation/NetworkExtension/NEAppPushProvider/start())

Indicates that the framework has started the provider.

[`-  startWithCompletionHandler:`](/documentation/NetworkExtension/NEAppPushProvider/start(completionHandler:))

Indicates that the framework has started the provider, and provides a completion handler for subclasses to signal their readiness.

[`-  stopWithReason:completionHandler:`](/documentation/NetworkExtension/NEAppPushProvider/stop(with:completionHandler:))

Indicates that the framework needs to stop the provider.

[`-  handleTimerEvent`](/documentation/NetworkExtension/NEAppPushProvider/handleTimerEvent())

Indicates a periodic status check from the framework to the provider.

### Receiving local events

[`-  reportIncomingCallWithUserInfo:`](/documentation/NetworkExtension/NEAppPushProvider/reportIncomingCall(userInfo:))

Informs the manager about an incoming call.

[`-  reportPushToTalkMessageWithUserInfo:`](/documentation/NetworkExtension/NEAppPushProvider/reportPushToTalkMessage(userInfo:))

Informs the manager about a push-to-talk message on the connection.

### Operating over Ethernet

[`-  unmatchEthernet`](/documentation/NetworkExtension/NEAppPushProvider/unmatchEthernet())

Tells the framework not to use the provider with an active Ethernet connection.

## Relationships

### Inherits From

[`NEProvider`](/documentation/NetworkExtension/NEProvider)

### Conforms To

[`Equatable`](/documentation/Swift/Equatable)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

[`CVarArg`](/documentation/Swift/CVarArg)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`Hashable`](/documentation/Swift/Hashable)

---

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)