iOS App签名过程浅析

前言

大家需要首先明确两个事情:

首先,想开发iOS的App, 你需要有一台Mac, 并且安装上Xcode, 想要在App Store里上架App,你需要有一个开发者的账号,在苹果的开发者网站(developer.apple.com)里缴纳99美刀(相当于交一个入场费吧,对于企业开发者来说,自然是很随意,对于个人开发者来说,T_T)。本文默认大家都已经有了这个开发者账号。

其次,iOS系统和Android不太一样,苹果公司不能容忍没有经过自己认证的App被安装进系统,因此,自己开发的App,如果没有签名的话,是不可能装在手机上的,只可能在模拟器里调试。而想要对App签名,就需要第一个前提里面的开发者账号。

苹果证书分为两种:

一种是Apple Development,这种证书用于在自己的设备中调试。另外一种是Apple Distribution。distribution顾名思义,就是分布式,用这种证书签名的应用,可以在App Store中上架,被其它人下载安装。

Provision profile是什么?有什么用?

如果你是苹果的开发者,那么肯定在开发者网站上注册了账号,如何使用你的账号对你手头的设备和开发出来的app进行管理,这时需要一个连接工具,这个工具就是provisioning profile。该文件可以在开发者网站上下载,每个用户是独一无二的。开发的时候,可以通过这个文件,选择哪个设备可以运行你的app,以及你的app可以使用哪些app service。开发完app之后,provisioning profile会以签名的方式嵌入到app的bundle里。一个Development Provisioning Profile必须在每一个想在里面运行应用程序代码的设备里安装,如果provisioning file里的信息并不符合某个标准,那么你的app就不能启动。

每一个Provisioning file包含以下三部分内容:

1,Development Certificates:

2,Unique Device Identifiers: 列出来这个app可以运行的设备列表。

3,An App ID: 可以包含“\*”通配符以被具有相似bundle标识符的很多应用使用。

如果你还想了解更多有关provisioning profile的内容,请参考链接:https://medium.com/@abhimuralidharan/what-is-a-provisioning-profile-in-ios-77987a7c54c2

如何下载证书到本地:

在开发者网站上,点击“Certificates, IDs & Profiles”

iOS App签名过程浅析_第1张图片

如何查看自己的证书内容:

在Terminal里面运行

security find-identity -v -p codesigning

得到的结果如下所示:

这是我本机的证书。

连接Xcode并安装App会发生什么?

1,Mac里的provisioning profile去keychain里找到developer certificate。

2,Xcode用这个certificate给代码签名。

3,设备的UUID和provisioning profile里面的IDs Match。

4,Provisioning profile里的APP ID和app里的bundle identifier匹配。

5,该APP ID所需的各项权利(entitlements)被关联。

6,用来对code签名的私钥和证书里的公钥match

注意,第四步,app的bundle里会有一个info.plist,里面有一个参数时bundle identifier,这个一定要和provisioning profile里面的APP ID匹配,不然是不能运行签名的命令的。

如何对App进行签名:

如果你的Xcode链接上了设备,那么当打包完bundle以后,Xcode会自动帮你执行签名也安装。当然,xcode也是调用的shell指令。使用的命令是codesign,下面提供一个简单的demo。

一条示例的codesign命令:

 /usr/bin/codesign --force --sign 221427F5D9B40022F33980F081132E2B28C611B4 
--entitlements /Users/pyin/Library/Developer/Xcode/DerivedData/demo.xcent 
--timestamp=none /Users/pyin/Desktop/workplace/my.app

--sign 后面跟的参数就是用来加密的私钥。签名与认证的过程是非对称加密解密的过程。详情参考链接:https://wereadteam.github.io/2017/03/13/Signature/  讲得非常详细。

--entitlements 代表授权文件,后面跟的demo.xcent里面写了这个app可以获得的权限

codesign命令还有一些其它参数,详情参考链接:https://www.jianshu.com/p/34cdc0784ea4  讲得也非常详细。

签完名之后,你会发现在签名后的文件夹里面多了一个目录:

iOS App签名过程浅析_第2张图片

下面把.app拖到xcode里,如果验证成功,就可以安装了!

你可能感兴趣的:(Apple,Development)