{"slug":"ios-signing","title":"iOS certificates and profiles","summary":"How to create the Apple distribution certificate and an App Store provisioning profile, and where each one goes in FluxNative.","body":"Apple signs apps with two pieces. The **distribution certificate** proves the build comes from your team. The **provisioning profile** ties that certificate to one app's bundle ID. FluxNative stores the certificate once for the organization and a profile for each app.\n\n## 1. Create the distribution certificate\n\nYou need a Mac for this step once. The certificate is then reused by every app in the organization.\n\n1. On the Mac, open **Keychain Access**, then **Certificate Assistant**, **Request a Certificate From a Certificate Authority**. Enter your email, choose **Saved to disk**, and save the `.certSigningRequest` file.\n2. In the Apple Developer site, open **Certificates, Identifiers & Profiles**, then **Certificates**, and add an **Apple Distribution** certificate. Upload the request file and download the `.cer`.\n3. Double-click the `.cer` to add it to Keychain Access.\n4. In Keychain Access, find the certificate under **My Certificates**, right-click it, and choose **Export**. Save it as a `.p12` with a password.\n\nUpload the `.p12` and its password in **Publish**, when you connect the Apple account. See [Connect store accounts](/docs/connect-store-accounts).\n\n> [!NOTE]\n> FluxNative does not create or revoke certificates. Apple limits how many distribution certificates a team can have, so reuse the one your team already has if you can export it.\n\n## 2. Register the bundle ID\n\nEach app has a bundle ID such as `com.example.habits`. In **Publish**, **Readiness**, choose iOS and click **Fix automatically** on **Bundle ID**. FluxNative registers it with Apple using the App Store Connect API key. You can also register it yourself under **Identifiers** in the Apple Developer site; the checklist shows the exact value with a copy button.\n\n## 3. Create the provisioning profile\n\n1. In the Apple Developer site, open **Profiles** and add a profile.\n2. Under **Distribution**, choose **App Store Connect**.\n3. Select this app's bundle ID.\n4. Select the distribution certificate you uploaded.\n5. Name it and download the `.mobileprovision` file.\n\nUpload it in **Build**, iOS, under **Created for this app**, with **Save profile for this app**. Each app needs its own profile, because the profile only matches one bundle ID.\n\n## Expiry\n\nDistribution certificates expire after a year. When the certificate is within 30 days of expiry, the readiness checklist warns you. FluxNative will not revoke it. Create a new certificate, upload it, and regenerate each app's profile with the new certificate.\n\n## Checklist\n\n1. Apple Developer Program membership is active.\n2. App Store Connect API key connected in Publish.\n3. Distribution certificate `.p12` uploaded with its password.\n4. Bundle ID registered.\n5. App Store provisioning profile for that bundle ID uploaded in Build.","sectionSlug":"native-builds","sectionTitle":"Build for devices","updatedAt":"2026-09-23T22:51:25.250Z","previous":{"slug":"ios-builds","title":"iOS builds"},"next":{"slug":"versions-and-build-numbers","title":"Versions and build numbers"}}