Certificates & Provisioning Profiles
Overview
Section titled “Overview”RunnerHub supports two modes for certificate and provisioning profile management:
- Automatic — RunnerHub generates and manages certificates via the Apple App Store Connect API
- Manual — You upload your own P12 certificate and .mobileprovision files
Both modes are fully supported. Choose the approach that fits your workflow best.
Automatic Certificate Management
Section titled “Automatic Certificate Management”When you add an API key to RunnerHub as a credential, the system:
- Generates a Certificate Signing Request (CSR) — Creates a unique CSR on RunnerHub’s backend
- Creates or Reuses a Certificate — Requests an Apple Distribution certificate from Apple
- If a valid certificate already exists under your team, RunnerHub reuses it
- If the certificate is expired or doesn’t exist, RunnerHub creates a new one
- Stores the Certificate — Encrypts and stores the certificate private key in the RunnerHub database
Each credential maintains its own certificate(s). When you configure an app, you select which credential to use, and that credential’s certificates are used for signing.
Provisioning Profile Management
Section titled “Provisioning Profile Management”RunnerHub automatically fetches provisioning profiles during job execution:
- Profile Creation: If a profile doesn’t exist for your bundle ID and signing type, RunnerHub creates one through the Apple API
- Profile Caching: Created profiles are cached and reused across builds
- Profile Installation: Profiles are installed into the ephemeral keychain only during job execution
- Cleanup: Profiles are deleted from the ephemeral keychain after the job completes
The provisioning profile is specific to:
- Your bundle ID (e.g.,
com.example.myapp) - Your signing type (development, adhoc, or appstore)
- Your team ID
Signing Types
Section titled “Signing Types”RunnerHub supports three signing types, configurable per app:
| Signing Type | Use Case | Certificate Type |
|---|---|---|
| development | Development and testing | Apple Development |
| adhoc | Ad-hoc distribution | Apple Distribution |
| appstore | App Store submission | Apple Distribution (default) |
Configure your signing type in App Settings — see Per-App Signing.
Certificate Expiry
Section titled “Certificate Expiry”RunnerHub tracks certificate expiration dates:
- Before Each Build: RunnerHub validates that your certificate hasn’t expired
- Auto-Renewal: If a certificate is within 30 days of expiration, RunnerHub will create a new one
- Expired Certificate: If a certificate has expired, RunnerHub creates a replacement automatically
You don’t need to manually renew or rotate certificates.
Manual Mode - Using Your Own Certificates
Section titled “Manual Mode - Using Your Own Certificates”In manual mode, you upload and manage your own P12 certificate(s) and provisioning profiles. You can upload multiple certificates per app — for example, a development certificate and a distribution certificate — and all will be available during your build:
Step 1: Export Your Certificate as P12
Section titled “Step 1: Export Your Certificate as P12”From your local machine:
- Open Keychain Access
- Find your Apple Distribution or Development certificate
- Right-click and select Export
- Choose Personal Information Exchange (.p12) format
- Set a password (required for security)
- Save the file
Step 2: Upload P12 Certificate(s) to RunnerHub
Section titled “Step 2: Upload P12 Certificate(s) to RunnerHub”In the RunnerHub dashboard:
- Go to App Settings → Code Signing
- Select Manual as the signing mode
- Click Upload Certificate
- Select your .p12 file and enter the password
- Click Upload
- Repeat steps 3-5 for each additional certificate (e.g., development + distribution)
RunnerHub will:
- Decrypt and parse your P12 file
- Validate that the certificate exists in your Apple Developer account
- Verify the certificate matches your Team ID
- Store the certificate private key encrypted in the database
All uploaded certificates are installed into your build keychain, and xcodebuild automatically selects the correct certificate based on your provisioning profile.
Step 3: Upload Provisioning Profiles
Section titled “Step 3: Upload Provisioning Profiles”Add provisioning profiles for your app:
- Click Add Provisioning Profile
- Select your .mobileprovision file
- Click Upload
- Repeat for each profile (development, ad-hoc, App Store, etc.)
RunnerHub validates each profile:
- ✓ Profile format is valid
- ✓ Profile is not expired
- ✓ Profile matches your Bundle ID
- ✓ Profile exists in your Apple Developer account
P12 Upload Validation
Section titled “P12 Upload Validation”RunnerHub validates your P12 file:
- ✓ P12 format is valid and readable
- ✓ Certificate is not expired
- ✓ Certificate exists in your Apple Developer account
- ✓ Certificate matches your team ID
If validation fails, you’ll see an error message explaining what went wrong.
Managing Manually Uploaded Certificates and Profiles
Section titled “Managing Manually Uploaded Certificates and Profiles”When using manual mode:
- Multiple Certificates: Upload multiple certificates (development, distribution, enterprise, etc.) to your app
- Automatic Selection: All uploaded certificates are installed into the build keychain; xcodebuild automatically selects the correct one based on your provisioning profile
- Profile Selection: RunnerHub automatically selects the correct profile based on your app configuration
- Expiry Tracking: Certificate and profile expiration dates are tracked and displayed in the dashboard
- Certificate Removal: You can remove individual certificates independently; other certificates and profiles are preserved
- Profile Removal: You can remove individual profiles or all profiles
- Mode Switch: Switching from manual to automatic mode will remove all uploaded certificates and profiles
Manual Mode Best Practices
Section titled “Manual Mode Best Practices”- Strong Password: Use a strong password when exporting your P12 files
- Multiple Certificates: Upload both development and distribution certificates if you use them
- Profile Types: Upload all three profile types (Development, Ad-hoc, App Store) if you use them
- Bundle ID Verification: Ensure your provisioning profiles match your app’s Bundle ID exactly
- Keep Profiles Updated: Renew and re-upload profiles before they expire
- Certificate Management: Each uploaded certificate is independent; you can remove one without affecting others
- Secure Storage: Delete local P12 copies after uploading to RunnerHub
Deleting and Regenerating Certificates
Section titled “Deleting and Regenerating Certificates”Automatic Mode
Section titled “Automatic Mode”To reset certificates and profiles for a credential:
- In Workspace Settings > Apple Signing
- Select the credential you want to modify
- Click Remove Certificate
- RunnerHub will:
- Delete the stored certificate for that credential
- Revert to auto-generating certificates on the next build that uses this credential
Deleting a credential does not:
- Revoke the certificate on Apple’s servers
- Affect in-progress builds
- Affect provisioning profiles already installed on devices
- Affect other credentials or apps using other credentials
To delete an entire credential (and all its apps must be updated to use a different credential or have none):
- In Workspace Settings > Apple Signing
- Click the Delete button next to the credential name
- Any apps using this credential will have their
apple_signing_credential_idset to null
To revoke a certificate in Apple Developer:
- Go to App Store Connect > Certificates, Identifiers & Profiles
- Click Certificates
- Find the certificate and click the X to revoke it
Manual Mode
Section titled “Manual Mode”To remove your uploaded certificates and profiles:
- Go to App Settings > Code Signing
- To remove a specific certificate: Click the X next to the certificate name; other certificates and profiles are preserved
- To remove all certificates and profiles: Click Remove Certificate → Confirm (this clears all manual signing configuration)
You can then either:
- Upload new certificates
- Switch to Automatic mode (which will use workspace API key)
Certificate Chain & WWDR
Section titled “Certificate Chain & WWDR”RunnerHub automatically handles the Apple Worldwide Developer Relations (WWDR) intermediate certificate:
- Automatic Import: The WWDR certificate is imported to your build system automatically
- Trust Chain: Ensures your certificates are properly trusted by macOS
- No Manual Setup: You don’t need to install anything manually
Troubleshooting
Section titled “Troubleshooting”“Certificate not found in your Apple account”
- The P12 certificate you uploaded doesn’t match your Apple account
- Re-export the correct certificate from your Apple Developer account
“Certificate expired”
- If you uploaded a P12, renew or upload a new one
- If using auto-generated certificates, RunnerHub will create a replacement automatically
“No provisioning profile found”
- Verify bundle ID is registered in your Apple Developer account
- Check that the bundle ID is correctly configured in App Settings
See Code Signing Troubleshooting for more help.