IPA重簽名的那些事

這兩天終于徹底搞定了ipa簽名的問(wèn)題,整理一下作為總結(jié)

打包流程

IPA打包.png

超好用的resign腳本

之前搜索了一個(gè)很簡(jiǎn)單的resign腳本,跟這里描述的做法差不多《iOS ipa重簽名》。然而在簽我們的ipa的時(shí)候卻發(fā)生失敗,仔細(xì)看了一下,原來(lái)是因?yàn)槲覀兊?strong>ipa是啟用了push notification的,需要用到entitlement,然而這個(gè)文件在xcode工程中是找不到的。后來(lái)又找到了一篇更實(shí)用的文章《iOS的ipa重簽名》,里面提到的fastlane/sign腳本能夠解決在簽名時(shí)遇到的各種問(wèn)題,只要mobileprovision文件和p12文件是對(duì)應(yīng)得上,并且證書名稱沒(méi)有寫錯(cuò),就絕對(duì)沒(méi)有問(wèn)題了。腳本的核心技術(shù)在于使用了PlistBuddy來(lái)解析plist文件里面的信息并做處理,腳本的核心代碼在這一行

/usr/bin/codesign ${VERBOSE} -f -s "$CERTIFICATE" --entitlements="$TEMP_DIR/newEntitlements" "$APP_PATH"

關(guān)于Entitlements

Entitlements其實(shí)是一個(gè)配置文件,對(duì)于一些要開啟的app功能,需要使用Entitlements文件來(lái)做配置。Entitlements文件管三個(gè)東西:iCloudpush notification、App沙盒(iosapp沙盒是自動(dòng)配置的,并不需要Entitlements,所以這里實(shí)際上是指mac下的app沙盒)。官方文檔地址如下:https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AboutEntitlements.html

關(guān)于p12和mobileprovision

在平常用xcode開發(fā)的時(shí)候,我們經(jīng)常會(huì)被兩個(gè)東西卡住Code Signing IdentityProvisioning Profile。其實(shí)這兩個(gè)設(shè)置項(xiàng)對(duì)應(yīng)的就是p12文件和mobileprovision文件。按照蘋果官方的說(shuō)法,正確的理解應(yīng)該是這樣:

  • mobileprovision:里面描述的是你這個(gè)開發(fā)者id對(duì)應(yīng)的后臺(tái)配置信息,譬如支持什么appid、添加了哪些測(cè)試設(shè)備、開啟了什么特殊功能(GameCenterIAP、Push)等等,并帶上一個(gè)ID
  • p12:實(shí)際上是一個(gè)鑰匙串,使用了非對(duì)稱加密算法,專門對(duì)你的app進(jìn)行簽名,確保你發(fā)布的app不會(huì)被人冒名頂替。在MemberCenter上下載的證書,實(shí)際上只含有publickey,即你只知道這個(gè)app能用什么名稱來(lái)進(jìn)行簽名,但如果真的需要對(duì)app進(jìn)行簽名的話,必須要持有privetakey的原始創(chuàng)建者才能進(jìn)行簽名

綜上,那為什么p12mobileprovision是怎樣對(duì)應(yīng)上的呢,就是因?yàn)?strong>mobileprovision里面含有了p12文件的publickey。

總結(jié)一下:app打包的時(shí)候,通過(guò)mobileprovision文件來(lái)對(duì)代碼進(jìn)行簽收,通過(guò)p12文件完成加密過(guò)程,p12文件和mobileprovision文件通過(guò)publickey可以一一對(duì)應(yīng)

關(guān)于證書

蘋果的證書類型共有三種

  • iOS Development:真機(jī)調(diào)試用證書,不能用于IPA打包
  • iOS Distribution:打包IPA用證書,不能用于真機(jī)調(diào)試
  • Apple Push Services:用于后臺(tái)APNs用,前端用不上
    一覽表如下

MoreAPNs是用Http2.0協(xié)議來(lái)工作的,非常時(shí)髦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容