了解iOS应用的代码签名

如果您是iOS开发人员,则很可能必须处理代码签名。 而且,如果您是初级iOS开发人员,则开发人员门户网站“证书,标识符和配置文件”部分中的所有操作可能会让您有些不知所措。

本文的目的是帮助初级iOS开发人员更深入地了解代码签名。 这不会是有关如何对应用程序进行代码签名的分步教程。 理想情况下,阅读本文后,您无需进行任何教程即可对应用程序进行代码签名。

我不打算讨论更底层的细节,但我们将讨论一些有关非对称密码的问题。

非对称密码学

您需要了解的最低要求是,非对称加密使用公共密钥私有密钥 。 用户必须保留自己的私钥,但可以共享公钥。 使用这些公钥和私钥,用户可以证明自己确实是他本人。

可以在此处找到有关非对称密码学的很好的高级说明。 如果您想了解实施细节或背后的数学知识,可以在线找到它们。

应用程式编号

应用程序ID是应用程序的唯一标识符。 它由Apple生成的团队ID(您对此没有任何控制权)和应用程序的包ID(例如com.youcompany.yourapp )组成。

还可以有通配符应用程序ID: com.yourcompany.* 。 这些将在多个捆绑ID上匹配。

通常,您将拥有一个明确的应用ID,而不是通配符。

证明书

您可能已经注意到,要在Apple开发人员门户中创建证书,您需要上传证书签名请求。 您可以从钥匙串生成此CSR,并且此CSR包含私钥。

然后,在开发人员门户上,您可以使用此CSR创建证书。

证书可以有多种类型。 最常见的是:

  • 开发(iOS应用程序开发)—您需要那些应用程序才能在Xcode的设备上运行您的应用程序。
  • 分发(App Store和Ad Hoc)—您需要那些人才能通过App Store或Ad Hoc分发您的应用
  • APNS(Apple推送通知服务)—您需要那些能够将推送通知发送到您的应用程序的服务。 与开发或分发证书不同,APNS证书与应用程序ID关联。 有两种类型的APNS证书,用于开发-Apple推送通知服务SSL(Sandbox)和用于生产-Apple Push Notification服务SSL(沙箱和生产)。 如果要使推送通知在调试和分发版本中均起作用,则需要创建它们两者。

设备

每个会员年度每个产品系列最多可以向您的帐户添加100台设备。 100部iPhone,100部iPad,100部iPod Touch,100部Apple Watch和100部Apple TV。 要将设备添加到您的帐户,您需要添加其唯一的设备ID。 您可以在Xcode或iTunes中(比较复杂)轻松找到它。 您可以在此处找到有关如何向您的帐户添加设备的详细指南。

供应配置文件

配给配置文件是将App ID与证书以及(为了进行开发或临时分发)与某些设备相关联的内容。 您可以在Apple开发人员门户上创建配置文件,然后将其下载到Xcode中。

用法

创建所有这些文件之后,您可以转到Xcode,添加证书,刷新配置文件,然后选择所需的配置文件。 然后,您可以从该配置文件中选择所需的签名身份(基于与其关联的证书)。

常问问题

在iOS开发中工作了多年的时间,我问过很多关于代码签名的问题。 这里是其中的一些。

  • :我已经从开发人员门户网站下载了配置文件和证书,但是无法签署该应用程序。

    :是的,因为您没有私钥,所以证书签名请求中存在该私钥。 最有可能的是,另一个团队成员之前创建了这些证书和配置文件。 您可以从原始开发人员那里获取私钥,撤销证书并生成一个新证书(这将破坏与该证书相关联的所有配置文件,但不会破坏使用该证书的任何App Store应用程序),或者在可能的情况下创建一个新的(目前,每个帐户最多允许3个分发证书)。

  • :推送证书如何? 我希望我的应用程序接收推送通知。 我是否应该创建使用APNS证书的配置文件?

    :否。创建APNS(Apple推送通知服务)证书时,请将其与应用程序ID关联。 因此,首先要拥有CSR,然后使用该CSR创建一个新的APNS证书,下载该证书,在钥匙串中将其打开,然后将其导出为.p12,然后将其上传到推送通知提供程序中。 .p12文件将知道它与该应用程序相关联,并且只会将推送发送到该应用程序。 这也是为什么您无法将APNS证书与通配符应用ID(com.youcompany。*)关联的原因。 推送通知服务器需要知道将通知发送到哪个应用程序。

  • :我买了一台新的Mac,我应该从旧Mac的钥匙串中导出什么,以便所有代码签名都能在新Mac上使用?

    :您可能希望将所有钥匙串都导出到新的Mac。 您可以按照以下步骤进行操作。 但是,如果要导出一个证书,请确保还导出其私钥。 在“钥匙串”中,您必须能够通过按证书旁边的箭头来扩展证书,并且您应该会看到一个密钥。 这些证书是可以导出为.p12文件的证书。 否则,它们将被导出为.cer,而没有私有密钥,并且它们几乎没有用。

  • :我的iOS发行证书已过期,我的应用程序仍可以使用吗?

    :当您的证书过期时,使用该证书的配置文件将无效。 在App Store上,只要您注册了开发程序,该应用程序仍然可以运行。 使用该证书签名的所有临时构建将不再起作用。

  • :我的APNS证书已过期,现在怎么办?

    :您将不再能够向应用程序发送推送通知。 可以通过创建与该应用程序ID关联的新APNS证书,下载,导出其.p12并将其上载到您的推送通知服务提供商来解决此问题。 无需更新应用。

摘要

我想强调的有关代码签名的关键点是:

  • 每个应用程序都有一个应用程序ID
  • 您需要拥有使用的所有证书的私钥
  • 调试设置配置文件将您的开发证书与您的App ID和设备相关联。
  • 临时供应配置文件将您的分发证书与您的应用程序ID和设备相关联。
  • 应用商店配置文件将您的发行证书与您的应用ID相关联。
  • 对于推送通知,请创建与您的App ID相关联的APNS证书 ,然后下载该证书 ,将其导出为.p12,然后将.p12上传到您的推送通知服务提供商; 如果要在调试和生产版本上都发送推送通知,则必须创建2个APNS证书,一个用于开发,一个用于生产。

了解这些内容将帮助您了解代码签名,并最终节省大量时间。

进一步阅读

  • 内部代码签名
  • 代码签名
  • 简而言之,iOS代码签名和配置