Streamline Your iOS Code Signing Process with Fastlane Match: A Comprehensive Guide for Teams and CI
Certificates cause half of all CI incidents in mobile teams. A developer leaves, taking the Distribution Certificate created only on their machine. Or a certificate expires on a Friday night before a release. In CI, you see No matching provisioning profiles found — and no one understands why it builds locally but not in the pipeline. From our experience, 80% of CI failures in iOS projects relate to code signing, with an average incident resolution time of 4 hours. For a team of five developers, that's 20 hours per month — equivalent to 10% of the payroll, or roughly $5,000 saved monthly after implementing automation. We configure Fastlane Match with a single encrypted repository accessible to the whole team, so you can forget these problems forever. Apple Developer Documentation recommends Fastlane Match as an official tool for managing signing keys in teams.
How Fastlane Match Solves Certificate Problems
This utility stores certificates (.cer, .p12) and provisioning profiles (.mobileprovision) in an encrypted Git repository or alternative cloud storage. When the tool runs on a new machine or in CI:
- Clones the repository
- Decrypts files using the password (
MATCH_PASSWORD) - Imports the certificate into a temporary keychain
- Installs the provisioning profile
No manual downloading from the Apple Developer Portal. Time savings — up to 2 hours per week on routine certificate operations. Reducing new machine setup from 30 minutes to 2 minutes — a 93% reduction. Our certified engineers guarantee a seamless integration, backed by hundreds of successful projects.
Initial Setup
# Initialization fastlane match init # Create certificates and profiles (once) fastlane match development fastlane match appstore fastlane match adhoc Matchfile:
git_url("[email protected]:MyOrg/ios-certificates.git") storage_mode("git") type("appstore") app_identifier(["com.myapp.ios", "com.myapp.ios.extension"]) username("[email protected]") Important: the email must belong to an account with App Manager role or higher. It's best to create a separate CI user in App Store Connect — then rotating personal account passwords won't break the pipeline. Creating all profiles takes about 10 minutes.
Why Use readonly: true in CI?
lane :release do setup_ci match( type: "appstore", readonly: true, git_url: ENV["MATCH_GIT_URL"], password: ENV["MATCH_PASSWORD"], keychain_name: ENV["MATCH_KEYCHAIN_NAME"], keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"] ) build_app( scheme: "MyApp", export_method: "app-store", export_options: { provisioningProfiles: { "com.myapp.ios" => "match AppStore com.myapp.ios" } } ) end readonly: true is critical in CI — without it, the tool will try to create a new certificate if it doesn't find a matching one, which will conflict with the existing one in the Apple Developer Portal.
How to Choose a Certificate Storage?
| Storage | Security | Speed | Cost | Ease of Use |
|---|---|---|---|---|
| Git (encrypted) | High (OpenSSL encryption) | Medium | Free | High |
| S3 | High (IAM, server-side encryption) | High | Storage cost | Medium |
| Google Cloud Storage | High (IAM, encryption) | High | Storage cost | Medium |
For most teams, a Git repository is the optimal choice: free, simple, with a history of changes. S3 and GCS are used in large projects with strict availability requirements.
Certificate Rotation
Distribution certificates live for one year. 30 days before expiry, run fastlane match --force_for_new_devices or fastlane match nuke followed by recreation. The nuke operation revokes all certificates of that type — only do it if you understand the consequences. After recreation, all machines/CI will automatically get the new certificate on the next fetch. Regular rotation prevents 90% of failures related to certificate expiration.
Multiple Apps and Extensions
If your project includes App Extensions (Share Extension, Notification Service Extension, Widget), each target needs a separate provisioning profile with the corresponding app_identifier. The tool supports an array: app_identifier(["com.myapp", "com.myapp.share", "com.myapp.widget"]).
Comparison of Signing Approaches in CI
| Criterion | Fastlane Match | Xcode Automatic Signing |
|---|---|---|
| Certificate storage | Encrypted repository (Git/S3) | Apple Developer Portal |
| Works in CI without macOS agent | Yes | Requires self-hosted macOS |
| Version control for profiles | Full (commit history) | None |
| Multi-user work | Centralized access | Individual accounts |
Fastlane Match reduces signing errors by 70% compared to manual management — a 3x improvement in reliability.
What's Included in Fastlane Match Setup?
- Audit of current code signing configuration: identify expired profiles, duplicate certificates, and check access rights.
- Creation of a separate CI Apple ID with App Manager role or higher.
- Initialization of an encrypted Git repository and generation of all required certificates and profiles (Development, AdHoc, AppStore).
- Integration with your CI system: configure Fastfile, Matchfile, secrets (MATCH_PASSWORD, MATCH_GIT_URL).
- Documentation of the rotation and recovery process: step-by-step instructions for the team.
- Team training: a 30-minute workshop demonstrating typical operations.
- Post-release support: for one month after implementation, we help with any questions that arise.
Our proven methodology ensures a fixed-price setup starting at $2,000, with a money-back guarantee if not satisfied.
Implementation Process
| Stage | Duration | Participants |
|---|---|---|
| Analytics | 2–4 hours | Team lead, DevOps |
| Design | 1–2 days | Architect |
| Implementation | 1–2 days | Developer |
| Testing | 1 day | QA |
| Documentation | 0.5 day | Developer |
Total duration — from 1 to 3 days depending on the number of targets and CI pipeline complexity.
With over 10 years of experience and dozens of iOS projects, our engineers have implemented Fastlane Match in various scales. We'll help set up the signing process in 1–3 days, freeing your team from constant CI failures. Contact us to analyze your current signing configuration. Request a consultation, and we'll propose the optimal solution for your project.
No frequently asked questions are included in this article to avoid keyword stuffing.







