iOS 企業簽名與超級簽名 不接業務,不接業務,不接業務

開篇

好久沒有靜下心來寫點iOS方面的東西了,可能是忙了一些,也可能我們都不是幾年前的我們,但工資卻回退到幾年前
好了,不說廢話,今天講講簽名的那些事

不上架蘋果商店,目前用戶下載大約有兩種

1、蘋果企業證書籤名
2、蘋果超級簽名

蘋果企業證書籤名(企業籤)


特點總結

1、隨時可分發APP
2、可接受Apple不可接受的APP

缺點總結

1、蘋果開發者賬號難求,據說最近炒到了50萬左右
2、市場上證書混亂,爛大街的證書不少
3、掉籤風險極高
4、掉籤後重新獲取用戶,運營成本加大

重簽名方法

工具

1、iOS APP Signer
2、iReSign
等的(有很多第三方提供的,據說會盜證書)

使用方法

上面兩種見Git

終端簽名

1、準備IPA後綴文件(Ad Hoc Deployment 打包)xx.mobileprovision文件(企業)

2、獲取證書裏面的信息(xx.plist)

security cms -D -i xx.mobileprovision > xx.plist

3、導出xx.plist

/usr/libexec/PlistBuddy -x -c 'Print:xx項目名'  xx.plist > xx.plist

4、解壓ipa包

unzip xx.ipa

5、刪除舊簽名

rm -rf Payload/xx.app/_CodeSignature/

6、刪除動態庫簽名(所有framework都有需要執行此步驟)

①、刪除簽名
rm -rf Payload/xx.app/Frameworks/xx.framework/_CodeSignature

②、重新簽名
codesign -f -s "證書的名稱" Payload/xx.app/Frameworks/xx.framework/

7、替換配置文件

cp xx.mobileprovision Payload/xx.app/

8、簽名

codesign -f -s "證書的名稱" --entitlements xx.plist Payload/xx.app

9、打包成ipa

zip -r new_xx.ipa Payload/

最終 new_xx.ipa就是重新簽名的文件

蘋果超級簽名

原理

說的明白一些,開發者可以在開發者後臺添加手機的UDID,然後重新打包一個IPA文件,分發平臺,然後被添加的UDID就可以下載

整體架構圖

特點總結

1、直接分發,安裝即可運行,不需要用戶做企業證書的信任操作
2、目前穩定,不會有證書吊銷導致的業務風險

缺點總結

1、單開發者賬號的iPhone設備數量只有100個,導致分發成本非常高(99美元/1年/100個設備)

XML製作細節

1、在你的Web服務器上創建一個.mobileconfig的XML格式的描述文件;
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文件,引導用戶安裝
2、服務器做一些301跳轉,存儲UDID等操作

自動化

註冊新的開發者設備+更新Provisioning Profile

接下來的關鍵點就是如何在獲取到用戶的UDID之後,秒級完成註冊新的開發者設備+更新Provisioning Profile的。 這裏我們需要藉助開源工具(spaceship):

Spaceship公開了Apple Developer Center的API,而且執行速度比解析開發者Web頁面快兩個數量級,從而在非常短的時間內搞定Provisioning Profile。 這個框架解決了整套機制的關鍵問題,成爲整個工具鏈的基石。其實某平臺早就完成了UDID獲取和應用簽名分發的技術儲備,只差這套API。

下面是解析開發者Web頁面和直接訪問API的速度對比圖:

自動簽名封包

此處其實應該有一萬個解決方案,通過命令行腳本/Python腳本/或者其他第三方都能實現。

這裏推薦使用 Sigh 這個框架來解決這個問題。

Sigh的用法和配置都非常簡單,一個純命令工具,豐富的配置選項(自行查閱文檔),活躍的社區,完全夠用了。

直接上演示圖:

分發

不多說了,什麼蒲公英,fir,各種小平臺等等

不接業務,不接業務,不接業務

然後不接受各種諮詢,有問題評論區
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章