Skip to main content
Create, update, and manage bundle identifiers and their associated capabilities.

Overview

Bundle IDs uniquely identify your apps on Apple platforms. The bundle-ids command manages bundle identifiers and their capabilities in App Store Connect.

List Bundle IDs

List all bundle IDs in your account:
# List all bundle IDs
asc bundle-ids list

# Limit results per page
asc bundle-ids list --limit 50

# Fetch all pages automatically
asc bundle-ids list --paginate

# Output as table
asc bundle-ids list --output table

Pagination Options

  • --limit - Results per page (1-200)
  • --next - Fetch next page using a links.next URL
  • --paginate - Automatically fetch all pages

Get Bundle ID Details

Retrieve a specific bundle ID by resource ID:
asc bundle-ids get --id "BUNDLE_ID"
Note: The --id parameter expects the App Store Connect resource ID, not the bundle identifier string (e.g., “com.example.app”). Use list to find the resource ID.

Create Bundle ID

Register a new bundle identifier:
asc bundle-ids create --identifier "com.example.app" \
  --name "Example App" \
  --platform IOS

Required Parameters

  • --identifier - Bundle ID string (e.g., com.example.app)
  • --name - Display name for the bundle ID

Optional Parameters

  • --platform - Platform: IOS (default), MAC_OS, UNIVERSAL

Bundle ID Format

Bundle IDs must follow these rules:
  • Use reverse DNS notation: com.company.app
  • Contain only alphanumeric characters (A-Z, a-z, 0-9), hyphens (-), and periods (.)
  • Cannot start or end with a period
  • Cannot contain consecutive periods
Valid examples:
  • com.example.myapp
  • com.example.my-app
  • com.example.myapp.watchkit
Invalid examples:
  • .com.example.app (starts with period)
  • com..example.app (consecutive periods)
  • com.example.app! (special characters)

Wildcard Bundle IDs

Create wildcard bundle IDs for app groups:
asc bundle-ids create --identifier "com.example.*" \
  --name "Example App Family" \
  --platform IOS
Wildcard limitations:
  • Can only use * as the last component
  • Cannot use certain capabilities (Push Notifications, In-App Purchase, etc.)
  • Useful for app extensions and development

Update Bundle ID

Update a bundle ID’s display name:
asc bundle-ids update --id "BUNDLE_ID" --name "New Name"
Note: You cannot change the bundle identifier string itself. Only the display name can be updated.

Delete Bundle ID

Delete a bundle identifier:
asc bundle-ids delete --id "BUNDLE_ID" --confirm
Warning: Deleting a bundle ID:
  • Cannot be undone
  • Invalidates all associated provisioning profiles
  • Removes all capability configurations
  • Should only be done if the bundle ID is no longer in use

Bundle ID Relationships

Get Associated App

Find the app using this bundle ID:
asc bundle-ids app get --id "BUNDLE_ID"

List Associated Profiles

List all provisioning profiles for a bundle ID:
asc bundle-ids profiles list --id "BUNDLE_ID"

Capabilities Management

Manage app capabilities for a bundle ID.

List Capabilities

List all capabilities for a bundle ID:
asc bundle-ids capabilities list --bundle "BUNDLE_ID"

# Fetch all pages
asc bundle-ids capabilities list --bundle "BUNDLE_ID" --paginate

Add Capability

Enable a capability for a bundle ID:
# Simple capability (no settings)
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability PUSH_NOTIFICATIONS

# Capability with settings (iCloud)
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ICLOUD \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]'

Common Capability Types

No settings required:
  • PUSH_NOTIFICATIONS - Push notifications
  • IN_APP_PURCHASE - In-App Purchase
  • GAME_CENTER - Game Center
  • WALLET - Wallet (Apple Pay)
  • SIRIKIT - SiriKit
  • PERSONAL_VPN - Personal VPN
  • NETWORK_EXTENSIONS - Network Extensions
  • HOTSPOT - Hotspot Configuration
  • MULTIPATH - Multipath networking
  • NFC_TAG_READING - NFC tag reading
Settings required:
  • ICLOUD - iCloud (CloudKit/Documents)
  • APP_GROUPS - App Groups
  • ASSOCIATED_DOMAINS - Associated Domains
  • DATA_PROTECTION - Data Protection
  • HEALTHKIT - HealthKit
  • HOMEKIT - HomeKit
  • WIRELESS_ACCESSORY_CONFIGURATION - Wireless Accessory

iCloud Capability

# Enable iCloud with CloudKit
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ICLOUD \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]'

# Enable legacy iCloud (documents)
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ICLOUD \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_9","enabled":true}]}]'

App Groups Capability

asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability APP_GROUPS \
  --settings '[{"key":"APP_GROUP_IDS","options":[{"key":"group.com.example.shared","enabled":true}]}]'

Update Capability

Modify capability settings:
asc bundle-ids capabilities update --id "CAPABILITY_ID" \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]'

# Change capability type
asc bundle-ids capabilities update --id "CAPABILITY_ID" \
  --capability PUSH_NOTIFICATIONS

Remove Capability

Disable a capability:
asc bundle-ids capabilities remove --id "CAPABILITY_ID" --confirm
Note: Removing capabilities may cause provisioning profiles to become invalid. Regenerate profiles after capability changes.

Complete Example Workflows

Create App with Capabilities

# 1. Create bundle ID
asc bundle-ids create --identifier "com.example.myapp" \
  --name "My App" \
  --platform IOS

# Note BUNDLE_ID from response

# 2. Add Push Notifications
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability PUSH_NOTIFICATIONS

# 3. Add In-App Purchase
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability IN_APP_PURCHASE

# 4. Add iCloud
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ICLOUD \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]'

# 5. Verify capabilities
asc bundle-ids capabilities list --bundle "BUNDLE_ID" --output table

App Extensions

Create bundle IDs for app extensions:
# Main app
asc bundle-ids create --identifier "com.example.app" \
  --name "Example App" \
  --platform IOS

# Widget extension
asc bundle-ids create --identifier "com.example.app.widget" \
  --name "Example Widget" \
  --platform IOS

# Share extension
asc bundle-ids create --identifier "com.example.app.share" \
  --name "Example Share Extension" \
  --platform IOS

# Watch app
asc bundle-ids create --identifier "com.example.app.watchkitapp" \
  --name "Example Watch App" \
  --platform IOS

App Groups Setup

Enable app group sharing between main app and extensions:
# 1. Get bundle IDs
asc bundle-ids list --output json | grep "com.example.app"
# Note resource IDs for main app and extensions

# 2. Add App Groups to main app
asc bundle-ids capabilities add --bundle "MAIN_BUNDLE_ID" \
  --capability APP_GROUPS \
  --settings '[{"key":"APP_GROUP_IDS","options":[{"key":"group.com.example.shared","enabled":true}]}]'

# 3. Add App Groups to widget
asc bundle-ids capabilities add --bundle "WIDGET_BUNDLE_ID" \
  --capability APP_GROUPS \
  --settings '[{"key":"APP_GROUP_IDS","options":[{"key":"group.com.example.shared","enabled":true}]}]'

# 4. Add App Groups to share extension
asc bundle-ids capabilities add --bundle "SHARE_BUNDLE_ID" \
  --capability APP_GROUPS \
  --settings '[{"key":"APP_GROUP_IDS","options":[{"key":"group.com.example.shared","enabled":true}]}]'
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ASSOCIATED_DOMAINS \
  --settings '[{"key":"ASSOCIATED_DOMAIN_IDS","options":[{"key":"applinks:example.com","enabled":true},{"key":"applinks:www.example.com","enabled":true}]}]'

HealthKit and HomeKit

# HealthKit
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability HEALTHKIT

# HomeKit
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability HOMEKIT

Platform-Specific Considerations

iOS / tvOS

Most capabilities available. Use --platform IOS (default).

macOS

Some capabilities differ for macOS:
asc bundle-ids create --identifier "com.example.macapp" \
  --name "Example Mac App" \
  --platform MAC_OS
macOS-specific capabilities:
  • SANDBOX - App Sandbox
  • SYSTEM_EXTENSION_INSTALL - System Extensions
  • USER_MANAGEMENT - User Management

Universal (Mac Catalyst)

For Mac Catalyst apps that run on both iOS and macOS:
asc bundle-ids create --identifier "com.example.universal" \
  --name "Example Universal App" \
  --platform UNIVERSAL

Troubleshooting

Bundle ID Already Exists

Error: A bundle ID with identifier 'com.example.app' already exists
Solution:
# List to find existing bundle ID
asc bundle-ids list --output json | grep "com.example.app"

# Use the existing bundle ID or choose a different identifier

Invalid Bundle Identifier Format

Error: Bundle identifier is invalid
Ensure identifier:
  • Uses reverse DNS notation
  • Contains only alphanumeric, hyphens, periods
  • Doesn’t start/end with periods
  • No consecutive periods

Capability Settings Invalid

JSON settings must be properly formatted:
# Correct format
asc bundle-ids capabilities add --bundle "BUNDLE_ID" \
  --capability ICLOUD \
  --settings '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]'
Validate JSON:
echo '[{"key":"ICLOUD_VERSION","options":[{"key":"XCODE_13","enabled":true}]}]' | jq .

Provisioning Profiles Invalid After Capability Change

After adding or removing capabilities, regenerate profiles:
# List affected profiles
asc bundle-ids profiles list --id "BUNDLE_ID"

# Delete old profiles
asc profiles delete --id "PROFILE_ID" --confirm

# Create new profiles with updated capabilities
asc profiles create --name "Updated Profile" \
  --profile-type IOS_APP_STORE \
  --bundle "BUNDLE_ID" \
  --certificate "CERT_ID"