签名到底改了包里的什么东西?Info.plist 那一层讲透

一句话结论:签名不是”重写应用”,它是”往包里加盖一份凭证”。业务逻辑、界面、资源这些绝大多数内容原封不动;被改的,是跟系统校验有关的几个目录和文件。理解这一点,后面遇到”为什么重签之后某个功能不好使”就有了排查方向。

一个包里大致有什么

把 IPA(iOS 安装包)用解压工具打开,通常能看到这样的结构:

  • Payload(包体目录):里面放着应用主体,是整个包的核心。
  • 应用主体本身:右键显示包内容可以继续往下看,里面有可执行文件、资源图片、界面文件、以及各类配置。
  • Info.plist(应用配置清单):记录包名、版本、权限描述、支持的设备等关键信息。
  • embedded.mobileprovision(内嵌的描述文件):记录这张凭证允许谁装、允许用到哪些能力。
  • _CodeSignature(签名数据目录):存放每个文件的校验值以及整体的签名信息。

签名这一层动的就是后三项,外加把可执行文件的某些字段重写一遍。

第一处改动:换成新的描述文件

重签时,原来那张描述文件会被替换成新开发者账号颁发的那张。这张文件里写着三件关键事:

  • 允许安装到哪些设备上。企业凭证不限制具体设备,临时分发(UUID)凭证会写死设备清单。
  • 允许用到哪些能力,也就是 entitlements(权限声明)。推送、后台模式、钥匙串共享、应用组,都在这里列着。
  • 有效期到什么时候。

如果新凭证漏掉了原开着的某一项能力,对应的功能就会静默失效——装得上、打得开,但一用到就崩或者没反应。

第二处改动:权限声明可能被收窄

这里是最容易出事的地方。某些能力属于”需要特殊授权”的类别,普通的凭证不一定带。比如:

  • 推送:需要跟 App ID(应用标识)匹配的环境配置,开发环境与生产环境不能混着用。
  • 应用组与钥匙串共享:用于同账号下多个应用之间共享数据,换到下家账号时该项前缀会变,共享自动失效。
  • 健康数据、钱包、CarPlay(车载系统)这类:通常需要向苹果单独申请,不是勾选就能用。

所以交付时要做的不是”签完就走”,而是把这份清单交给签名方逐项对照。少了哪一项,装完之后你才会发现某个功能没了。

第三处改动:配置清单里的部分字段

Info.plist(应用配置清单)里有一部分字段是允许在重签时调整或注入的,比如渠道标识、显示名称。这也是为什么同一份包能派生出多个不同名字的分发包。

但有三个字段不建议动:

  • Bundle ID(应用包名,应用的唯一标识):改了之后,老用户无法覆盖安装,会被当成另一个新应用。
  • 版本号与构建号:这两个决定了能不能覆盖更新,填乱了会导致”装不上”或者”装完还是旧的”。
  • 最低支持系统版本:填得太新,老机型直接被拦在门外。

签名不会碰什么

把边界也划清楚,能少很多误会。以下这些签名这一层是不动的:

  • 业务代码与界面:功能逻辑不会因为你换了签名方就变化。
  • 埋点与第三方 SDK(软件开发工具包):它们照常运行,除非它们依赖上面提到的某项被收窄的能力。
  • 包内的服务器地址、接口配置:这些属于业务配置,跟签名无关。

换句话说,如果重签之后某个功能不对了,先怀疑”能力被收窄”和”包名变了”,几乎不会是”代码被改了”。

交付时该怎么核

给一个简单的三步检查:

  1. 把原包的权限清单导出一份,交给处理方,要求重签后逐项一致。

  2. 拿到成品包后,确认包名、版本号、构建号与原包一致。

  3. 真机装一遍,重点测推送、登录、支付、数据共享这四个最依赖权限的环节。

小结

签名改的是凭证层,不是业务层。把”会被替换的描述文件””可能被收窄的权限声明””不建议动的三个字段”这三件事记住,绝大多数重签之后的功能异常,都能在交付前被拦下来。


我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)

打赏
IPA 文件名里的隐形坑:中文、空格和括号为什么会让签名失败
上一篇
后台刷新一关,签名 App 的消息就迟到?这中间发生了什么
下一篇

发表评论

注册不是必须的

栏目导航

iOS 签名 · 1 对 1

企业签 / 超级签 / TF 签

微信 A-mk5888在线接单
生成中...
QR code title