苹果超级签名流程

news/2024/11/25 15:45:05/

超级签名指的是使用苹果个人开发者账号,将adhoc包分发给线上玩家的操作。为什么需要超级签名?原因是绕过appstore的方式有两种:

1. 使用企业包

2. 使用adhoc包

企业包的弊端是频繁掉签,掉签后,玩家无法登陆游戏,提示未受信任的开发者。其次,企业账号申请困难,市面上企业账号已经被炒到几十万RMB。好处显而易见,一个账号就可以搞定所有地区。

adhoc包,adhoc包无法自主安装,需要在苹果后台添加设备信息后,指定设备才可以安装ipa。缺点是无法大面积分发给用户自主安装,并且一个个人开发者账号,只能安装100台设备。优点是稳定不掉签。

 

实现adhoc包技术难点:

1. 如何获取UDID

2. 如何将获取到UDID,上传到苹果开发者中心(总不能手动添加吧)

3. 如何将包含UDID列表的描述文件下载下来

4. 如何使用下载的描述文件重新签名ipa包

 

首先如果获取UDID?

    苹果允许通过安装mobileconfig 描述文件的方式,获取到UDID信息,通过Safari下载预先生成描述文件,下载完成后系统弹出询问是否安装,这里肯定选择安装,安装完成后,系统会重定向到描述文件中指定的服务器,并携带者UDID等信息。(这个下载地址与回调地址一定要是HTTPS协议的)

<?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://complain.jnxgame.com/hallex/report/uuid.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>XXXX--【点击安装】</string>  <!--组织名称--><key>PayloadDisplayName</key><string>申请设备信息</string>  <!--安装时显示的标题--><key>PayloadVersion</key><integer>1</integer><key>PayloadUUID</key><string>3C4DC7D2-E475-3375-489C-0BB8D737A653</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>

 

如何上传设备信息,下载描述文件?

工具地址:https://github.com/fastlane/fastlane/

如何重签IPA

工具地址:https://github.com/zhlynn/zsign

 

关键步骤都解决了,开始部署到Linux。(下图是超级签名实现流程)

 

遇到问题:

  1. mobileconfig 签名问题,如果不签名安装时候会提示描述文件未签名。
    解决办法:找运维获取到要部署的https服务器的ca证书文件,公钥私钥证书文件,使用openssl 进行签名。
  2. 苹果账号登录需要 2FA认证,如何实现?
    解决办法:利用fastlane spaceauth 提前登录到苹果后台,输入手机验证码或digit码后,保存返回的FASTLANE_SESSION,到服务器上设置环境变量。注意:SESSION30天过期。
     

附件:

# author: ruiqingliang
# version: 0.1
# lastUpdateTIme: 2019-1-10
# address: ruiqingliang@sina.comrequire "spaceship"result = 0
begin # # 命令行获取参数AppleAccount = ARGV[0]ApplePassword = ARGV[1]AppleBundleId = ARGV[2]DeviceName = ARGV[3]DeviceUDID = ARGV[4]puts "#{AppleAccount}\t#{ApplePassword}\t#{AppleBundleId}\t#{DeviceName}\t#{DeviceUDID}"Spaceship::Portal.login(AppleAccount, ApplePassword)device = Spaceship::Portal.device.create!(name: DeviceName, udid: DeviceUDID)# 获取指定的描述文件,更新测试设备信息filtered_profiles = Spaceship::Portal.provisioning_profile.ad_hoc.find_by_bundle_id(bundle_id: AppleBundleId)filtered_profiles.collect do |_profile|puts _profile.name_profile.devices = Spaceship.device.all_profile.update!endputs "#{Time.now} 账号创建成功:#{device.name} #{device.udid}" rescue Exception => e puts "#{Time.now} 账号创建失败,原因:#{e.message}" afile = File.new("rubylog.txt", "a+")afile.syswrite("#{Time.now} 账号创建失败,原因:#{e.message}\n")afile.closeresult = 1
endexit(result)

 

# author: ruiqingliang
# version: 0.1
# lastUpdateTIme: 2019-1-10
# address: ruiqingliang@sina.comrequire "spaceship"
require "json"result = 0
begin # 获取配置信息AppleAccount = ARGV[0]ApplePassword = ARGV[1]AppleBundleId = ARGV[2]DownloadFolder = ARGV[3]puts "profile download:#{AppleAccount}\t#{ApplePassword}\t#{AppleBundleId}\t#{DownloadFolder}"Spaceship::Portal.login(AppleAccount, ApplePassword)# Download a specific profile as filematching_profiles = Spaceship::Portal.provisioning_profile.ad_hoc.find_by_bundle_id(bundle_id: AppleBundleId)first_profile = matching_profiles.firstFile.write("#{DownloadFolder}/output.mobileprovision", first_profile.download)puts "#{Time.now} 描述文件下载成功" 
rescue Exception => e puts "#{Time.now} 描述文件下载失败,原因:#{e.message}" afile = File.new("rubylog.txt", "a+")afile.syswrite("#{Time.now} 描述文件下载失败,原因:#{e.message}\n")afile.closeresult = 1
endexit(result)

 


http://www.ppmy.cn/news/287745.html

相关文章

Gossip分布式通信协议副本管理器说明

Gossip中副本管理器 副本管理器状态 不考虑应用时一个副本管理器应该有的状态&#xff1a; 值&#xff0c;这是由副本管理器维护的应用状态的值&#xff0c;每个副本管理器是一个状态机。起始于一个特定的初始值。此后的状态完全由更新操作决定。值的时间戳&#xff1a;代表更…

苹果cms播放器html,苹果cms 全局播放器dplayer带后台Dplayer播放器苹果CMSV10插件

苹果cms 全局播放器dplayer带后台Dplayer播放器苹果CMSV10插件 在使用dplayer播放器播放视频的时候&#xff0c;我们可能会用的在视频播放前加个广告&#xff0c;暂停视频的时候&#xff0c;也加个广告什么的&#xff0c;就像爱奇艺视频、腾讯视频那样在播放前加贴片广告&#…

苹果播放器实现单曲循环

一直觉得苹果的音乐播放器比较坑。 但是&#xff0c;用了qq音乐播放器&#xff0c;发现&#xff0c;我竟然没法把电脑里的音乐导入到手机里。更坑。 必须重用苹果的音乐播放器。下简称MP&#xff08;music player&#xff09;。 因为学英语&#xff0c;必须要单曲循环无数遍&a…

苹果cms怎么用html5播放,苹果cms整合ckplayerx播放器教程

苹果cmsV8整合CKPlayer教程 1、首先找到苹果cmsV8的根目录&#xff0c;打开 /player/ 文件夹 2、新建一个 mp4.js 和 m3u8.js 文件&#xff0c;新建播放器代码内容如下&#xff1a;(两个内容一致)MacPlayer.Html ; MacPlayer.Show(); 3、新建保存后&#xff0c;将 mp4.js 和 m…

苹果CMX8的播放地址加密解决

修改 inc/common/template.php//url加密function encrypt($urljiami, $key2 22ad6h5){$coded ;$keylength strlen($key2);for ($i 0, $count strlen($urljiami); $i < $count; $i $keylength){$coded . substr($urljiami, $i, $keylength) ^ $key2;}return str_repla…

苹果cmsv10 dplayer播放器优化

播放器功能&#xff1a; 支持格式&#xff1a;m3u8、mp4播放记忆P2P加速(去除在视频中P2P信息)自动播放下一集&#xff08;仅电脑端&#xff09;去掉弹幕&#xff08;需要的自行去掉注释&#xff09;手机增加引导点击播放图片 使用方法&#xff1a; 将文件上传到自己的网站&…

苹果手机iphone如何播放电脑中的视频

用手机看视频已经是人们习以为常的事情了&#xff0c;随着手机容量的增大&#xff0c;很多人选择把视频下载到手机本地观看&#xff0c;但是有些视频我们存放在电脑上&#xff0c;想用手机看怎么办呢&#xff1f;很多人选择把视频用数据线传输到手机上&#xff0c;但是这样略显…

苹果cms播放器不能全屏播放解决方法

声明&#xff1a;除特殊声明外本站文档均由作者原创&#xff0c;转载请注明出处&#xff0c;原文地址&#xff1a;苹果cms播放器不能全屏解决方法 如果播放器被包含在 iframe 里&#xff0c;尝试在 iframe 上添加 allowfullscreen 属性。 默认状态&#xff0c;<iframe>…