Xcode8精简掉了大部分直接面对Provisioning Profile的机会,可以说是非常大的进步。
但如果长时间都对于iOS的证书之间的关系感到模糊,总归觉得不舒服。
后来发现了这篇文章漫谈iOS程序的证书和签名机制,非常好,做了一下笔记并结合自己使用中的疑惑进行了一次小结,如有错误,望指正。
先给结论:
- 选择哪个Provisioning Profile,就等于选择了用那个AppID、用公钥解密。
- 能不能打包上传成功,从根本上说取决于有没有私钥。
Provisioning Profile 也就是 .mobileprovision文件
我们知道每次打包,甚至运行的时候都需要选择Provisioning Profile,有时候还需要在Xcode的Preference中重新下载他们,那么这个文件究竟是做什么的呢?
fastlane sigh download_all -u your_email@163.com --adhoc --force
简单来说,这个文件的目的在于,苹果需要知道,这个应用(App ID)是谁(开发者证书)提交(在开发测试)的。
这个文件包含的内容简单来说,
- Development Provisioning Profile
它将App ID,开发者证书(Certificates),以及测试Device绑定在一起。 - Distribution Provisioning Profile
它将App ID,开发者证书(Certificates)绑定在一起,在上传应用时需要指定这个文件。
更详细的说,
- App ID。每个app必须在Member Center中创建一个对应的App ID。
- 使用哪些证书。上面说了,不同类型的证书就代表了不同的发布方式,还包括一些功能的能否使用(比如APN)
- 功能授权列表
- 可安装的设备列表。对于AdHoc方式发布的app或者真机调试时,会有一个Device ID列表,这个列表里面是iOS设备的UDID,测试机。
- 苹果的签名!
这里的签名是苹果签的,跟我们的私钥没有关系。也就是说mobileprovision文件是苹果签名的。指签名算法么?也就是如何从工程计算出那一串数字?
数字签名
前面说到,Provisioning Profile是苹果用来检查提交代码的是谁,那么问题来了,苹果通过什么样的操作来确保,是你提交的应用呢?
答案就是数字签名
- 应用场景,所有人都可以看文章,但是需要检验文章发布者的身份。
- 目的,保证发布者的身份是真实有效的。
-
手段,发文章(原文),文章摘要---私钥加密。
数字签名.jpg
Certificates, CSR(Certificate Siging Request)
这是一个和Member Center交换信息,并生成Provioning Profile的过程中的通讯文件。
- Keychain生成一对公钥私钥,并生成CSR(包含公钥)。
- 上传CSR到MC(Member Center),这样Apple就有了你这个app的签名公钥。
- MC返回给你iOS Certification,包含公钥和开发者信息(.cer文件,安装后会显示在Keychain中(如果这台机器不是产生私钥的机器,并且没有私钥,呢么Keychain中显示的时候也没有私钥,不能正确的提交到AppStore)) 有没有证书在KeyChain中的显示不同.png
团队开发 / p12文件 / 私钥
将最初申请证书的机器的私钥导出成.p12文件,并让其他机器导入,同时其他机器也应该安装下载下来的证书。这样团队中的成员,就都可以发布提交app了。
ipa组成
ipa组成.png摘要算法
摘要算法是指,可以将任意长度的文本,通过一个算法,得到一个固定长度的文本。这里文本不一定只是文本,可以是字节数据。所以摘要算法试图将世间万物,变成一个固定长度的东西。摘要算法具有以下重要特性:
- 只要源文本不同,计算得到的结果,必然不同
- 无法从结果反推出源(那是当然的,不然就能量不守恒了)
典型的摘要算法,比如大名鼎鼎的MD5和SHA。摘要算法主要用于比对信息源是否一致,因为只要源发生变化,得到的摘要必然不同;而且通常结果要比源短很多,所以称为“摘要”。
后记
后来发现了这篇文章[译] 理解 iOS 应用程序的代码签名 (CODE SIGN) 机制,其中的一些Q&A有一些参考价值。
网友评论