自建ios超级签过程

自建超级签

https://blog.csdn.net/LiaoQuesg/article/details/101219984

签名的时候需要安装ruby,踩了无数坑

#下载

$ wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz

#解压

$ tar -zxvf ruby-2.5.0.tar.gz

#进入目录

$ cd ruby-2.5.0

#创建安装目录

$ mkdir -p /usr/local/ruby

#配置并制定安装位置

$ ./configure –prefix=/usr/local/ruby

#编译与安装,这个过程很慢,你可以去吃顿饭或者抽一盒烟

$ make && make install

#建立软链接

使用命令ln -s 文件所在位置 目的位置
命令这么写。(ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby)
是LN 不是in

ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby

ln -s /usr/local/ruby/bin/gem /usr/bin/gem

#查看ruby版本

$ ruby -v

完成!!!!!!!!!!!

然后是gem安装依赖

gem install fastlane

出错

ERROR: Loading command: install (LoadError) cannot load such file — zlib

ERROR: While executing gem … (NoMethodError) undefined method `invoke_with_build_args’ for nil:NilClass

ERROR: Loading command: install (LoadError) cannot load such file — zlib

需要安装 ruby 本身对 zlib 的支持,瞎猜的,本身不会 ruby,下面是步骤

yum -y install zlib-devel
cd ruby-2.6.4/ext/zlib
ruby ./extconf.rb
make
make install
若执行 make 是抛出错误:make: *** No rule to make target/include/ruby.h’, needed by zlib.o’. Stop. 则执行以下命令

vim Makefile
将 zlib.o: $(top_srcdir)/include/ruby.h 这一行加 # 注释之后添加 zlib.o: ../../include/ruby.h 即可成功。
第二个错误和*个则是大同小异,是 openssl 抛出的错误 openssl library could not be found. you might want to use –with-openssl-dir=<dir> option to specify 巨恶心!

yum install openssl-devel -y
cd ruby-2.6.4/ext/openssl
ruby ./extconf.rb
make
make install
我这里在执行第二步时一直抛出上面的问题,*后我只能认为是我的 openssl 的版本低引起的问题,无奈之下只能更换了 openssl 的版本为 OpenSSL 1.1.1d 10 Sep 2019,如果有朋友发生同样的问题,可以尝试更换一下 openssl 的版本。

然后执行 make 接着抛出问题:ruby make: *** No rule to make target/include/ruby.h’, needed by ossl.o’,一个道理

vim Makefile
这次是在 Makefile 中添加一行 top_srcdir = ../..,如下图

%title插图%num

这次是终于成功了~~~
然后是提示

make提示:g++命令未找到
通常情况下在centos下安装软件就用yum.

关键是,使用yum你的知道安装包的名字是什么。

如果直接键入yum install g++,会告诉你没有这个包。

所以你应该使用gcc-c++,这才是这个包的名字。

所以应该是执行:yum install gcc-c++

Ubuntu 下安装g++

sudo apt install g++

iOS 超级签名详解

一、原理

把安装设备当做开发设备进行分发。说的明白一些,开发者可以在开发者后台添加手机的UDID,然后重新打包一个IPA文件,分发平台,然后被添加的UDID就可以下载。

二、优缺点

优势:

直接分发,安装即可运行,不需要用户做企业证书的信任操作

目前稳定,不会有证书吊销导致的业务风险(后续苹果政策风险非常高)

缺点:

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

开发者账号需要预先写入安装设备的UDID,在工具链不通的情况下,获取用户的UDID相对困难和繁琐,而且手动写入UDID不存在商用可行性,当然目前这个缺点被解决了

三、整体运行流程

1605558-fe383e054c661575.png

1.用户手机安装预留的描述文件,获取本机udid后,向服务器返回用户的udid

2.服务器收到UDID后,将UDID添加到开发者账号下,下载此udid签名用的证书描述文件。

3.然后用此udid签名用的证书描述文件,把预留的ipa重签。

4.重签后的iPA上传分发服务器,通过分发链接让用户下载。

下面是这四个步骤的技术细节:

一、使用配置文件获取UDID

苹果公司允许开发者通过IOS设备和Web服务器之间的某个操作,来获得IOS设备的UDID(包括其他的一些参数)。这里的一个概述:

1.在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件;

2.用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的安装;

3.服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;

4.当用户设备安装描述文件后,设备会回调你设置的URL,如果你的URL返回302跳转的话,Safari浏览器会跳转到你所给的地址;服务器做一些301跳转,存储UDID等操作

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文件,引导用户安装

二、服务器收到UDID后,将UDID注册到某个开发者账号下,并下载新的描述文件

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

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

spaceship 是Fastlane的一个框架,安装spaceship

sudo gem install fastlane -n /usr/local/bin
sudo gem install pry  -n /usr/local/bin 
fastlane spaceship

具体细节:使用spaceship批量添加设备并更新profile

三、用此udid签名用的证书描述文件,把预留的ipa重签

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

安装sigh:
sudo gem install sigh

对IPA包重签名:

 fastlane sigh resign

此时会显示:

输入你的IPA路径,点击回车,此时会显示你电脑中可用的证书:

输入你要更改的证书名,和你要更改的证书路径,回车:

ipa包重签名成功

参考:iOS重签名–Fastlane/sign脚本

四、重签后的iPA上传分发服务器,通过分发链接让用户下载

参考: 阿里云运维部署工具AppDeploy详细教程

转载于:https://www.cnblogs.com/huadeng/p/11557679.html

相关资源:IOS超级签名+APP超级签名分发系统完美运营版+一键超级签名系统+…