--- 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?sv=2026-02-06&spr=https&st=2026-10-28T09%3A57%3A05Z&se=2026-10-28T10%3A57%3A05Z&sr=c&sp=r&sig=avzj4Oxv9U%2BPWNF62lg9LU9CWKw0BD4DuJuT22pjbSs%3D) - 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?sv=2026-02-06&spr=https&st=2026-10-28T09%3A57%3A05Z&se=2026-10-28T10%3A57%3A05Z&sr=c&sp=r&sig=avzj4Oxv9U%2BPWNF62lg9LU9CWKw0BD4DuJuT22pjbSs%3D) > [!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?sv=2026-02-06&spr=https&st=2026-10-28T09%3A57%3A05Z&se=2026-10-28T10%3A57%3A05Z&sr=c&sp=r&sig=avzj4Oxv9U%2BPWNF62lg9LU9CWKw0BD4DuJuT22pjbSs%3D) 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 @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]; ```