2016WWDC-App Signing

目录

2016WWDC

401 - What's New in Xcode App Signing

存在问题

1.开发者无法专注于开发

2.团队合作

3.provisioning profile操作繁琐

3.provisioning profile通过ID引用

曾经的尝试

1.Xcode7免证书真机调试

新的方案

1.自动签名(Automatic Signing)

2.定制签名(Customized Signing)


看过一些WWDC,每年苹果都会推出很多让人惊喜的技术。现将对这几年我看过的知识做一些总结。

2016WWDC

401 - What's New in Xcode App Signing

签名机制的介绍

1.数字证书

服务器端人员在向CA申请数字证书的时候,CA不仅下发数字证书还有数字证书的私钥。数字证书是由CA认证中心颁发的,CA是权威机构受大家认可的,因此证书可以认证身份的,保证其中的内容未被篡改。那如何知道证书内容不被篡改?数字证书中的文本进行摘要算法加密(常用的MD5,SHA),这一过程叫做数字签名。验证方收到数字签名,用系统自带的CA根证书对其进行解密得到证书中的文本信息,同样对其进行摘要算法,对之前的比对,如果一致就验证通过,否则不通过。

而我们iOS开发者用于App签名的证书,其根都是苹果的CA。证书是用于证明某件事的,如SSL证书可验证服务器身份并证明通信内容未被篡改,而苹果的证书则是证明开发者的身份和APP内容未被篡改。

2.验证过程

首先先了解两个概念:非对称加密和摘要算法。非对称加密用来对内容进行加解密用的不是同一个密钥。若公钥加密,则私钥解密,反之亦然。公钥对外公开,私钥自己保存,典型算法有RSA。而摘要算法则是可以通过一个算法将任意长度文本变为一个较短的固定长度文本,用来验证内容的一致性,代表算法有MD5及SHA。

在我们制作得到证书的同时,会得到该证书的私钥。签名时我们先通过摘要算法将文本转化为一段摘要,并用我们的私钥将该段摘要加密,接下来将源文本、密文、公钥一并发布。验证方拿到原文本后用对应的摘要算法再次计算摘要,再用发布的公钥对密文进行解密,若解密内容与计算得到的摘要一致,则验证通过。我们证书的验证方就是iOS设备,验证过程被固化到了iOS系统中,若无法通过验证,则无法安装或启动。只有通过越狱的方式获得机器的完全控制权后才可以绕过该流程,对已有的程序进行篡改,当然这又是另一个话题了。

我们可以在『应用程序->实用工具→钥匙串访问』中看到我们的证书内容及私钥,如下图所示:

可以看到该证书展开后有其对应的私钥,而双击证书可以看到其所带的签名摘要算法及公钥内容。

3.签名过程

如图所示,当我们得到ipa后,通过私钥及对应摘要算法对App进行签名,并将公钥带到mobileprovision中随程序一起发布。在签名过的ipa中有一个叫CodeResources的plist文件,里面有所有文件的签名,这就是说一旦签名完后app所有内容都不得进行任何修改,否则在安装启动前无法通过iOS系统的验证。包内的Frameworks类似于不能独立运行的App,也需要类似流程进行签名。可以把签名看作是一个递归的过程。APP申请使用的系统功能(如iCloud和Apple Pay)是需要苹果审核的,包括有100台限制的调试和测试用机也是需要苹果自己把控的,不能通过我们开发者手中的私钥对其签名要确保其正确性。那么苹果怎么做的呢?苹果手中有一个私钥,它自己对这些内容进行签名,这样就保证apple pay等功能经过审核才能使用。所以iOS设备实际上在安装和启动APP时,既验证了我们的签名,也验证了苹果的签名,任一出错流程都无法继续。

存在问题

苹果的这套设计,确实很好地维护了iOS的安全性,但对开发者其实很不友好,原因如下:

1.开发者无法专注于开发

仅仅在开发过程中,开发者必须处理诸如申请证书,创建及更新provisioning profile,更改Xcode内的相关配置等等,在开发时会占用一定的时间。

2.团队合作

苹果本身是不保存证书私钥的,所以我们无法在web上下载私钥,团队间的私钥共享就成了个问题。若通过新的证书和私钥进行签名,则老的证书无法使用。须通过导出私钥到P12文件再传到另一台电脑上进行导入,相对比较麻烦。

3.provisioning profile操作繁琐

添加一个调试机器是很常见的操作了,仅仅这个操作,都需要我们去web上去进行修改->重新生成->让团队每个成员重新导入->每个人修改Xcode中对应的provisioning profile,否则无法继续真机调试,相当麻烦。我在开发邮箱大师的过程中,leader经常将新的provisioning profile发过来让我们双击导入并修改Xcode中的profile,浪费了时间。

3.provisioning profile通过ID引用

重新生成的profile的ID与修改前的是不一样的,这样在导入Xcode后必须手动重新选择新添加的profile。

曾经的尝试

苹果也明白这个操作很麻烦,所以尝试提供过两个解决办法。

1.Xcode7免证书真机调试

能解决一部分问题,但操作其实很繁琐,无法调试一些苹果服务(Apple Pay、远程推送、gamecenter等)且有一些奇怪的Bug(如必须先切到企业账号关闭功能再切回个人帐号),总体体验还是较差。

新的方案

Xcode8在General Tab中设计了全新的Sign操作UI,并提供了自动签名及定制签名两个不同的选项。为上述Fix Issue存在的三个问题提供了优雅的解决方案。

1.我不知道Fix Issue会做什么? 那就清楚地说明做了什么(自动签名)

2.我不知道问题出在哪? 那就清楚地告诉你问题在哪

3.不用再点那该死的按钮了,我帮你点(自动签名)

1.自动签名(Automatic Signing)

为了方便开发,Xcode重新设计了签名操作流程。最大的改进就是推出了自动签名这个功能。针对团队合作共享私钥的,苹果让一个Target可以对应多张不同的开发证书及私钥,在选择完开发的TEAM后,自动生成对应的证书及私钥,这样开发私钥就是独立的了。这是完全向后兼容的,Xcode8自动生成的证书及私钥在老版本的Xcode中也能使用。

2.定制签名(Customized Signing)

有时你想要完整的控制权,特别是需要在多个Profile下切换的时候。这时你只需要进入General Tab,取消勾选Automatically manage signing,你就可以掌控一切。在这个模式下,Xcode将从首辅变为忠仆,完全遵从你的意志,不会背地里修改你的Profile,但它仍会尽力提供它所知道的信息,包括错误出在何处。在这种模式下,你必须自己手动导入生成的Provisioning profile并自己处理对应的错误。Xcode对此还做了另一项改进,在Build Settings里添加了PROVISIONING_PROFILE_SPECIFIER,它通过名称引用Profile,这样当你更新了Profile并重新导入后,不需要在Xcode中重新选择Profile。

其他

iOS 10 push notification功能

1、支持两种通知:本地和远程的

2、支持多种内容的通知:文字、图片、声音、视频

3、支持用户操作:点击Button跳转、用户文本框输入

4、支持多种触发:location、日历

5、支持自定义的通知UI

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值