前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 企业签名与超级签名

iOS 企业签名与超级签名

作者头像
GuangdongQi
发布2019-08-29 09:57:04
3.1K0
发布2019-08-29 09:57:04
举报
文章被收录于专栏:Guangdong QiGuangdong Qi

开篇

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

代码语言:javascript
复制
不上架苹果商店,目前用户下载大约有两种

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)

代码语言:javascript
复制
security cms -D -i xx.mobileprovision > xx.plist

3、导出xx.plist

代码语言:javascript
复制
/usr/libexec/PlistBuddy -x -c 'Print:xx项目名'  xx.plist > xx.plist

4、解压ipa包

代码语言:javascript
复制
unzip xx.ipa

5、删除旧签名

代码语言:javascript
复制
rm -rf Payload/xx.app/_CodeSignature/

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

代码语言:javascript
复制
①、删除签名
rm -rf Payload/xx.app/Frameworks/xx.framework/_CodeSignature

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

7、替换配置文件

代码语言:javascript
复制
cp xx.mobileprovision Payload/xx.app/

8、签名

代码语言:javascript
复制
codesign -f -s "证书的名称" --entitlements xx.plist Payload/xx.app

9、打包成ipa

代码语言:javascript
复制
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代码如下

代码语言:javascript
复制
<?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的用法和配置都非常简单,一个纯命令工具,丰富的配置选项(自行查阅文档),活跃的社区,完全够用了。

直接上演示图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇
    • 苹果企业证书签名(企业签)
      • 特点总结
      • 缺点总结
      • 重签名方法
    • 苹果超级签名
      • 原理
      • 整体架构图
      • 特点总结
      • 缺点总结
      • XML制作细节
      • 自动化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档