iOS signing May 20, 2026 ~19 min read Certificates Provisioning

2026 cloud Mac iOS signing
Renew certs & profiles · SSH vs VNC

Expiry triage · access matrix · portal + Xcode runbook · twenty-minute acceptance

Developer renewing iOS code signing certificates and provisioning profiles on a remote Mac with Xcode and Apple Developer open

Teams that rent an Apple Silicon Mac by the hour often discover signing pain only when something is already red: Xcode says Signing certificate is invalid, Archive refuses to start, or TestFlight uploads fail with profile errors while the lease clock keeps running. Renewal is not one button—it is a chain across Apple Developer, local Keychain, provisioning profiles, and sometimes Fastlane Match on a machine you may not own tomorrow. This guide separates certificate expiry from profile expiry, lists five failure modes that waste lease hours, gives an SSH versus VNC decision matrix you can paste into runbooks, walks an eight-step renewal path with triage tables, adds four quotable facts for change tickets, and closes with a twenty-minute same-user VNC checklist before you ship again. Cross-links: Fastlane Match SSH/VNC matrix, first external TestFlight checklist, Organizer vs Transporter upload matrix, thirty-minute first-use checklist, and clock skew vs certificate errors.

01

What expired, and five pain points on leased nodes

Apple treats code signing certificates (identity in Keychain) and provisioning profiles (entitlements bundle tied to App ID, devices, and distribution type) as separate objects with separate expiry dates. Renewing only one leaves Archive broken. On a cloud Mac you also fight session state: the certificate may be valid in the portal while the rented node still holds yesterday’s profile in ~/Library/MobileDevice/Provisioning Profiles.

Development certificates typically last about one year; distribution certificates follow the same pattern but gate App Store and TestFlight exports. Profiles expire on their own schedule—often annually—and must be regenerated when capabilities, devices, or the backing certificate changes. If you use automatic signing, Xcode may hide the distinction until Organizer fails; manual signing teams see red rows immediately.

On hourly leases, these patterns burn money without moving the build forward:

  1. 01

    Portal-only fix: someone creates a new cert in Safari on a laptop but never imports it on the billed Mac, so SSH builds still codesign with the expired identity.

  2. 02

    Split users: VNC debugging as admin while CI SSH runs as builder; Keychain shows valid certs for one UID only.

  3. 03

    Headless Match loops: match or sigh hangs waiting for “Always Allow” on private key access—misread as Git or bundler slowness.

  4. 04

    Premature revocation: revoking the old distribution certificate to “clean up” before every node and Match branch holds the replacement, causing mass signing failure.

  5. 05

    Teardown before proof: the node is destroyed right after a green Archive locally, but no one captured profile UUID, cert fingerprint, or ASC build row for audit.

If renewal is urgent because production is blocked, pair this section with the no-Mac emergency runbook for lease scope, then return here for signing hygiene. For Apple ID and two-factor friction during renewal, see the visual ASC login guide.

02

SSH vs VNC decision matrix for renewal work

Tag tickets with ssh-ok, vnc-once, or vnc-required before you open a session. Renewal touches more GUI surfaces than a pure upload job because Keychain and Xcode Accounts are involved.

TaskRecommended accessTypical failure signalCommon misread
Create CSR and download new cert (.cer)VNC or local Mac + secure copy to nodeCSR created on wrong MacReuse old CSR after revocation
Double-click install cert into login KeychainVNC (same user as builds)Cert visible in portal, not in security find-identityImport into System keychain only
Regenerate provisioning profile in Developer portalSSH OK (browser in VNC often easier)Profile shows expired in XcodeOnly refresh cert, not profile
Xcode → Settings → Accounts → Download Manual ProfilesVNCYellow warning on teamDelete DerivedData only
Toggle capabilities / App ID changeVNC + portalProfile missing entitlementBlame CocoaPods
Fastlane Match match / match nukeVNC for first unlock; SSH after primedHang at codesign promptRotate API key randomly
Archive + validate signingVNC until green ArchiveNo signing certificate foundUpgrade Xcode patch first
Upload after renewalSee upload matrixInvalid signature on ASCRe-upload without new profile

Rule of thumb: if the second failure mentions Keychain, trust, or “requires a development team,” stop SSH retries and open same-user VNC—another hour of lease without GUI rarely costs less than one focused graphical session.

03

Eight-step renewal runbook (portal, Keychain, Xcode, Match)

Execute in order on the same macOS user that will Archive. Skipping Keychain import after portal work is the most common renewable mistake on rented Macs.

  1. 01

    Inventory before change: In VNC, open Xcode → target → Signing & Capabilities. Note team, bundle ID, profile name, and whether signing is automatic or manual. In Terminal run security find-identity -v -p codesigning and save output to the ticket.

  2. 02

    Confirm expiry in Apple Developer: Certificates → identify Development vs Apple Distribution rows. Profiles → locate the active App Store or Ad Hoc profile for your bundle ID. If the cert expires within your release window, plan rotation—not day-of panic.

  3. 03

    Create or renew the certificate: Use Keychain Access on the rented Mac to generate a Certificate Signing Request, upload to the portal, download the .cer, double-click to install under login keychain, and confirm the private key appears paired with the certificate entry.

  4. 04

    Regenerate the provisioning profile: Edit the profile in the portal (or let automatic signing recreate it). Download the new .mobileprovision or use Xcode Download Manual Profiles. Delete stale local copies if Xcode keeps picking an old UUID.

  5. 05

    Align Match or CI (if used): Run your documented lane—often bundle exec fastlane match appstore or development variant—with readonly off only when intentional. Follow the Match matrix for VNC timing. Commit encrypted repo changes before inviting other machines to pull.

  6. 06

    Clean signing smoke: Product → Clean Build Folder, then build for a physical device or Any iOS Device. Resolve “requires a provisioning profile” before attempting Archive.

  7. 07

    Archive and local validate: Window → Organizer → Archive → Validate App. Capture screenshots or logs if validation fails; map errors to cert vs profile using the table below.

  8. 08

    Hand off to shipping: Once signing is green, proceed with Organizer or Transporter and TestFlight acceptance. Store cert fingerprint and profile UUID in the release notes.

SymptomLikely layerFirst action on cloud Mac
Signing certificate is invalidCertificate / KeychainRe-import .cer; check paired private key; verify clock (NTP runbook)
Provisioning profile expiredProfileRegenerate in portal; Download Manual Profiles in Xcode
No profiles for team matchingTeam / bundle mismatchConfirm ASC team ID matches Xcode Accounts selection
Match decrypt or git errorsSecrets / repoVerify passphrase and deploy key on node; do not nuke without escalation
Archive OK, upload fails signatureExport method / profile typeEnsure App Store profile on Release archive, not development export
bash
# Same-user checks before and after renewal (SSH or VNC terminal)
xcodebuild -version
security find-identity -v -p codesigning | head -n 20
ls -lt ~/Library/MobileDevice/Provisioning\ Profiles | head -n 8

Note: If you are new to the rented node, run the thirty-minute first-use checklist before renewal so Xcode CLT, licenses, and VNC user parity are already green.

04

Distribution vs development: what to renew when

Development renewals unblock day-to-day debugging on registered devices. You need a valid development certificate, a development profile that includes those device UDIDs, and Xcode trusting the team. Teams that only test on simulator may postpone device profile work—but Archive for TestFlight always needs distribution assets.

Distribution renewals gate App Store Connect uploads. After rotating distribution certs, every Mac and CI worker that signs release builds must import the new identity. If you use Match, the encrypted Git repo should become the broadcast mechanism; if you manually manage profiles, expect to touch each node before the next release train.

Capability changes—Push, App Groups, Associated Domains—require both an App ID update and a profile regeneration. Doing this under SSH without portal visibility often fails silently until VNC shows the capability checkbox mismatch. For a broader signing primer on rented hardware, see code signing on a remote Mac and Xcode 26.3 signing with VNC.

When you renew during a node migration or lease extension, export signing evidence before teardown: Keychain export policy permitting, Match passphrase escrow, and profile UUID list. The renewal and migration checklist prevents “valid in portal, missing on the new Mac” repeats.

05

Quotable facts and twenty-minute acceptance checklist

  • Fact 1: Apple Developer lists certificate expiry separately from profile expiry—treat portal timestamps as two checkboxes, not one.
  • Fact 2: A distribution certificate rotation without updating all signing Macs can invalidate every in-flight release until Match or manual import completes—budget coordinated downtime.
  • Fact 3: On ephemeral cloud Macs, the authoritative artifacts for teams using Match are the encrypted Git repo and portal state; the node is a cache you must rebuild per lease.
  • Fact 4: Reserve ≥20 minutes of same-user VNC after renewal for Archive validate plus one upload-path smoke (Organizer or Transporter) before destroying the instance.
CheckActionPass criteria
User parityVNC user equals SSH whoamiSingle UID owns Keychain identities
Cert in Keychainsecurity find-identity shows Apple Distribution (or Development)Valid cert with private key, not expired
Profile freshnessXcode Signing row or latest .mobileprovisionUUID matches portal; expiry beyond ship date
Team loginXcode Accounts without yellow badgeCorrect team selected on target
Archive validateOrganizer Validate App succeedsNo signing or entitlement errors in log
Upload smoke (optional)TestFlight internal build or dry-run uploadASC shows processing or clear compliance message

For pipeline-oriented teams, after manual renewal on the Mac aligns Match, wire CI using the same user or documented import steps—see Fastlane TestFlight on a remote Mac so the next automated build does not regress on a fresh node.

Further reading

Related guides on VNCMac

FAQ

Frequently asked questions

CLI lanes can refresh files after credentials exist, but CSR creation, .cer import, Keychain trust, and Xcode Accounts need a graphical session for the same user. Use SSH for scripted profile fetch only after VNC priming.

They are independent. Verify both in Apple Developer and in Xcode. A fresh cert with a stale profile still fails Archive; a renewed profile on a revoked cert fails codesign.

Only during a planned rotation when every Mac, CI host, and Match branch already holds the replacement. Emergency revocation on a short lease amplifies downtime.

Plan twenty minutes minimum for portal work, Keychain import, Archive validate, and evidence capture. Add time for Match mutations, capability changes, or clock fixes.

Closing

Certificate and profile renewal is where Apple’s web console, local Keychain trust, and Xcode’s idea of your team must agree on a machine that bills by the hour. SSH-only habits work for repeat uploads after trust exists; they break down when expiry forces new CSRs, private key pairing, or Account repair—tasks that hide behind “signing failed” summaries in CI logs.

Owning a Mac removes rental pressure but introduces hardware sleep, single-desk Keychain drift, and no clean-room nodes when a compromised cert must be rotated under audit. A leased remote Mac with VNC is not a luxury overlay; it is how you reproduce Apple’s expected graphical consent flows without buying another workstation for each contractor.

When you need a dedicated Apple Silicon host to renew signing assets and validate an Archive in one session, use VNCMac: open the deploy card below or the English purchase page, then run section five’s checklist before you invite TestFlight testers again.