When validating or uploading an app to App Store Connect, you may encounter errors or warnings related to the Bundle Name. The bundle name is mainly derived from CFBundleName in Info.plist and Xcode’s Product Name setting, while the name shown to users on the Home Screen can also come from CFBundleDisplayName. This guide explains the most common causes, how to diagnose them, and several ways to fix Bundle Name-related issues.
Common causes
CFBundleNameis empty, invalid, or contains a build-setting variable that does not expand correctly.PRODUCT_NAMEor the target name was changed without updating related Info.plist settings.- The main app, extensions, or widgets use inconsistent bundle-name settings.
CFBundleNameandCFBundleDisplayNameare being used for the wrong purposes.- The Info.plist inside the archived app does not match the settings currently shown in Xcode.
Typical situations where the issue appears
These errors commonly appear after renaming an app or target, cloning an existing project, adding app extensions, changing Release build settings, or overriding values in a CI environment.
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleDisplayName</key>
<string>My App</string>
How to check the settings
- Select the affected target in Xcode.
- Open Build Settings and check
Product Name. - Open the target’s Info tab or Info.plist and check
Bundle name(CFBundleName). - If you set a separate user-visible name, also check
Bundle display name(CFBundleDisplayName). - If the project contains widgets or extensions, repeat the same checks for every target.
- Inspect the archived app to make sure the final Info.plist contains the expected values.
plutil -p "Payload/YourApp.app/Info.plist" | grep -E "CFBundleName|CFBundleDisplayName|CFBundleIdentifier"
Solution 1: Correct CFBundleName
In many projects, keeping CFBundleName set to $(PRODUCT_NAME) is the simplest option because it stays linked to the target’s Product Name. Replace empty values or undefined variables.
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
Solution 2: Verify Product Name
Check Build Settings → Packaging → Product Name. Pay particular attention to the Release configuration used for App Store distribution, because Debug and Release can contain different values.
Solution 3: Separate CFBundleName from CFBundleDisplayName
CFBundleName is the bundle’s short user-visible name, while CFBundleDisplayName is the user-facing display name used by iOS, including on the Home Screen. If you only want to change what users see, set CFBundleDisplayName instead of unnecessarily changing the bundle name.
Solution 4: Check every target
Widgets, Notification Service Extensions, Share Extensions, and other embedded targets can have their own Info.plist and build settings. Check the bundle name of every embedded bundle, not just the main application target.
Solution 5: Recreate the archive
After changing bundle-related settings, create a fresh archive instead of reusing an older one. If Xcode continues to use stale build data, clean the build folder or remove DerivedData when appropriate.
rm -rf ~/Library/Developer/Xcode/DerivedData/*
CFBundleIdentifier uniquely identifies the app and must match the Bundle ID associated with the app in App Store Connect.Summary
For Bundle Name-related errors, first verify the roles of CFBundleName, PRODUCT_NAME, and CFBundleDisplayName. In projects with multiple targets, inspect every embedded target as well. Finally, check the Info.plist inside the generated archive, create a new archive after fixing the settings, and run Validate or Upload again.
