标签 - iOS

iOS    2020-05-25 17:55:51    37    0    0

开头先说下超级签, 也不知道谁起的这么有创意的名字。 简单来说就是用过苹果的个人开发者帐号对用户设备进行针对性打包,然后提供用户下载。PS: 这过程是由系统自动完成。
这个是签名的流程图:


这个就涉及到几个问题
对 mobileconfig 文件进行签名, 提供给用户下载
需要获取用户的设备号 也就是 uuid
需要把获取到的用户的 uuid 添加到苹果的开发者后台里面。 这个就涉及到跟苹果的通信
从苹果的开发者后台下载 mobileprovision 文件。 这个也是需要跟苹果通信的。PS: 要把包名添加到开发者后台, 否者会签名失败
使用linux系统对ipa文件进行签名, 然后提供给用户下载
解决方案:
问题1:
为iOS的mobileconfig文件进行签名 这篇描述的比较详细, 但里面的方法好像不太能用了。反正我没测试通过, 这是一个坑之一。
解决方案是:阿里云免费SSL证书对IOS描述文件mobileconfig的签名认证 该方案可以正常使用。里面提及的证书, 阿里云已经更新过了。
正确的应该使用: 此处划重点

apache证书的 xxx.net_public.crt 直接使用不需要按照文中转换
nginx的 xxx.key 和 xxx.pem
划重点:mobileconfig 必须是https,必须是301跳转,且nginx或其他web服务器 必须支持TSL1.2以上 坑之二…不想重新编译请使直接使用负载均衡完美解决这个问题
openssl s_client -connect 域名:443 -tls1_2 该命令可测试你的域名能否支持tsl1.2
问题2:
通过Safari浏览器获取iOS设备UDID(设备唯一标识符) 的博客写的又详细又好, 我就不多此一举了

问题3和4:
在github上有开源工具 Spaceship,感谢开源贡献者, 感谢你们。。但顺便吐槽一下, ruby写的…文档看着头疼
Spaceship 文档
ruby api文档
ruby 初学者

问题5:
又是一枚开源工具 isign, 简单到一行代码搞定签名, 这个是python写的,必须2.+的环境, 不要用3.0以上的 我使用的是2.7的。对此我也想吐槽一句,网上介绍超级签必定介绍这个工具, 但为什么没有人说一下这个工具可以在linux上跑。。为此我一直傻傻的认为只能在mac上运行

isign -c 客户端证书.pem -k 私钥.

iOS    2019-08-14 09:56:49    28    0    0

Over-the-air IPhone Setup Using a Signed .mobileconfig File

Note: this does not push your configuration to an iPhone. The user of the iPhone must go to a web address and install a configuration profile.

Suppose that you have a few iPhones that you need to support, but you don't want to spend the time typing in all of the e-mail (IMAP or POP), LDAP, wireless network, or other settings into each phone. Perhaps you have found Apple's Enterprise Deployment Guide but you don't really feel like setting up a whole SCEP Certification Authority to get things done either since your requirements are so simple. But you do realize that it is much easier to tell your user to go to https://example.com/iphone/ on their iPhone than to step them through all the individual setup routines.

Amazingly enough, there is not much documentation out there on how to hand-roll a .mobileconfig file that you can pass out on an HTTPS server to your users. We also want it to be "Verified" by the iPhone so that your users

iOS    2019-08-13 15:55:47    53    0    0

超级签名-原理/机制/技术细节-完全解析

随着苹果对于企业分发证书的频繁吊销和日益收紧,代签名行业也随之迭代出了黑科技,即所谓的超级签名。

超级签名安装流程演示

从整个安装流程上来看,超级签名少了在设置里面信任企业证书的步骤,体验上要比企业分发更简单和容易接受,同时分发价格也贵的离谱,不禁让人好奇这新瓶里面到底装的是什么酒。

今天就来帮大家解析一下其中的门门道道,以及这套机制的技术难点。

 

image

据说某分发平台价格表,来源网络,本人对图片真实性不负责


签名原理

签名原理其实就一句话,使用了苹果提供给开发者的Ad-Hoc分发通道,把安装设备当做开发设备进行分发。

既然签名用是 Ad-Hoc ,那么 Ad-Hoc 所具有的优劣势也一并继承了下来:

优势:

  1. 直接分发,安装即可运行,不需要用户做企业证书的信任操作
  2. 目前稳定,不会有证书吊销导致的业务风险(后续苹果政策风险非常高)

缺点:

  1. 单开发者账号的iPhone设备数量只有100个,导致分发成本非常高(99美元/1年/100个设备)
  2. 开发者账号需要预先写入安装设备的UDID,在工具链不通的情况下,获取用户的UDID相对困难和繁琐,而且手动写入UDID不存在商用可行性,当然目前这个缺点被解决了

整体架构

接下来我们就看看整套机制是如何进行的:

 

整体架构
  1. 设备安装描述文件后,会向服务器发送设备的UDID。
  2. 服务器收到UDID后,将UDID注册到某个开发者账号下。
  3. 再生成签名用的描述文件,给IPA签名。
  4. 然后iPA传Server,使用itms-services方式让用户下载。

技术细节

使用配置文件获取UDID

苹果公司允许开发者通过IOS设备和Web服务器之间的某个操作,来获得IOS设备的UDID(包括其他的一些参数)。这里的一个概述:

  1. 在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件;
  2. 用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的安装;
  3. 服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;
  4. 当用户设备安装描述文件后,设备会回调你设置的URL,如果你的URL返回302跳转的话,Safari浏览器会跳转到你所给的地址;

Apple Developer Center 自动化工具

接下来的关键点就是如何在获取到用户的UDID之后,秒级完成注册新的开发者设备+更新

iOS    2019-08-13 10:06:17    245    0    0

UDID
Unique Device Identifier,顾名思义,它就是苹果设备的唯一识别码,它由40个字符的字母和数字组成。
注:iOS5后废弃(使用方法获取上传存在下架风险)

注:为什么苹果要在应用中禁止使用呢? 因为用户隐私问题,比如我开发了5款App,很多用户都下载了这5款App并使用,如果我能轻易的获取这些用户的UDID,其实我能拼凑出用户的很多信息。

OpenUDID
设备的识别码,每台iOS设备的OpenUDID是通过第一个带有OpenUDID SDK包的App生成。

注:如果你完全删除全部带有OpenUDID SDK包的App(比如恢复系统等),那么OpenUDID会重新生成,而且和之前的值会不同,相当于新设备。

UUID
Universally Unique Identifier,通用唯一标识符,是一个32位的十六进制序列,UUID在某一时空下是唯一的。

MAC Address
MAC(Media Access Control或者Medium Access Control)地址,或称为物理地址、硬件地址,用来定义网络设备的位置,采用十六进制数表示,共六个字节(48位)。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。MAC地址是网卡决定的,是固定的。

注:iOS7后废弃(使用方法获取到的mac地址全部都变成了02:00:00:00:00:00)

IMEI,IMSI
IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。

注:iOS5后废弃,只能通过私有Api能获取(存在下架风险)

IDFA
广告标示符,它是由系统存储着的,iOS6及以后使用。但是如果用户还原位置与隐私的话这个广告标识符就会重新生成。而且用户可以在设置–隐私–广告里面限制广告跟踪来限制IDFA获取,一般用户都不知道有这个,哈哈,不过还是不能用来做唯一标识的。

注:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户

IDFV
iOS 6.0及以后使用,根据vendor的值,如果vendor相同,则返回同一字符串;如果vendor不