Skip to main content

 MoEngage Apple Developer Account Configuration Doc: App Groups & Keychain Sharing

This guide walks you through the steps on the Apple Developer website (developer.apple.com) to configure App Groups and Keychain Sharing for your main iOS application and its extensions, which is necessary for MoEngage integration.


⚠️ IMPORTANT NOTE: Bundle Identifier Replacement

You must replace all instances of the placeholder [BUNDLE_IDENTIFIER] with your actual, primary iOS application bundle identifier (e.g., com.yourcompany.appname) throughout this entire document, including in the Appmaker dashboard configuration.


This configuration is mandatory for sharing data (like login tokens or user settings) between your:

  1. Main App: [BUNDLE_IDENTIFIER]
  2. Service Extension: [BUNDLE_IDENTIFIER].MoEngageExpoRichPush
  3. Content Extension: [BUNDLE_IDENTIFIER].MoEngageExpoPushTemplates

1. Prerequisites

You must be logged into your Apple Developer Account with the Account Holder or Admin role.

Required Identifiers

  • App Group Identifier: group.[BUNDLE_IDENTIFIER]
  • Keychain Access Group: [BUNDLE_IDENTIFIER].MoEngage.keychain

2. Check and Create Missing Extension App IDs

You must ensure that the App IDs for your main app and both extensions are registered in the Apple Developer Portal before configuring capabilities.

Targets to Check/Create:

  • [BUNDLE_IDENTIFIER].MoEngageExpoRichPush (Service Extension)
  • [BUNDLE_IDENTIFIER].MoEngageExpoPushTemplates (Content Extension)

How to Check if App IDs Exist:

  1. Navigate to Certificates, IDs & Profiles -> Identifiers.
  2. Press CTRL+F (or CMD+F on Mac) to open your browser's Find function.
  3. Search for the partial identifier: MoEngageExpoRichPush or MoEngageExpoPushTemplates.
  4. If the App ID is found, you can proceed to the next section.

Steps to Create an Extension App ID (If Missing):

  1. Click the add button (+) to register a new identifier.
  2. Select App IDs, then click Continue.
  3. Select type App, then click Continue.
  4. Description: Enter a name (e.g., "MoEngage Rich Push Service Extension").
  5. Bundle ID: Select Explicit and enter the full identifier (e.g., [BUNDLE_IDENTIFIER].MoEngageExpoRichPush).
  6. Scroll down, click Continue, and then Register.
  7. Repeat these steps for the Content Extension App ID ([BUNDLE_IDENTIFIER].MoEngageExpoPushTemplates).

3. Create the Shared App Group

An App Group provides a shared data container and acts as a common security boundary.

Steps:

  1. Navigate to Certificates, IDs & Profiles -> Identifiers.
  2. Click the add button (+) to register a new identifier.
  3. Select App Groups from the list, then click Continue.
  4. Description: Enter a meaningful name (e.g., "MoEngage Shared Data Group").
  5. Identifier: Enter the required identifier: group.[BUNDLE_IDENTIFIER]
  6. Click Continue, then Register.

4. Enable Capabilities on All App IDs

You must enable the App Groups and Keychain Sharing capabilities for the main App ID and both Extension App IDs.

Targets to Configure (Repeat Steps 4.1 & 4.2 for all 3 App IDs):

  1. [BUNDLE_IDENTIFIER]
  2. [BUNDLE_IDENTIFIER].MoEngageExpoRichPush
  3. [BUNDLE_IDENTIFIER].MoEngageExpoPushTemplates

4.1. Configure App Groups

  1. In Certificates, IDs & Profiles, select Identifiers.
  2. Find and click on one of the App IDs.
  3. Click Edit.
  4. Check the App Groups box.
  5. Click the Configure button.
  6. In the list, check the box next to the identifier you created: group.[BUNDLE_IDENTIFIER].
  7. Click Continue, then Save to confirm changes to the App ID.

4.2. Configure Keychain Sharing

  1. While still in the Edit screen for the same App ID, scroll down.
  2. Check the Keychain Sharing box.
  3. No further configuration is required on the Developer Portal for Keychain Sharing. The specific access group ([BUNDLE_IDENTIFIER].MoEngage.keychain) is set in the build environment.
  4. Click Save to confirm changes to the App ID.

5. Regenerate Provisioning Profiles

Any change to the capabilities of an App ID invalidates all associated Provisioning Profiles. These profiles must be regenerated and downloaded.

Steps:

  1. In Certificates, IDs & Profiles, select Profiles.
  2. Find the Provisioning Profile associated with one of your targets (it will likely show an Invalid status).
  3. Click Edit on the invalid profile.
  4. Click Generate (or Save) to create a new profile.
  5. Download the new Provisioning Profile.
  6. Repeat these steps for all other Provisioning Profiles (Development and App Store/Ad Hoc) associated with your Main App and both Extension Targets.

6. Appmaker Configuration Steps

After completing the portal steps, configure the required settings in the Appmaker dashboard.

6.1 Provisioning Profile Upload (In Appmaker)

  1. Go to the Appmaker dashboard -> Extensions.
  2. Search for the Provisioning Profiles extension and enable it.
  3. Add the following two profiles values:
OrderFieldValue
FirstBundle Identifier[BUNDLE_IDENTIFIER].MoEngageExpoRichPush
Target NameMoEngageExpoRichPush
Environment VariableMOENGAGE_RICH_PUSH_PROFILE
SecondBundle Identifier[BUNDLE_IDENTIFIER].MoEngageExpoPushTemplates
Target NameMoEngageExpoPushTemplates
Environment VariableMOENGAGE_PUSH_TEMPLATES_PROFILE
  1. After configuring both sets of values, save the changes.

6.2 Disable Firebase Notification Image

If you use Firebase Analytics, disable its notification handling to avoid conflict:

  1. Go to Appmaker Dashboard -> Extensions -> Firebase Analytics.
  2. Enable the Disable ios notification image feature.
  3. Click Save.

6.3 Finalizing the Build

  • Contact Appmaker support to request regeneration of existing profiles on their system.
  • Once confirmation is received, you can proceed to generate successful builds with MoEngage integration.