---
title: "iOS Enterprise Push"
slug: "ios-enterprise-push"
updated: 2026-06-09T22:15:01Z
published: 2026-06-09T22:15:01Z
canonical: "docs.xtremepush.com/ios-enterprise-push"
stale: true
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xtremepush.com/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS Enterprise Push

Enable support for encrypted messages and delivery receipts

Delivery receipts will allow you to confirm when a push notification has been delivered to a device. This allows you to more accurately measure delivery and fallback to other channels.

> [!TIP]
> Enterprise Push Package
> 
> The delivery receipts feature is part of the Xtremepush Enterprise Push package, which is a paid feature. Please review our dedicated [guide](/documentation/docs/enterprise-push-package) for more details.

> [!NOTE]
> Minimum SDK version
> 
> This feature is only available in Xtremepush [iOS SDK versions](/documentation/docs/ios-sdk-releases) starting from v4.1.8.

iOS push delivery receipts require the use of a service extension. This will need to be set up first and then delivery receipts can be enabled.

## Setting up your service extension

First, follow the guide for [iOS rich media notifications](/documentation/docs/ios-push-rich-media) for the steps on *Creating a service extension* and *Setting up the service extension*. Next, there are additional steps to complete against the notification extension.

The Xtremepush SDK uses *App Groups* capability to share receipt data between the main target and notification extension. Xtremepush uses a custom *App Group*, so even if you already use you own group, you still need to create a group dedicated for Xtremepush.

Here's how to set it up:

- Register a new App Group on the [Apple Developer portal](https://developer.apple.com/account/). Use `group.YOUR_BUNDLE_IDENTIFIER.xtremepush.suit` as the group identifier format.

![](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/882936c-image1(1).png)
- Select the **App Groups** capability and associate this group with both main app ID and notification extension ID.

> [!NOTE]
> A common issue in integrating the service extension is that the app group is only associated with a the app ID.

![](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/05ab7a9-image3(1).png)

> [!NOTE]
> Invalidated provisioning profile
> 
> These steps will invalidate your existing provisioning profile for any schemas you use in your project. You can regenerate them in the [Apple Developer portal resources list](https://developer.apple.com/account/resources/profiles/list).
- Open Xcode and add the **App Groups** capability to both main target and notification service target:

![](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/0ee9438-image2(1).png)

Set up your notification service extension as shown in code below. If you have already [iOS rich media notifications](/documentation/docs/ios-push-rich-media), then you will already have setup a similar extension.

**Swift**

```swift
import XPush
class NotificationService: UNNotificationServiceExtension {
    var token: String?
    override init() {
        super.init()
        XPush.setDeliveryReceiptsEnabled(true)
        XPush.setAppKey(<#your app key#>)
      	XPush.enableAppGroups("group.YOUR_BUNDLE_IDENTIFIER.xtremepush.suit")
    }
    override func didReceive(_ request: UNNotificationRequest,
                             withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.token = XPush.didReceive(request, withContentHandler: contentHandler)
    }
    override func serviceExtensionTimeWillExpire() {
        XPush.serviceExtensionTimeWillExpire(with: token)
    }
}
```

**Objective-C**

```objectivec
#import <XPush/XPush.h>
@interface NotificationService ()
@property (nonatomic) NSString* token;
@end
@implementation NotificationService
  - (instancetype) init {
    self = [super init];
    if (!self) return nil;
    [XPush setDeliveryReceiptsEnabled:YES];
    [XPush setAppKey:<#your app key#>];
  	[XPush enableAppGroups:@"group.YOUR_BUNDLE_IDENTIFIER.xtremepush.suit"];
    return self;
}
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request 
                   withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.token = [XPush didReceiveNotificationRequest:request
                                   withContentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
    [XPush serviceExtensionTimeWillExpireWith:self.token];
}
@end
```

Now that you have added the notification service extension you are ready to enable delivery receipts back in your

## Enable delivery receipts

In the [standard integration of the iOS SDK](/documentation/docs/ios-sdk-integration), delivery receipts are switched off. To send delivery receipts to Xtremepush, add the following code when configuring Xtremepush:

**Swift**

```swift
XPush.setDeliveryReceiptsEnabled(true)
XPush.enableAppGroups("group.YOUR_BUNDLE_IDENTIFIER.xtremepush.suit")
```

**Objective-C**

```objectivec
[XPush setDeliveryReceiptsEnabled:YES];
[XPush enableAppGroups:@"group.YOUR_BUNDLE_IDENTIFIER.xtremepush.suit"];
```

If you want to send delivery receipts to a custom endpoint, you would include a second param, which will be the URL you are sending to. If you set a custom endpoint for delivery receipts, the delivery receipts will **not** be sent to Xtremepush.

**Swift**

```swift
XPush.setDeliveryReceiptsEnabled(true, customReportingEndpoint: "YOUR_URL");
```

**Objective-C**

```objectivec
[XPush setDeliveryReceiptsEnabled:isEnabled customReportingEndpoint:@"YOUR_URL"];
```

## Enable encrypted messages

To enable encrypted push messages after adding the notification service extension, add the following code when configuring Xtremepush:

**Swift**

```swift
XPush.enableEncryptedPush(true)
```

**Objective-C**

```objectivec
[XPush enableEncryptedPush];
```
