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):

1605558-875314c2f3f2ba66.jpeg
 

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這個框架來解決這個問題。

image
安裝sigh:
sudo gem install sigh

對IPA包重簽名: 

 fastlane sigh resign

此時會顯示:

屏幕快照 2019-09-20 下午2.42.51.png
 

輸入你的IPA路徑,點擊回車,此時會顯示你電腦中可用的證書:


屏幕快照 2019-09-20 下午2.45.15.png
 
輸入你要更改的證書名,和你要更改的證書路徑,回車:
屏幕快照 2019-09-20 下午2.49.04.png
 

ipa包重簽名成功

參考:iOS重簽名--Fastlane/sign腳本

 

四、重簽后的iPA上傳分發服務器,通過分發鏈接讓用戶下載 

參考: 阿里雲運維部署工具AppDeploy詳細教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM