iOS 签名 2026年5月20日 约 17 分钟 证书续期 描述文件

2026 租云端 Mac 续 iOS 证书
与描述文件怎么做?

三类到期对象 · SSH/VNC 决策表 · ASC→钥匙串→Xcode · 20 分钟验收

在租用远程 Mac 上透过 VNC 处理 Xcode 签名、证书与描述文件续期的工作场景

没有自有 Mac、却在租用云端节点上维护 iOS 签名链的独立开发者与外包团队,常在邮件提醒「证书即将过期」时陷入两难:该先登入 Apple Developer 点续期,还是先在 Xcode 里下载描述文件?更糟的是,ASC 显示已更新,本地却仍报 Signing certificate not foundProvisioning profile expired——于是在 SSH 里反复删 DerivedData,把按小时计费的租期烧成零产出。本文以「到期续期、吊销后重签、续期后仍 Signing 失败」为单一主线:先厘清三类到期对象,再给仅 SSH / SSH+VNC 分段 / 全程 VNC决策表、ASC → 续期 → 钥匙串 → Xcode推荐顺序与八步 Runbook续期后仍失败的分界,以及20 分钟可勾选验收表;并与站内《远程 Mac 首次使用清单》《系统时间与证书》《Fastlane Match》《TestFlight 外测》《紧急上架》互链。

01

先分清三类「到期」:别在错误层级上续费

租用远程 Mac 时,最容易浪费时间的是把三种不同生命周期混为一谈。它们的修复入口、是否需要 VNC、以及对已上架构建的影响都不相同:

  1. 01

    Apple Developer 证书(Certificate):分发证书(Apple Distribution / iOS Distribution)与开发证书(Apple Development)在开发者后台有明确到期日。过期后,依赖该证书签名的所有描述文件都会连带失效;仅替换 .mobileprovision 无法根治。

  2. 02

    描述文件(Provisioning Profile):绑定 App ID、Team、设备列表(开发用)与 Capability。证书仍有效时,描述文件可单独过期;Xcode 常提示 profile doesn't include signing certificate 或设备未包含。此时应在 ASC/Developer 刷新描述文件并让 Xcode 重新下载,而非盲目 Revoke 证书。

  3. 03

    本机钥匙串会话(Keychain session):证书与私钥已汇入,但未解锁登入钥匙串、未对 Xcode 点「始终允许」,或 SSH 用户与 VNC 桌面用户不一致,会表现为「后台明明有效、本地却找不到身分」。这类问题不是 ASC 续期能解决,必须在图形会话修复授权。

  4. 04

    吊销(Revoke)与续期(Renew)的差异:续期通常生成新证书 + 新私钥,旧证书在宽限期后不可用;吊销则立即让旧签名链失效。团队若用 Match,应在变更前确认 Git 仓库与 CI 只读节点,避免一半机器仍拉旧档。

  5. 05

    租用边界:云端节点上的钥匙串是会话资产;租期结束若未导出 .p12 或未把 Match 仓库当唯一真相源,换机后会重演「邮件又说快到期」的恐慌。续费与换节点请对照《续费与换节点备份》

常见误判:看到 Xcode 红字就 Revoke 所有证书。若只是描述文件过期或本机钥匙串未授权,Revoke 会迫使全队重新签名,在租用计费环境里成本极高。

实务上建议在工单标题写清层级,例如「L1-cert-expiry」「L2-profile-only」「L3-keychain-ui」,避免值班同时改三层导致无法回滚。

02

SSH / VNC 决策表:什么能在终端做、什么必须开桌面

下列矩阵按任务 → 推荐接入 → 典型失败信号 → 常见误判排列,可直接贴进 Runbook。原则与《Organizer 与 Transporter》一致:涉及 Apple ID、钥匙串对话框、Xcode Accounts 图形刷新的步骤,应标记为 needs-vnc

任务推荐接入典型失败信号常见误判
在 Developer 后台续期/建立证书浏览器(本机或 VNC Safari)2FA 收不到码以为 SSH 能代替网页
下载并安装 .cer / .p12VNC(双击 + 钥匙串)import 成功但 codesign 找不到装进 System 而非 login
Xcode → Settings → Accounts 刷新VNCSSH 里 session 无 Team只重装 CLT
Signing & Capabilities 自动签名切换VNC自动签名灰掉手改 project.pbxproj
security find-identity 探针SSH 或 VNC 终端列表为空误判为证书未续
手动安装 .mobileprovisionSSH(拷贝到目录)+ VNC 验证UUID 仍指向旧档未删 ~/Library/MobileDevice 旧档
fastlane match / sighSSH(仓库已配置)挂起无输出其实是钥匙串弹窗
Revoke 后全队重签SSH 编排 + VNC 抽样验收CI 与本地不一致只改一台云端机

经验法则:ASC/Developer 已显示新证书,但 find-identity 仍只有旧 CN——先查用户是否一致、钥匙串是否解锁,再查是否下载到新描述文件;不要在第三层就 Revoke。

03

推荐顺序:ASC → 续期 → 钥匙串 → Xcode(八步 Runbook)

在租用节点上,建议固定以下顺序,把「需要点按」的步骤集中在一次 VNC 会话完成,减少来回切换:

  1. 01

    冻结变更窗口:通知团队暂停 Release 构建;若用 Match,确认无人同时 match nuke。先对照时间与 NTP,排除「尚未生效」假阳性。

  2. 02

    Developer / ASC 侧续期:Certificates, Identifiers & Profiles 中对过期项执行 Renew 或建立新证书;记录新证书 Serial / 到期日。若曾泄漏私钥,选 Revoke 并走重建流程,而非续期。

  3. 03

    刷新描述文件:对受影响 App ID 重新 Generate Profile;确认 Capability(Push、App Groups 等)与工程一致。下载 .mobileprovision 备份到密钥管理系统。

  4. 04

    VNC 汇入私钥:双击 .p12,选择登入钥匙串,密码正确;在「允许 Xcode 存取」对话框选始终允许。详见《远程 Mac 证书配置》《Xcode 签名图形指南》

  5. 05

    Xcode Accounts:Settings → Accounts → 选 Team → Download Manual Profiles 或依团队规范启用 Automatic Signing。确认无黄色警告。

  6. 06

    工程侧对齐:Target → Signing 选正确 Team;若用手动描述文件,比对 UUID 与刚下载档案一致。清理过期 ~/Library/MobileDevice/Provisioning Profiles 中同名旧档(可先备份)。

  7. 07

    烟测构建:先 Debug 真机或模拟器,再 Release Archive;Match 团队在此步执行 match appstore 或 readonly 同步。

  8. 08

    证据留存:截图 Accounts 页、find-identity 前几行、Archive 成功时间戳;若要上传,接上传决策表

bash
# 与 VNC 同一 macOS 用户执行(SSH 或桌面终端均可)
whoami
date
/usr/bin/security find-identity -v -p codesigning | head -n 20
ls -lt ~/Library/MobileDevice/Provisioning\ Profiles | head -n 5

若团队使用自动签名,步骤 05–06 可由 Xcode 代劳,但首次在云端机上仍建议 VNC 亲眼确认 Team 与 Bundle ID 无误。若使用Fastlane Match,应以仓库为权威:后台续期后执行 match 同步,而非手工改每台机——细节见Match 专文

04

续期后仍失败:按层级分界,避免「再 Revoke 一次」

下列表格用于值班分流:现象 → 优先怀疑层级 → 建议动作。目标是在租用环境里最少次数恢复可 Archive 状态。

现象优先层级建议动作
Certificate not valid yetL0 时间核对 NTP/时区后重试
No signing certificate foundL3 钥匙串同用户 VNC 汇入 p12 + 始终允许
Profile doesn't matchL2 描述文件删旧 UUID、重新下载
find-identity 有证书但 Archive 失败L2/L3比对 profile 内嵌证书 CN 与 identity
仅 CI 失败、本地成功用户/钥匙串统一 Runner 用户与 Match readonly
续期后全员失败L1 证书确认是否 Revoke 未同步 Match
Capability 相关错误ASC 设定改 App ID 后必须重生描述文件
  • 结论 1:「后台已续、本地仍红」在租用 Mac 上超过一半是 L3,不是证书没续成功。
  • 结论 2:Revoke 是最后手段;执行前必须有 Match 备份与全员停机窗口。
  • 结论 3:Apple ID / 2FA 问题应先走《Apple ID 与 ASC 图形化》,勿与证书续期混在同一工单。
  • 结论 4:续期完成后的第一个 Release Archive应在 VNC 下完成并存证,再交 CI 无人值守。
05

20 分钟验收清单与可引用结论

维护窗口建议预留 ≥20 分钟,在同一 VNC 用户下逐项勾选;通过后再释放团队构建。

核对项操作要点通过标准
用户一致VNC 用户 = SSH whoami无跨用户钥匙串
Developer 证书后台到期日晚于维护日+30天Serial 与工单记录一致
描述文件UUID 与工程一致Xcode 无 profile 黄标
find-identity含正确 Distribution CN至少一条 valid
Debug 烟测真机或模拟器 Run安装成功
ArchiveRelease + OrganizerArchive 成功有时间戳

新开通的云端节点请先完成首次使用清单再执行上表。续期后若要外测,接外测检查表;紧急上架场景可并读《手术室》

延伸阅读

与本文配套的站内长文

FAQ

常见问题

底层证书仍有效且 Capability 未变,刷新描述文件常可恢复。若证书已过期或被吊销,必须先在 Developer 续期/重建,再让 Xcode 下载并落地钥匙串。

find-identity、汇入脚本、xcodebuild 可在 SSH 执行;2FA、钥匙串「始终允许」、Accounts 刷新仍需与构建同一用户的 VNC。

按第四节分界:时间 → 钥匙串用户 → 描述文件 UUID → 证书/Match 同步。在未备份前 Revoke 整条仓库。

已处理完成的构建通常仍可测;新 Archive 必须用新证书重签。请更新外测检查表中的构建号与 CI 密钥。

结语

证书与描述文件续期不是「点一下 Renew 就结束」,而是后台物件、本机钥匙串、工程设定三层对齐的过程。在按小时计费的云端 Mac 上,把 VNC 当作签名链的标准介面而非救火通道,才能把续期压进可预测的 20 分钟窗口,并在换机、续费时保留可交接的证据。

若你需要按任务租用带完整桌面会话的物理 Mac,在本文第五节同款表格下完成续期验收,可透过 VNCMac 开通远程节点:主按钮进入购买页;连接方式可先查阅站点帮助页中的 SSH 与 VNC 说明。