iOS开发 - 超级签名实现之描述文件
简介
因为最近企业签掉得太严重了,上头要求实现超级签进行游戏下载。故有了此文章,记录一下过程。
签名原理其实很简单,超级签名的技术就是使用个人开发者账号,将用户的设备当作开发设备进行应用分发。这也导致成本非常高,一个开发者账号最多只能注册一百台设备,然而一个账号的价格为99美元。不过目前超级签分发的应用稳定性很高,不用再像企业签那样经常掉签。
新建 .mobileconfig 描述文件
该描述文件用于获取用户设备的UDID,用户通过某个点击操作下载此文件,安装后服务器会收到该用户设备的 UDID 回调事件。
<?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>https://[你的服务器地址].com/resource/uploadUUID.do</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>xxx.xxx.com</string> <!--组织名称-->
<key>PayloadDisplayName</key>
<string>查询设备UDID</string> <!--安装时显示的标题-->
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>c156f2f8-fc42-4260-8fc5-8644861d8293</string> <!--自己随机填写的唯一字符串,http://www.guidgen.com/ 可以生成-->
<key>PayloadIdentifier</key>
<string>xxx.xxx.profile-service</string>
<key>PayloadDescription</key>
<string>本文件仅用来获取设备ID</string> <!--描述-->
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
注册开发者设备及签名包体
由于时间太赶,这里注册开发者设备及签名包体采用的都是三方提供的服务,因此没有细节提供,但是怎样去做还是可以说一下的。
我们可以借助Spaceship
工具完成注册新的开发者设备和更新Provisioning Profile
,签名包体可以用Sigh
框架,具体实现请自行搜索。
最后用户下载的方式与企业签的一样,使用itms-services
协议进行下载。
ssl 签名 .mobileconfig 配置文件
我看了很多文章,都是用开发者证书去签名的,可是我弄了好久,死活从“未签名”变成了“”尚未验证“,当时一度绝望了好长时间。从 iPhone 配置实用工具 2.2 到 iPhone 配置实用工具 3.5,皆不成功。
配置文件是可以使用的,虽然说安装时会提示红色字“尚未验证”,看起来不太安全之外,一切安好。可是要有追求啊,别人能做到的东西,那就是肯定能做的。
ssl 证书签名配置文件是知道的,可是向后端人员要证书文件的时候一度受到了困扰,所以前期搁置了好久,直到其它的方法都被我试过了,都不行之后,只好继续调研 ssl 证书签名配置文件。
踩完无数的坑之后,这里介绍一种亲测可用的方法,使用 ssl 证书进行配置文件的签名。我是看这篇文章实现的为iOS的mobileconfig配置文件进行签名。
很简单,需要三个文件,三行命令,完成。
$ openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaike.key -certfile ca-bundle.pem -outform der -nodetach
$ openssl rsa -in mbaike.key -out mbaikenopass.key
$ openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaikenopass.key -certfile ca-bundle.pem -outform der -nodetach
这里耗时主要是在等运维人员提供相关证书文件,千万别给错了,否则很难 Debug。
下载描述文件后不能自动跳转到安装界面
在 iOS 12.2 上苹果做了改动,下载完后需要用户手动进行安装。点击 设置 —— 已下载描述文件,会自动弹出描述文件安装界面,点击右上角安装即可。
官方说明点这儿在 iPhone 或 iPad 上安装配置描述文件。
利用 .mobileprovision 跳转到已下载描述文件
这是为了方便用户不需手动找描述文件并安装,可以直接跳过去,省去用户操作。
从苹果开发者网站中下载对应的发布描述文件;
把发布描述文件部署在服务器;
web 访问服务器的发布描述文件,如:
http://***.com/embedded.mobileprovision
;Done。
当执行第三步后,会自动跳转至描述文件。
参考文献
SSL Converter - Convert SSL Certificates to different formats
mobileconfig文件的签名和认证(signed、verified)
通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
声明
博文作者:GarveyCalvin
博文出处:http://www.cnblogs.com/GarveyCalvin/
本文版权归作者和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作!
iOS开发 - 超级签名实现之描述文件的更多相关文章
- iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...
- IOS 开发环境,证书和授权文件等详解
(转自:http://blog.csdn.net/gtncwy/article/details/8617788) 一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证, ...
- 【转】IOS 开发环境,证书和授权文件等详解
(转自:http://blog.csdn.net/gtncwy/article/details/8617788) 一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证, ...
- ios 开发环境,证书和授权文件
一.成员介绍1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certification(开发证书)安装在电脑上 ...
- iOS 开发查看应用的沙盒文件
在iOS开发中,常常需要将一些信息保存到本地,比如说用户的一些搜索历史等.那么,如何查看所保存的文件呢? 这里介绍两种途径来查看应用的沙盒文件. 方法一:通过Xcode来查看,步骤如下: (1): X ...
- iOS开发中使用静态库 .a 文件
iOS开发中,在使用一些第三方库时,可能是一个静态库(比如GPUImage).这种情况下,需要编译出静态库文件(.a) ,然后配合响应的头文件(.h 文件)使用. 编译静态库,直接在Xcode中编 ...
- iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 QQ交流群:811715780 进入 Proje ...
- IOS 开发环境,证书和授权文件是什么?
一.成员介绍 1. Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1) Developer Certification(开发证书) 安装 ...
- ios开发 Rsa签名 base64转码
因为公司要求做了一个加密 网上的资料少有可用的 于是我看到了一位大神的曙光 但是未介绍使用方法 然后另一位大神给予了使用方法 但是没有把库给出来 我整理了一下 希望大家看的有些启发 证书生成 ...
随机推荐
- day 35 协程 IO多路复用
0.基于socket发送Http请求 import socket import requests # 方式一 ret = requests.get('https://www.baidu.com/s?w ...
- 前端vue如何下载或者导出word文件和excel文件
前端用vue怎么接收并导出文件 window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一 ...
- SpringCloud Alibaba微服务实战三 - 服务调用
导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...
- mysql那些事(3)小数如何存储
创建mysql数据表的时候,经常会遇到存储小数(浮点数)的情况,如:价格,重量,身高等. 目前大的公司流行三种存储方案: 1.将数据扩大10的倍数达到使用整数类型存储目的. 比如价格,我们经常以分为单 ...
- 静态链表-C语言实现
1.静态链表是在没有指针的编程语言里对链表的一种实现2.主要是用数组模拟指针3.在这里,使用结构体使数组的每一个空间可以存储一个数据元素(date)和一个游标(cur),游标的作用相当于链表的指针域, ...
- Python使用itchat获取微信好友信息~
最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息. 目标: 获取好友列表 统计性别及城市分布 根据好友签名 ...
- Vue3.0常用代码片段和开发插件
Vue3 Snippets for Visual Studio Code Vue3 Snippets源码 Vue3 Snippets下载 This extension adds Vue3 Code S ...
- 华为担纲建设基础软硬件国家新一代AI开放创新平台
[摘要] 全栈全场景AI能力爆发! [上海,2019年8月29日] 凭借领先的全栈全场景AI能力华为入选国家新一代人工智能开放创新平台 8月29日,科技部在2019世界人工智能大会宣布,将依托华为建设 ...
- 大规模机器学习在LinkedIn预测模型中的应用实践
预测模型在 LinkedIn 的产品中被广泛应用,如 Feed.广告.工作推荐.邮件营销.用户搜索等.这些模型在提升用户体验时起到了重要的作用.为了满足建模需求,LinkedIn 开发并且开源了 Ph ...
- 《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)
1. 简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手.因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙 ...