Skip to content

Guides

How to handle iOS code signing in CI

Signing works locally and fails intermittently in CI.

6 min read

Signing works locally and fails intermittently in CI.

Why it happens

Certificates, provisioning profiles and the keychain all have to be recreated on an ephemeral machine.

How to fix it

  1. Create a dedicated CI keychain and unlock it explicitly in the job
  2. Use fastlane match with a read-only role so CI fetches rather than regenerates
  3. Store the certificate as a base64 secret and import it at job start
  4. Check profile expiry — annual expiry is the most common sudden failure

Your next build could be twice as fast, at half the price

Start free. Migrating away is the same one line, and we publish that diff too.