Xcode Build and Export
Use this skill when you need to build an app from source and prepare it for upload to App Store Connect.
Preconditions
- Xcode installed and command line tools configured
- Valid signing identity and provisioning profiles (or automatic signing enabled)
Manage version and build numbers with asc
Before archiving, prefer asc xcode version ... over manual pbxproj edits when you need to inspect or bump app versions.
asc xcode version view
asc xcode version edit --version "1.3.0" --build-number "42"
asc xcode version bump --type build
asc xcode version bump --type patch
Notes:
- Use
--project-dir "./MyApp"when you are not running from the project root. - Use
--target "App"for deterministic reads in multi-target projects. - These commands support both legacy
agvtoolprojects and modernMARKETING_VERSION/CURRENT_PROJECT_VERSIONsetups.
iOS Build Flow
1. Clean and Archive
xcodebuild clean archive \
-scheme "YourScheme" \
-configuration Release \
-archivePath /tmp/YourApp.xcarchive \
-destination "generic/platform=iOS"
2. Export IPA
xcodebuild -exportArchive \
-archivePath /tmp/YourApp.xcarchive \
-exportPath /tmp/YourAppExport \
-exportOptionsPlist ExportOptions.plist \
-allowProvisioningUpdates
A minimal ExportOptions.plist for App Store distribution:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store-connect</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
</dict>
</plist>
3. Upload with asc
asc builds upload --app "APP_ID" --ipa "/tmp/YourAppExport/YourApp.ipa"
macOS Build Flow
1. Archive
xcodebuild archive \
-scheme "YourMacScheme" \
-configuration Release \
-archivePath /tmp/YourMacApp.xcarchive \
-destination "generic/platform=macOS"
2. Export PKG
xcodebuild -exportArchive \
-archivePath /tmp/YourMacApp.xcarchive \
-exportPath /tmp/YourMacAppExport \
-exportOptionsPlist ExportOptions.plist \
-allowProvisioningUpdates
3. Upload PKG with asc
macOS apps export as .pkg files. Upload with asc:
asc builds upload \
--app "APP_ID" \
--pkg "/tmp/YourMacAppExport/YourApp.pkg" \
--version "1.0.0" \
--build-number "123"
Notes:
--pkgautomatically sets platform toMAC_OS.- For
.pkguploads,--versionand--build-numberare required (they are not auto-extracted like IPA uploads). - Add
--waitif you want to wait for build processing to complete.
Build Number Management
Each upload requires a unique build number higher than previously uploaded builds.
In Xcode project settings:
CURRENT_PROJECT_VERSION- build number (e.g., "316")MARKETING_VERSION- version string (e.g., "2.2.0")
Check existing builds:
asc builds list --app "APP_ID" --platform IOS --limit 5
Troubleshooting
"No profiles for bundle ID" during export
- Add
-allowProvisioningUpdatesflag - Verify your Apple ID is logged into Xcode
Build rejected for missing icon (macOS)
macOS requires ICNS format icons with all sizes:
- 16x16, 32x32, 128x128, 256x256, 512x512 (1x and 2x)
CFBundleVersion too low
The build number must be higher than any previously uploaded build. Increment it with asc xcode version bump --type build, or resolve a remote-safe number with asc builds next-build-number --app "APP_ID" --version "2.2.0" --platform IOS and then apply it with asc xcode version edit --build-number "NEXT_BUILD" before rebuilding.
Notes
- Always clean before archive for release builds
- Use
xcodebuild -showBuildSettingsto verify configuration - For submission issues (encryption, content rights), see
asc-submission-healthskill