Skip to main content

iOS App Group ID Setup

Why this is required​

When your iOS wallet app and DocumentProviderExtension need to share data, both targets must use the same App Group identifier.

The local DeveloperConfig.xcconfig file created in iOS Holder setup supplies this identifier. The build expands the same value into the app and extension entitlements and their Info.plist files; the setup guide also wires it into the Holder's iOS storage implementation.

This is required for an app bundle such as:

  • org.multipaz.samples.wallet.cmp.UtopiaSample

Important naming distinction in Apple Developer​

On the Apple Developer Identifiers pages, there are two different values:

  1. Description (shown in your identifiers list as Name)
    • Example value: XC org multipaz samples wallet cmp UtopiaSample
    • This is the App ID display name, not the App Group identifier.
  2. App Group identifier
    • Usually in the format group.org.multipaz.samples...
    • This is the value you must add to entitlements for app-extension data sharing.

Identifiers list example (where the same string appears in the Name column):

Apple Developer Identifiers list page

Apply App Group to your App ID​

  1. Open Apple Developer portal: Certificates, Identifiers & Profiles.
  2. Open the App ID for your bundle (org.multipaz.samples.wallet.cmp.UtopiaSample).
  3. On Edit your App ID Configuration, scroll to App Groups.
  4. Ensure App Groups is enabled (checked).
  5. Click Edit next to App Groups.
  6. Select or create the group ID you want to use (for example group.org.multipaz.samples.wallet).
  7. Save changes.

App ID configuration example (scroll to App Groups and click Edit):

Apple App ID configuration with App Groups capability

Apply the same Group ID in Xcode​

  1. Open your iOS project in Xcode.
  2. For the app target, go to Signing & Capabilities and add App Groups (if missing).
  3. Add the exact same App Group identifier selected in Apple Developer.
  4. Repeat for the extension target (DocumentProviderExtension) so both targets contain the same group ID.

Xcode example (App Groups capability in Signing & Capabilities):

Xcode Signing and Capabilities showing App Groups

Verify the configured value​

Set the App Group once in the local configuration file:

APP_GROUP_ID = group.org.multipaz.samples.wallet

The codelab's checked-in entitlement files use that setting for com.apple.security.application-groups:

<key>com.apple.security.application-groups</key>
<array>
<string>$(APP_GROUP_ID)</string>
</array>

Targets that commonly need this match:

  • iosApp.entitlements
  • IdentityDocumentProviderExtension.entitlements

The build also writes AppGroupID to both targets' Info.plist files. The Holder's iOS storage implementation uses this runtime value to locate the shared container.

Troubleshooting​

  • If you only set Description/Name, sharing will still fail because Description is not an App Group ID.
  • If APP_GROUP_ID is missing from DeveloperConfig.xcconfig, the Holder reports Missing AppGroupID in Info.plist at runtime.
  • Do not hard-code the group ID in committed entitlement or project files; the local configuration keeps signing values out of source control.
  • If changes do not apply immediately, regenerate profiles in Apple Developer and refresh signing in Xcode.