一、何为超级签名:
即使用苹果个人开发者账号用Ad_Hoc方式建立分发。
1、优缺点
优点:可以利用web直接进行分发,用户点击即可。无需用户进行企业信任;相对企业签而言稳定,但也并不是百分百稳定。仍然面临封号风险。
缺点:价格昂贵,由于个人开发者账号设备数量有限只有100台。导致分发成本非常高。国内688元/一年/100台设备。
二、整体流程
1、通过web向用户发送描述文件,让用户安装描述文件从而获取用户的UDID,将获取到的UDID 发送给服务器。
2、服务器自动化登陆开发者账号,注册UDID,同时新建带此UDID的mobileprovision。下载mobileprovision和证书对IPA进行签名。
3、使用itms-services方式让用户下载。
三、技术核心
1、获取UDID
在web服务器上创建一个XML 的描述文件。配置好服务器接收用户的URL地址。当用户安装好描述文件后。会回调你设置的url。
<?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>#requestURL#/signature/udid/#appid#/post</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>#requestURL#</string>
<key>PayloadDisplayName</key>
<string>查询设备UDID</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>超级签名</string>
<key>PayloadIdentifier</key>
<string>dev.skyfox.profile-service</string>
<key>PayloadDescription</key>
<string>本文件仅用来获取设备ID</string>
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
2、自动注册UDID 及生成 mobileprovision
此处即是超级签名重点,写到这了不得不感谢一下 Spaceship 了。
Spaceship公开了Apple Developer Center的API,且能在极短时间内进行请求和返回。而且还预留接口。我们可以通过写ruby脚本在实现自动化注册UDID新建描述文件。
#登陆飞船
spaceship = Spaceship::Launcher.new(account, password)
#添加新设备号
device = spaceship.device.create!(name:udidname, udid:udid)
#添加描述文件
profile = spaceship.provisioning_profile.development.create!(bundle_id: bundleID,certificate: certs,name: "profilename")
#下载描述文件
aFile = File.write("profile.mobileprovision", profile.download)
以上为 Spaceship 部分ruby调用代码。更具体的方法可以查看Spaceship 的开发文档。
3、签名
如果在mac服务器下,将会有很多可以签名的开源工具。然而在linux下,少之又少。
可以自行开发,也可以使用开源工具,isign。
isign工具是为数不多的可以在linux下可以签名的工具。但是此工具对ipa的支持并不完善。有些包会无法签名报错。这个就需要各位自行探索了。
4、分发
重签名后获得的包可以使用itms-services进行分发。
写在最后:
目前很多签名商都会在上传的包内注入动态库,以实现获取安装,安装、点击的数据以及控制app闪退,时间锁等。更有甚者直接窃取用户数据。如果仅仅想要自行分发的话,建议还是自行部署一套吧。
IOS技术开发交流群:685955170
网友评论