DocsBuilds

Working on an app

Builds

Link your Xcode project, archive and upload a build with one button, and attach a processed build to the version you are shipping.

The Build tab is where a version gets its binary. You can upload builds however you like (Xcode, CI, Xcode Cloud) and attach one here, or link your Xcode project and let Slipway archive, sign and upload it for you with Build & Upload.

What you need#

  • A version selected in the workspace (the Build tab is version-scoped).
  • Xcode installed. Slipway runs /usr/bin/xcodebuild and xcrun altool from your Mac.
  • For Build & Upload: an iOS project (.xcodeproj or .xcworkspace) with at least one shared scheme.
  • The App Store Connect API key for the team that owns the app. Slipway already has it (see Add your first team).

Attach an existing build#

The TestFlight builds list shows the 25 most recent builds for the app, newest first. Each row shows the build number, its version, the upload date and a state:

State Meaning
Processing Apple is still processing the upload. You can't select it yet.
Ready Processed and valid. Click it to attach it.
Expired Past its TestFlight expiry. Dimmed, and you can't select it.
Invalid / Failed Apple rejected the binary.
  1. Open the app and pick the version in the workspace.
  2. Go to the Build tab.
  3. Click a Ready build. Slipway attaches it to the version straight away and the row reads Attached to the version number.
  4. Click the refresh button next to TestFlight builds if a new upload doesn't show up yet.

The inspector on the right shows the Attached build, plus two more sections:

  • Export compliance: the Uses non-exempt encryption toggle answers Apple's encryption question for the attached build. To skip it on every build, add ITSAppUsesNonExemptEncryption to your Info.plist.
  • Tester groups: click a group to give it the attached build. Internal groups are marked · internal. For full TestFlight management, see TestFlight.

Build & Upload from your project#

  1. On the Build tab, click Link your Xcode project, or drop a .xcodeproj or .xcworkspace onto it.
  2. Slipway reads the project and shows a card with the Scheme, Bundle ID (a green check means it matches the app), Signing (Automatic or Manual) and Next (the version and build number it will use).

The link is remembered per app on this Mac. Click Unlink to remove it.

Run it#

  1. Click Build & Upload. The button stays disabled until Slipway finds a shared scheme.
  2. A sheet shows each step as it runs:
    1. Reading project settings
    2. Bumping version and build number
    3. Archiving with xcodebuild (Release configuration, generic/platform=iOS)
    4. Exporting a signed .ipa (App Store Connect export, symbols included)
    5. Uploading to App Store Connect (with altool)
    6. Processing on Apple's side
  3. Click Run in Background if you want to keep working. The sheet can't be closed any other way while a run is in progress.
  4. After the upload, Slipway checks every 30 seconds for up to 45 minutes until Apple finishes processing. Then it reloads the build list and shows Build N is ready in TestFlight.
  5. Attach the new build as described above.

Slipway passes your API key to xcodebuild (with -allowProvisioningUpdates) and to altool, so signing and upload use the same key as everything else. For the run, it writes the key to a temporary folder and deletes it afterwards.

Which version and build number#

  • Version: the version selected in the workspace, or the project's MARKETING_VERSION if none is selected.
  • Build number: your project's CURRENT_PROJECT_VERSION plus one.

Both are passed to the archive as build settings. Slipway doesn't edit your project file.

Note — Because the project file isn't changed, a second Build & Upload works out the same build number again, and Apple rejects a build number it has already seen. Bump CURRENT_PROJECT_VERSION in Xcode (or commit the bump) between uploads.

Why this needs the direct download#

Build & Upload launches xcodebuild and altool as separate processes. A sandboxed Mac App Store app isn't allowed to do that, so Slipway is distributed as a Developer ID–signed, notarized download instead. See Install and update.

Troubleshooting#

"No shared scheme found." In Xcode, choose Product ▸ Scheme ▸ Manage Schemes and tick Shared for your app's scheme. Slipway uses the first shared scheme it finds.

An xcodebuild step fails. The sheet shows the last lines of the log and the error lines from the failing command. Fix the problem in Xcode, then run Build & Upload again. Signing errors are usually easier to diagnose by archiving once in Xcode.

The upload fails with a product error. altool reports Apple's message (for example, a duplicate build number) and the run stops at Uploading to App Store Connect.

Mac apps. Build & Upload archives for iOS only. For a Mac app, upload from Xcode or your CI, then attach the build here.

"xcodebuild not found" in diagnostics. Install Xcode and make sure xcode-select points at it. Help ▸ Copy Diagnostics checks this for you. See Troubleshooting.