zoukankan      html  css  js  c++  java
  • iOS 超级签名详解

    一、原理

    把安装设备当做开发设备进行分发。说的明白一些,开发者可以在开发者后台添加手机的UDID,然后重新打包一个IPA文件,分发平台,然后被添加的UDID就可以下载。

    二、优缺点

    优势:

    直接分发,安装即可运行,不需要用户做企业证书的信任操作

    目前稳定,不会有证书吊销导致的业务风险(后续苹果政策风险非常高)

    缺点:

    单开发者账号的iPhone设备数量只有100个,导致分发成本非常高(99美元/1年/100个设备)

    开发者账号需要预先写入安装设备的UDID,在工具链不通的情况下,获取用户的UDID相对困难和繁琐,而且手动写入UDID不存在商用可行性,当然目前这个缺点被解决了

     

    三、整体运行流程

    1605558-fe383e054c661575.png
    1.用户手机安装预留的描述文件,获取本机udid后,向服务器返回用户的udid

    2.服务器收到UDID后,将UDID添加到开发者账号下,下载此udid签名用的证书描述文件。

    3.然后用此udid签名用的证书描述文件,把预留的ipa重签。

    4.重签后的iPA上传分发服务器,通过分发链接让用户下载。

     

    下面是这四个步骤的技术细节:

    一、使用配置文件获取UDID 

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

    1.在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件;

    2.用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的安装;

    3.服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;

    4.当用户设备安装描述文件后,设备会回调你设置的URL,如果你的URL返回302跳转的话,Safari浏览器会跳转到你所给的地址;服务器做一些301跳转,存储UDID等操作

    XML代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>PayloadContent</key>
            <dict>
                <key>URL</key>
                <string>一个接收UDID的网址</string>
                <key>DeviceAttributes</key>
                <array>
                    <string>UDID</string>
                    <string>IMEI</string>
                    <string>ICCID</string>
                    <string>VERSION</string>
                    <string>PRODUCT</string>
                </array>
            </dict>
            <key>PayloadOrganization</key>
            <string>GuangdongQi</string><!--组织名称-->
            <key>PayloadDisplayName</key>
            <string>AppFree</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadUUID</key>
            <string>9CF421B3-9853-4454-BC8A-982CBD3C907C</string><!--自己随机填写的唯一字符串,http://www.guidgen.com/ 可以生成-->
            <key>PayloadIdentifier</key>
            <string>com.gpon.profile-service</string>
            <key>PayloadDescription</key>
            <string>This temporary profile will be used to find and display your current device's UDID.</string>
            <key>PayloadType</key>
            <string>Profile Service</string>
        </dict>
    </plist>

    注意

    ①、接收网址的地址需要SSL签名,自签名的不行,这也是苹果强制https的一种方式吧

     

    ②、mobileconfig下载时设置文件内容类型Content Type为:application/x-apple-aspen-config(遇到问题的都是因为这个),或者像这里用一个简单页面做好下载mobileconfig文件,引导用户安装

     

    二、服务器收到UDID后,将UDID注册到某个开发者账号下,并下载新的描述文件

    接下来的关键点就是如何在获取到用户的UDID之后,秒级完成注册新的开发者设备+更新Provisioning Profile的。 这里我们需要借助开源工具(Spaceship):

    1605558-875314c2f3f2ba66.jpeg
     

    spaceship公开了Apple Developer Center的API,而且执行速度比解析开发者Web页面快两个数量级,从而在非常短的时间内搞定Provisioning Profile。 这个框架解决了整套机制的关键问题,成为整个工具链的基石。其实某平台早就完成了UDID获取和应用签名分发的技术储备,只差这套API。

    spaceship 是Fastlane的一个框架,安装spaceship

    sudo gem install fastlane -n /usr/local/bin
    sudo gem install pry  -n /usr/local/bin 
    fastlane spaceship

    具体细节:使用spaceship批量添加设备并更新profile

     

    三、用此udid签名用的证书描述文件,把预留的ipa重签

    这里推荐使用 Sigh这个框架来解决这个问题。

    image
    安装sigh:
    sudo gem install sigh

    对IPA包重签名: 

     fastlane sigh resign

    此时会显示:

    屏幕快照 2019-09-20 下午2.42.51.png
     

    输入你的IPA路径,点击回车,此时会显示你电脑中可用的证书:


    屏幕快照 2019-09-20 下午2.45.15.png
     
    输入你要更改的证书名,和你要更改的证书路径,回车:
    屏幕快照 2019-09-20 下午2.49.04.png
     

    ipa包重签名成功

    参考:iOS重签名--Fastlane/sign脚本

     

    四、重签后的iPA上传分发服务器,通过分发链接让用户下载 

    参考: 阿里云运维部署工具AppDeploy详细教程

  • 相关阅读:
    001-分布式理论-CAP定理
    006-优化web请求二-应用缓存、异步调用【Future、ListenableFuture、CompletableFuture】、ETag、WebSocket【SockJS、Stomp】
    003-RFC关于媒体类型说明
    005-优化web请求一-gzip压缩、http缓存控制和缓存校验[Pragma、Expires、Cache-Control、max-age、Last-Modified、用户刷新访问、避免过度304]
    004-restful应用构建、分布式会话、测试工具简介
    003-JSR303校验
    【Java】Callable,Runnable比较及用法
    Ubuntu下迁移MySQL数据库文件目录
    解决linux分区提示doesn't contain a valid partition table
    腾讯云Ubuntu挂载硬盘空间
  • 原文地址:https://www.cnblogs.com/huadeng/p/11557679.html
Copyright © 2011-2022 走看看