克魔助手
全部文章

UDID、证书和描述文件,一次讲清

3 分钟阅读分发入门

iOS 代码签名有四个部件,讲解的顺序通常跟着苹果后台的界面走 —— 而那不是讲得通的顺序。下面是讲得通的那个顺序。

四个部件

证书说明你是谁。由苹果签发给某个开发者或团队,和私钥一起存在钥匙串里,会过期 —— 通常一年。私钥丢了,证书就废了,只能重新签发一个。

App ID 说明是哪个 App。它是 Bundle ID,加上这个 App 被允许使用的能力清单 —— 推送、App Groups、HealthKit、关联域名等等。

设备就是一个 UDID:某一台实体手机或平板的唯一标识。苹果开发者计划对每年每种类型可注册的设备数量有上限。

描述文件(Provisioning Profile) 把前三者绑在一起:这个证书可以给这个 App ID 签名,并装到这些设备上。它会过期。它在打包时被嵌进 IPA 里。

最后这句话是最值得记住的。

为什么改了描述文件没有用

描述文件是烤进包里的。你在开发者后台往描述文件里加一个设备 UDID,对任何已经存在的 IPA 都毫无影响 —— 你硬盘上那个文件里装的还是旧的描述文件、旧的设备列表。

所以顺序永远是:加 UDID → 重新生成描述文件 → 重新打包 → 重新分发。每年都有团队在这上面浪费好几个小时,通常是加完设备把同一个包又发了一遍,然后困惑于它还是装不上。

UDID 从哪来

UDID 是设备的属性,不是账号的属性。你得从那台实体手机上拿。

不要从某个 2023 年有人维护过的表格里抄。我见过的“为什么装不上”工单里,有一半最后查出来 UDID 属于一台团队早就没有的设备,是从一份没人核对过的清单里抄进去的。

描述文件类型,各自允许什么

描述文件 用什么签 能装到
开发 开发证书 仅已注册设备
Ad Hoc 分发证书 已注册设备,每种类型上限 100 台
企业 企业证书 任意设备,用户信任之后
App Store 分发证书 直接装不了 —— 只能提交商店

有两个后果值得记牢:

  • App Store 包永远无法侧载。这不是 bug,也没有什么开关。
  • 企业分发是给自己组织内部用的。拿它对公众分发是违规,结局是证书被吊销 —— 那会让用它签过的每一个 App 的每一次安装全部失效。

为什么包会在某个周二突然失效

因为有东西过期了,而过期是一个日期而不是一个事件,所以没有任何东西提醒你。

  • 证书过期。 所有用它的描述文件同时失效,所有包一起装不上。
  • 描述文件过期。 那个 App 的包装不上。
  • 证书被吊销。 和过期一样,但是立即生效,而且通常是有人在清理后台。

特征永远是:昨天还好好的,没人改过任何东西,所有设备同时坏掉。如果只有一台设备坏,那是 UDID 问题,不是过期问题。

“信任”这一步

装上的开发或企业包在用户于设备上信任证书之前不会启动:设置 → 通用 → VPN 与设备管理。

这一步很容易把人绊住,因为安装成功了。什么都没失败,App 就在主屏幕上,只是打不开。每台设备每个证书做一次。

怎么让它不再反复发生

三个习惯,每个大约五分钟:

  1. 一份和现实对得上的设备清单。 设备进机队时从实体设备上读 UDID,别凭记忆。
  2. 一份到期时间记录。 证书和描述文件,记进日历。“周二突然坏了”这一整类问题就消失了。
  3. 设备进出机队时审一遍。 上面装了哪些描述文件,有没有不是你放上去的。

这些活都不有趣,但每一件都比它替掉的那个下午便宜。