专业IOS签名团队
闪电售后,性价比秒杀上架,快速上线、测试
提供 iOS 企业证书签名服务,让您的 iOS App 无需提交 App Store 或设置
UDID 即可在iPhone、iPad 等设备上直接安装,帮助您快速完成应用内测
过程,降低测试成本,缩短上线时间。

iOS代码签名:ipa签名iOS应用

2019-12-11 08:20 栏目:ipa签名 查看()

到目前为止,在本系列中,我们已经做了大量的基础工作,以便执行iOS签名应用程序的实际代码签名。在以前的帖子中,我们已经看到了对签名iOS应用进行编码所需的CSR,证书和配置文件。在最后一篇文章中,我们将重点介绍实际的代码签名过程。我们将研究数字签名,代码签名的三个主要重要阶段,使用codesign  命令行工具对应用程序进行ipa签名和验证的过程 。因此,让我们开始吧。

代码签名

如今,使用最新版本的Xcode,所有代码签名活动都由Xcode在后台进行。我们只需要指定代码签名身份,Xcode就会为我们管理一切。这种方法适合从本地计算机进行开发和分发,因为开发团队可以依靠Xcode来处理所有这些任务,并且可以从本地Xcode计算机上发布应用。但是,在DevOps和Continuous Delivery的现代时代,我们无法使用本地Xcode来交付应用程序。必须从Continuous Integration服务器运送应用程序。这就需要自动化构建并详细了解代码签名。

Apple在此处  提供了有关整个代码签名过程的非常全面的文档,其中解释了大部分内容。在本文中,我们将尝试利用该文档使其在所有代码签名活动中都变得实用。我们已经创建了一个用于代码签名的演示应用程序,可用于了解实际的代码签名过程。

我们已经在介绍性帖子中介绍了代码签名的好处和局限性。构建ios企业签名应用程序后执行代码签名。所有应用程序,包括捆绑软件,资源,框架,工具,脚本,库,插件,Info.plist文件,资产和所有其他类型的代码,都需要与应用程序的各个组件一起进行代码签名。

Xcode使用codesign  命令行工具对所构建的应用程序进行苹果企业签名。我们也可以使用codesign工具在不使用Xcode的情况下对应用程序进行ipa企业签名。代码签名工具用于创建和验证代码签名。为了获得有关可以使用codesign工具执行的各种选项和任务的更多信息。在此处查看Apple文档,  或直接键入命令 man codesign  以在终端中显示详细和最新信息。

现在,使用以下命令,使用codesign工具对示例应用程序进行签名:

$ codesign -s "iPhone Developer: Shashikant Jagtap (MY_TEAMID)" ~/Library/Developer/Xcode/DerivedData/iOSCodeSigning-gakpslthucwluoakkipsycrwhnze/Build/Products/Debug-iphonesimulator/iOSCodeSigning.app/

此命令将对演示应用程序的组件进行ipa签名。在这种情况下,该应用已由Xcode签名,因此不需要重新签名。现在,我们将看到使用代码签名身份对应用程序进行ios签名时,幕后情况。

代码签名阶段

代码签名是macOS安全技术,在签署iOS应用程序时具有以下主要阶段。

  • 密封
  • 电子签名
  • 代码要求

在适用的情况下,我们将通过实际示例详细介绍每个阶段。

封印

在现实生活中,我们密封各种对象以锁定它,以便它不会改变。一个很好的例子是密封信封中的一封信,以确保自发件人密封信封以来,信件的内容没有更改。收件人必须确保发件人发送的信件没有被修改或更改,除非封印被破坏。这意味着密封确保密封确保内容的完整性。以同样的方式,代码签名中的密封会添加代码各部分哈希的集合,以便验证者可以检测到代码签名后代码中是否有任何更改。

在我们的示例中,代码签名软件通过在应用程序中运行代码的不同部分来生成密封。它使用某种哈希算法将哈希值应用于代码的每个部分。应用于输入块的哈希是唯一的。验证者然后使用相同的哈希算法比较哈希,如果所有哈希都相同,则它满足验证标准。较小的更改可能导致哈希值损坏。散列应用于框架和各种代码。以属性列表格式。典型的哈希看起来像这样

<key>Frameworks/libswiftos.dylib</key>
<dict>
   <key>hash</key>
   <data>
      dyKltMCMbq+pYDVJBtY78y7BuP0=
   </data>
   <key>hash2</key>
   <data>
      6DxNIVZgqWfOeWfedGQ1+wOnIuA7vQlU+gVA0WhCiRw=
   </data>
</dict>

然后,验证者使用相同的哈希算法来验证数据没有更改。但是,此验证仅与存储的哈希的可靠性一样可靠。数字签名可确保签名验证。

电子签名

数字签名过程可验证消息的真实性和完整性。它基于公钥密码学,也称为  非对称密码学。在代码签名过程中,该软件通过使用签名者的私钥对印章的哈希值进行加密来创建数字签名。与签名者的证书一起存储在应用程序中的签名哈希代表数字签名。然后,我们可以通过运行以下命令,使用codesign工具来验证代码签名

$ codesign -v --verbose=5 ~/Library/Developer/Xcode/DerivedData/iOSCodeSigning-gakpslthucwluoakkipsycrwhnze/Build/Products/Debug-iphonesimulator/iOSCodeSigning.app/

这应该显示如下输出:

即使代码中的微小更改也会使哈希无效,并报告签名无效。如果证书中嵌入了哈希和签名者的公钥,则该软件使用相同的集合来解密哈希。然后,验证程序比较散列并输出结果。

通用代码的数字签名存储在应用程序二进制文件本身中,而框架,捆绑软件,工具和其他代码的签名存储在捆绑软件中的  _CodeSignature / CodeResources  中。

规范要求

有一些规则可以评估代码签名。这些规则称为代码要求。任何应用程序都可以强制执行代码要求,即应用程序使用的所有插件均应由Apple签名。这样可以防止在主应用中安装未经授权的第三方软件。签名者还可以将代码要求指定为代码签名的一部分,这些要求称为内部要求。指定需求或DR告诉评估系统如何识别特定代码。有规范要求的语言详细的文档在苹果的网站在这里。

现在,我们已经简要介绍了代码签名的三个阶段。让我们使用命令打印出代码签名的演示应用程序的详细信息。

$ codesign -d --verbose iOSCodeSigning.app/

这应该会打印我们的演示应用程序的所有代码签名详细信息。看起来像这样:

如我们所见,有很多关于代码签名的信息。这显示了可执行路径,应用程序标识符和应用程序签名。当我们使用开发证书和调试版本时,它显示了Mach-O瘦二进制格式。有14 + 7个散列和13条规则被应用。到目前为止,还没有使用代码签名指定内部需求。

自动代码签名

苹果在WWDC 2016的What's New Xcode App Signing会话中宣布了全新的代码签名基础架构。苹果宣布在Xcode中进行自动代码签名,以减轻iOS开发人员在Xcode 8及更高版本中的代码签名痛苦。在Xcode中,我们在构建目标的“常规”选项卡中具有新设置,以启用自动代码签名。我们只需要让Xcode知道我们的开发团队,Xcode就会自动处理所有代码签名任务,例如证书,供应配置文件等。

借助自动签名,Xcode可以监视应用程序设置中的任何更改,例如授权,新设备需要向配置文件进行注册等。一旦我们授予了注册设备或添加新功能的权限,Xcode就会创建新的配置文件并显示报告导航器部分中的代码签名更新。

使用Xcode 8,引入了两个新的构建设置来管理代码签名过程。构建设置 DEVELOPMENT_TEAM  用于提供对签名身份的更大控制,它是强制性的,不能为空。第二个构建设置是 PROVISINING_PROFILE_SPECIFIER  ,它指示签名方法的类型。此构建设置仅适用于自动签名,将不会使用手动签名PROVISIONING _PROFILE _SPECIFIER。我们必须使用 CODE_SIGN_IDENTITY  作为通用条目,例如“ iPhone Developer”

关于自动代码签名要记住的其他重要事项是

通过xcodebuild  命令行工具在Xcode中创建的归档 文件首先使用开发证书进行签名。

当我们指定分发方法时,将使用分发代码签名对存档进行签名。

这意味着,如果您在持续集成服务器上使用自动签名,则必须在CI服务器上具有开发以及分发证书。

手动代码签名

在手动代码签名过程中,我们必须在构建设置中显式指定代码签名身份和配置文件。可以通过在目标设置的“常规”选项卡中取消选中“自动管理签名”复选框来在Xcode 8+中启用手动代码签名。这将提供在“常规”选项卡上设置代码签名身份和配置文件的选项,而不是进入构建设置。

您可以在此处阅读Apple的有关设置手动签名的指南,以了解有关Xcode手动签名设置的更多信息。手动代码签名中的另一个变化是,不再以UDID的形式设置供应配置文件,我们可以使用名称进行设置。同样,当使用手动代码签名方法时,您将必须指定  CODE_SIGN_IDENTITY   和  PROVISIONING_PROFILE   构建设置的值。另外,我们需要在构建应用程序的本地计算机上具有必需的证书和配置文件。

Xcode 8上有一个很棒的代码签名指南,如果您需要有关手动和自动签名的更多信息,可以在这里阅读。

重新签名iOS应用

这种情况很少见,但在某些情况下,我们需要删除已ios签名应用程序的签名,并使用新的配置文件和证书重新签名。使用codesign  工具绝对可以做到这一点 。为了重新签名iOS应用,我们需要执行以下步骤。

  • 查找需要签名  的应用程序的已签名 .ipa文件
  • 解压缩并删除代码签名

$ unzip -q old.ipa
$ rm -rf Payload/*.app/_CodeSignature
  • 将旧的配置文件替换为已生成用于辞职的新的配置文件。

$ cp new_provisining_profile.mobileprovision Payload/*.app/embedded.mobileprovision

  • 使用旧的权利为当前应用生成权利

$ cd Payload/
$ codesign -d --entitlements - *.app > entitlements.plist
$ cd ..
$ mv Payload/entitlements.plist entitlements.plist

  • 强制使用新证书和权利对应用程序签名

$ /usr/bin/codesign -f -s "Your_certificate_in Keychain" '--entitlements' 'entitlements.plist'  Payload/*.app

  • 压缩您辞职的ipa文件

$ zip -qr resigned.ipa Payload

在此阶段,您将使用新证书和配置文件对二进制文件进行签名。

到目前为止,我们已经了解了iOS代码签名过程的大多数基础知识。如果您对这些帖子有任何疑问,评论或反馈,请随时与我联系。推文,电子邮件,评论或其他任何内容。在这一点上,我们必须停止本系列中iOS编码签名的有趣旅程。

扫二维码与IOS签名经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/ios企业签名咨询/签名价格咨询/技术建议/互联网交流

上一篇:ipa签名在本地签署iOS应用

下一篇:没有了

郑重申明:IOS企业签名以外的任何单位或个人,不得使用该案例作为工作成功展示!
  • 咨询QQ:869349528
    邮箱:869349528@qq.com
    工作时间:08.30-23.30
友情链接: ios企业签名 微构网
Copyright © 2017-2019 www.wegto.com.版权所有  鄂ICP备19007640号-1    苹果企业签名  苹果签名  ios企业签名  
点击这里给我发消息