--- name: asc-xcode-build description: Build, archive, export, and manage Xcode version/build numbers with asc and xcodebuild before uploading to App Store Connect. Use when you need to create an IPA or PKG for upload. --- # 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. ```bash 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 `agvtool` projects and modern `MARKETING_VERSION` / `CURRENT_PROJECT_VERSION` setups. ## iOS Build Flow ### 1. Clean and Archive ```bash xcodebuild clean archive \ -scheme "YourScheme" \ -configuration Release \ -archivePath /tmp/YourApp.xcarchive \ -destination "generic/platform=iOS" ``` ### 2. Export IPA ```bash xcodebuild -exportArchive \ -archivePath /tmp/YourApp.xcarchive \ -exportPath /tmp/YourAppExport \ -exportOptionsPlist ExportOptions.plist \ -allowProvisioningUpdates ``` A minimal `ExportOptions.plist` for App Store distribution: ```xml method app-store-connect teamID YOUR_TEAM_ID ``` ### 3. Upload with asc ```bash asc builds upload --app "APP_ID" --ipa "/tmp/YourAppExport/YourApp.ipa" ``` ## macOS Build Flow ### 1. Archive ```bash xcodebuild archive \ -scheme "YourMacScheme" \ -configuration Release \ -archivePath /tmp/YourMacApp.xcarchive \ -destination "generic/platform=macOS" ``` ### 2. Export PKG ```bash 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`: ```bash asc builds upload \ --app "APP_ID" \ --pkg "/tmp/YourMacAppExport/YourApp.pkg" \ --version "1.0.0" \ --build-number "123" ``` Notes: - `--pkg` automatically sets platform to `MAC_OS`. - For `.pkg` uploads, `--version` and `--build-number` are required (they are not auto-extracted like IPA uploads). - Add `--wait` if 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: ```bash asc builds list --app "APP_ID" --platform IOS --limit 5 ``` ## Troubleshooting ### "No profiles for bundle ID" during export - Add `-allowProvisioningUpdates` flag - 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 -showBuildSettings` to verify configuration - For submission issues (encryption, content rights), see `asc-submission-health` skill