ci(apple): persistent signing — stop minting throwaway certs every run#34
Conversation
The Apple archive jobs signed with CODE_SIGN_STYLE=Automatic + -allowProvisioningUpdates. On ephemeral CI runners that creates a NEW Development certificate on every run, which accumulated dozens of "Created via API" Development certs and exhausted the account's certificate limit — making every archive fail with "Your account has reached the maximum number of certificates" + "No profiles found". The CI release path had in fact never produced a signed build. Fix: manual signing with a persistent Apple Distribution certificate and App Store provisioning profiles seeded as GitHub secrets. - Add composite action .github/actions/setup-apple-signing: imports the .p12 into a temporary keychain (set-key-partition-list for headless codesign) and installs profiles into ~/Library/MobileDevice/Provisioning Profiles. - apple-release.yml / apple-production.yml: call the action, drop -allowProvisioningUpdates, build with CODE_SIGN_STYLE=Manual. - ExportOptions.plist: signingStyle automatic -> manual. - docs/ops/ci-signing-setup.md: one-time setup (revoke garbage certs, export .p12, download profiles, set BUILD_CERT_P12_B64 / BUILD_CERT_PASSWORD / PROVISIONING_PROFILES_B64 secrets). Requires the three new secrets before the next build will sign. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 25 minutes and 12 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…locally) The CI-signing PR (#34) flipped apple/ExportOptions.plist to manual, but the real release path is fastlane beta_all run LOCALLY (see fastlane/report.xml 2026-05-30), and that lane consumes this same ExportOptions.plist (Fastfile EXPORT_OPTIONS_PATH). Manual signing would break the working local release, so restore automatic. The CI workflows were never the release path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Problema
Os jobs de archive Apple assinavam com
CODE_SIGN_STYLE=Automatic+-allowProvisioningUpdates. Em runners efêmeros do GitHub, isso cria um certificado de Development novo a cada run — acumulou dezenas de certsCreated via API / Developmente estourou o limite de certificados da conta. Resultado: todo archive falhava comYour account has reached the maximum number of certificates+No profiles found. O caminho de release no CI nunca produziu um build assinado (falhou em abril e agora).Causa raiz
-allowProvisioningUpdatesnum runner sem certificado persistente = fábrica de certificados-lixo. O próprioExportOptions.plistjá documentava a solução prevista ("CI step sets this up with fastlane match or manual p12 import") — só nunca foi implementada.Correção (signing manual persistente)
.github/actions/setup-apple-signing: importa um.p12de Apple Distribution num keychain temporário (set-key-partition-listp/ codesign headless) e instala os provisioning profiles.apple-release.yml/apple-production.yml: chamam a action, removem-allowProvisioningUpdates, buildam comCODE_SIGN_STYLE=Manual.ExportOptions.plist:signingStyleautomatic → manual.docs/ops/ci-signing-setup.md: setup único (revogar certs-lixo, exportar.p12, baixar profiles, criar os 3 secrets).BUILD_CERT_P12_B64.p12Apple DistributionBUILD_CERT_PASSWORD.p12PROVISIONING_PROFILES_B64.tar.gzdos profiles App StorePasso-a-passo completo em
docs/ops/ci-signing-setup.md. Também é preciso revogar os certsCreated via API / Developmentno portal pra liberar o limite.🤖 Generated with Claude Code