shmily-iOS/MaciOS

iOS 企业签名与超级签名

2019-08-28  本文已影响0人  1ace156a39cd

开篇

好久没有静下心来写点iOS方面的东西了,可能是忙了一些,也可能我们都不是几年前的我们,但工资却回退到几年前
好了,不说废话,今天讲讲签名的那些事

不上架苹果商店,目前用户下载大约有两种

1、苹果企业证书签名
2、苹果超级签名

苹果企业证书签名(企业签)


特点总结

1、随时可分发APP
2、可接受Apple不可接受的APP

缺点总结

1、苹果开发者账号难求,据说最近炒到了50万左右
2、市场上证书混乱,烂大街的证书不少
3、掉签风险极高
4、掉签后重新获取用户,运营成本加大

重签名方法

工具

1、iOS APP Signer
2、iReSign
等的(有很多第三方提供的,据说会盗证书)

使用方法

上面两种见Git

终端签名

1、准备IPA后缀文件(Ad Hoc Deployment 打包)xx.mobileprovision文件(企业)

2、获取证书里面的信息(xx.plist)

security cms -D -i xx.mobileprovision > xx.plist

3、导出xx.plist

/usr/libexec/PlistBuddy -x -c 'Print:xx项目名'  xx.plist > xx.plist

4、解压ipa包

unzip xx.ipa

5、删除旧签名

rm -rf Payload/xx.app/_CodeSignature/

6、删除动态库签名(所有framework都有需要执行此步骤)

①、删除签名
rm -rf Payload/xx.app/Frameworks/xx.framework/_CodeSignature

②、重新签名
codesign -f -s "证书的名称" Payload/xx.app/Frameworks/xx.framework/

7、替换配置文件

cp xx.mobileprovision Payload/xx.app/

8、签名

codesign -f -s "证书的名称" --entitlements xx.plist Payload/xx.app

9、打包成ipa

zip -r new_xx.ipa Payload/

最终 new_xx.ipa就是重新签名的文件

苹果超级签名

原理

说的明白一些,开发者可以在开发者后台添加手机的UDID,然后重新打包一个IPA文件,分发平台,然后被添加的UDID就可以下载

整体架构图

图1

特点总结

1、直接分发,安装即可运行,不需要用户做企业证书的信任操作
2、目前稳定,不会有证书吊销导致的业务风险

缺点总结

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

XML制作细节

1、在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件;
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文件,引导用户安装
2、服务器做一些301跳转,存储UDID等操作

自动化

注册新的开发者设备+更新Provisioning Profile

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

Spaceship

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

下面是解析开发者Web页面和直接访问API的速度对比图:

SpaceshipRecording
自动签名封包

此处其实应该有一万个解决方案,通过命令行脚本/Python脚本/或者其他第三方都能实现。

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

image.png

Sigh的用法和配置都非常简单,一个纯命令工具,丰富的配置选项(自行查阅文档),活跃的社区,完全够用了。

直接上演示图:

image
分发

不多说了,什么蒲公英,fir,各种小平台等等

广告

最后打个广告吧
企业签名按天收费20一天
不想坑人,不知道什么时候证书就掉了,所以就按天算吧,掉签可补

超级签名不做了,太贵,账号死的快,

至于超级签名系统,就当我没有,毕竟没人付过钱

然后不接受各种咨询,有问题评论区
上一篇下一篇

猜你喜欢

热点阅读