簽名原理
簽名原理其實就一句話,使用了蘋果提供給開發(fā)者的Ad-Hoc分發(fā)通道博投,把安裝設(shè)備當(dāng)做開發(fā)設(shè)備進(jìn)行分發(fā)巡验。
既然簽名用是 Ad-Hoc ,那么 Ad-Hoc 所具有的優(yōu)劣勢也一并繼承了下來:
優(yōu)勢:
直接分發(fā)哥艇,安裝即可運行,不需要用戶做企業(yè)證書的信任操作
目前穩(wěn)定僻澎,不會有證書吊銷導(dǎo)致的業(yè)務(wù)風(fēng)險(后續(xù)蘋果政策風(fēng)險非常高)
缺點:
單開發(fā)者賬號的iPhone設(shè)備數(shù)量只有100個貌踏,導(dǎo)致分發(fā)成本非常高(99美元/1年/100個設(shè)備)
開發(fā)者賬號需要預(yù)先寫入安裝設(shè)備的UDID,在工具鏈不通的情況下窟勃,獲取用戶的UDID相對困難和繁瑣祖乳,而且手動寫入UDID不存在商用可行性,當(dāng)然目前這個缺點被解決了
整體架構(gòu)
接下來我們就看看整套機(jī)制是如何進(jìn)行的:
1.設(shè)備安裝描述文件后秉氧,會向服務(wù)器發(fā)送設(shè)備的UDID眷昆。
2.服務(wù)器收到UDID后,將UDID注冊到某個開發(fā)者賬號下。
3.再生成簽名用的描述文件亚斋,給IPA簽名作媚。
4.然后iPA傳Server,使用itms-services方式讓用戶下載帅刊。
技術(shù)細(xì)節(jié)
使用配置文件獲取UDID
蘋果公司允許開發(fā)者通過IOS設(shè)備和Web服務(wù)器之間的某個操作纸泡,來獲得IOS設(shè)備的UDID(包括其他的一些參數(shù))。這里的一個概述:
1.在你的Web服務(wù)器上創(chuàng)建一個.mobileconfig的XML格式的描述文件厚掷;
2.用戶在所有操作之前必須通過某個點擊操作完成.mobileconfig描述文件的安裝弟灼;
3.服務(wù)器需要的數(shù)據(jù)级解,比如:UDID冒黑,需要在.mobileconfig描述文件中配置好,以及服務(wù)器接收數(shù)據(jù)的URL地址勤哗;
4.當(dāng)用戶設(shè)備安裝描述文件后抡爹,設(shè)備會回調(diào)你設(shè)置的URL,如果你的URL返回302跳轉(zhuǎn)的話芒划,Safari瀏覽器會跳轉(zhuǎn)到你所給的地址冬竟;
Apple Developer Center 自動化工具
接下來的關(guān)鍵點就是如何在獲取到用戶的UDID之后,秒級完成注冊新的開發(fā)者設(shè)備+更新Provisioning Profile的民逼。 這里我們需要借助開源工具(Spaceship):
Spaceship公開了Apple Developer Center的API泵殴,而且執(zhí)行速度比解析開發(fā)者Web頁面快兩個數(shù)量級,從而在非常短的時間內(nèi)搞定Provisioning Profile拼苍。
這個框架解決了整套機(jī)制的關(guān)鍵問題笑诅,成為整個工具鏈的基石。其實某平臺早就完成了UDID獲取和應(yīng)用簽名分發(fā)的技術(shù)儲備疮鲫,只差這套API吆你。
下面是解析開發(fā)者Web頁面和直接訪問API的速度對比圖:
如何自動簽名封包
此處其實應(yīng)該有一萬個解決方案,通過命令行腳本/Python腳本/或者其他第三方都能實現(xiàn)俊犯。
這里推薦使用 Sigh 這個框架來解決這個問題妇多。
Sigh的用法和配置都非常簡單,一個純命令工具燕侠,豐富的配置選項(自行查閱文檔)者祖,活躍的社區(qū),完全夠用了绢彤。
直接上演示圖:
OTA 分發(fā)已簽名的應(yīng)用
emmmm 此處也應(yīng)該有一萬個解決方案咸包,那就選擇 AppDeploy 吧。入選原因非常簡單杖虾,這個框架有Logo(看臉的社會就是那么真實...)烂瘫。
可視化部署流程如下圖(同時支持命令行調(diào)用):
結(jié)語
通過開源社區(qū)的力量,我們成功搞清了整個機(jī)制上的關(guān)鍵技術(shù)點,必須要說fastlane團(tuán)隊非常優(yōu)秀的提供了工具鏈關(guān)鍵一環(huán)(Spaceship)坟比,從而使Ad-Hoc自動分發(fā)成為可能芦鳍。
蘋果對于App的分發(fā)審核管控可以說是非常嚴(yán)苛,這背后既有安全考慮葛账,也有壟斷利益柠衅。但無論如何,對于終端用戶都是利大于弊的措施籍琳,App審核保護(hù)了無數(shù)的手機(jī)用戶免受惡意程序的侵害菲宴。 個人強烈反對這種繞過審核的分發(fā)形式。同時我要指出趋急,分發(fā)平臺以這種情況繞過蘋果的審核是嚴(yán)重違反 APPLE 開發(fā)商計劃許可協(xié)議的3.3.3條款:
未經(jīng) Apple 預(yù)先書面核準(zhǔn)或依照第 3.3.25 條 (In-App Purchase API) 得到允許喝峦,應(yīng)用程序不可經(jīng)由 App Store、Custom App Distribution 或 TestFlight 以外的分銷渠道提供呜达、解鎖或激活附加的特征或功能谣蠢。
開源工具鏈
獲取設(shè)備UDID的第三方庫:https://github.com/shaojiankui/iOS-UDID-Safari
Apple Developer Center 自動化工具:https://github.com/fastlane/fastlane/tree/master/spaceship
自動簽名封包工具:https://github.com/fastlane/fastlane/tree/master/sigh
OTA 分發(fā)應(yīng)用工具:https://github.com/atelierdumobile/appdeploy
參考資料
Over-the-Air Profile Delivery Concepts(獲取設(shè)備UDID官方文檔):https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/OTASecurity/OTASecurity.html
APPLE 開發(fā)商計劃許可協(xié)議:https://download.developer.apple.com/Documentation/Apple_Developer_Program_License_Agreement/Apple_Developer_Program_License_Agreement_20181019_Chinese_Simplified.pdf
作者:YiiOS
鏈接:https://juejin.cn/post/6844903846284804103
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)查近,非商業(yè)轉(zhuǎn)載請注明出處眉踱。