ipa 包重簽名最新最簡單教程
重簽名的意義:ipa 重簽名最大的用處是,不必重新打包,和配置其它第三方獲取 appkey 等操作,直接重簽名之后依然可以擁有這些功能,更快的發(fā)布測試或者灰度版本。
本文介紹三種方式的重簽名,當(dāng)然著重介紹第一種,因為目前來說是簽名最全面的,也是最可靠的。
首先,我們得準(zhǔn)備需要的東西
- 開發(fā)證書或者企業(yè)證書,什么都好吧,反正是你想重簽名的證書,關(guān)于證書和 provision描述文件的申請和下載,請參考下面鏈接iOS 證書申請和使用詳解
- 這里我說一下必須要注意的點(diǎn),證書必須是申請證書的電腦導(dǎo)出的p12文件才可以,因為有信任認(rèn)證,不然雙擊是不會添加到鑰匙串,也不會顯示出來私鑰的。
- 下載下來的
mobileprovision
文件必須改名字為embedded.mobileprovison
然后安裝。 - 一般重簽名用企業(yè)發(fā)布證書!個人證書,公司證書當(dāng)然也可以(你重簽的包也只能是你的 devices 里選中的機(jī)器能運(yùn)行)
- 按照原理是可以無限重簽的,但是因為蘋果的新的安全驗證機(jī)制,加強(qiáng)了對 ipa 安裝包簽名的驗證,主要區(qū)別在于 ipa 唯一標(biāo)識在原來的
Bundle Identifier
的基礎(chǔ)上增加了證書的 ID - 每一個重簽版本都需重新申請一個
appid
和provisoning profile
,不然同appid
的會覆蓋。
- mac電腦的開發(fā)環(huán)境配置,不得不提的就是工具集的神器HomeBrew
- 安裝 homebrew,命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 安裝 ruby,命令:
brew install ruby
更新 ruby 版本 - 安裝 sigh,命令:
sudo gem install sigh
如果出錯那就換成gem install sigh
安裝過程是漫長的。(在安裝 sigh 之前,你得檢查 gem的鏡像源,現(xiàn)在一般為https://gems.ruby-china.org
如果提示 timeout 還是啥的,請把 https 的 s 去掉,重新添加) 設(shè)置可以參考Ruby China - 確保自己這個時候還是清醒的,因為一系列安裝踩坑下來,你都快崩潰了(當(dāng)然,你臉好當(dāng)我沒說)
- 準(zhǔn)備好需要重簽名的 ipa 包
- 準(zhǔn)備好需要重簽名的 ipa 包(不會打包的看這里iOS App打包上架超詳細(xì)流程(手把手圖文教你))
- 如果你是偷別人的包,請先把 ipa 包砸殼iOS逆向,這里面的大神帶你飛
- 百度上一大堆關(guān)乎重簽名的辦法,但是預(yù)期都不是很理想,因為命令行的方法現(xiàn)在幾乎行不通了。
開始我們的重簽名之路吧
一、sigh resign
:最有效,不出錯的重簽名方法。已驗證
- 第一步,把我們要重簽名的 ipa 包和我們下載下來安裝的
embedded.mobileprovison
放在同一文件夾目錄下,同級 - 第二步,終端 cd 到這個 ipa 的文件夾目錄下,執(zhí)行
sigh resign
或者fastlane sigh resign
命令 - 第三步:這時候,sigh 會直接彈出下面這個指令要你輸入:
Signing Identity
這個就是你的證書的十六進(jìn)制串,輸入之后回車,然后等待見證奇跡的時刻吧。
看圖說話最直接,下面就看看終端的截圖,當(dāng)出現(xiàn)Successfully signed 路徑/xxx.ipa!原來文件夾中的.ipa已經(jīng)被重簽名了。
- 第四步:驗證我們重簽的 ipa 包的時刻到了
現(xiàn)在還能用的助手不多了,pp 助手目前還存活,iTools 已經(jīng)頻繁報錯沒更新了。pp 助手安裝 ipa 包的流程大致如下:
- 點(diǎn)擊應(yīng)用游戲目錄,選擇連接的機(jī)器,有個應(yīng)用列表,點(diǎn)擊左上角有個安裝,這時候就可以安裝我們本地的 ipa 包了
- 先安裝重簽名之前的 ipa 包,然后再安裝我們重簽名之后的 ipa 包,如果沒有覆蓋,出現(xiàn)了兩個一模一樣的 App,各自點(diǎn)開沒閃退沒打不開的情況下,說明我們簽名成功了。
sigh resign
關(guān)于重簽名有時候失敗或者無法安裝的情況說明。
- 如果ipa 里面有除了系統(tǒng)之外的
framework
或者dylib
的話,也需要先簽名,不然也會導(dǎo)致簽名后安裝失敗!至于 sigh 里面大致執(zhí)行的腳本代碼如下:
for framework in "$FRAMEWORKS_DIR"/*
do
if [[ "$framework" == *.framework || "$framework" == *.dylib ]]
then
log "Resigning '$framework'"
# Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
# shellcheck disable=SC2086
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
checkStatus
else
log "Ignoring non-framework: $framework"
fi
done
看得懂或者熟悉腳本的同學(xué)可以前往以下地址:/usr/local/lib/ruby/gems/2.3.0/gems/sigh-2.0.1/lib/assets/resign.sh
或者/usr/local/lib/ruby/gems/2.4.0/gems/fastlane-2.61.0/sigh/lib/assets/resign.sh
版本號是根據(jù)自己當(dāng)前 sigh
插件的版本號決定的(直接執(zhí)行此腳本可以重簽多 target 的 ipa:./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p "bundel id"=<path_to_provisioning_profile_for_app>.mobileprovision -p "bundel id"=<path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p "bundel id"=<path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p "bundel id"=<path_to_provisioning_profile_for_todayextension>.mobileprovision resignedYourApp.ipa
)
- 蘋果的政策越來越收緊,這種方案的可行性的周期不確定。因為很多方案已經(jīng)隨著版本的更新,變得不可行了。從 iTunes 關(guān)閉了 ipa應(yīng)該管理功能就知道了,對于包的安全性蘋果越來越重視。另外,企業(yè)賬號申請的難度越來越高,也有這種趨勢。
- 你們還可以通過下面的文章去嘗試適合自己的方法,有圖形化重簽的工具,也有純命令行的,但是對于結(jié)果,就看個人造化了。
二、iResign 重簽名方案
-
下載 iResign,下載完直接有個可執(zhí)行的iResign.app,雙擊執(zhí)行
- 參數(shù)路徑跟圖片上描述的很清楚,第一項是你要重簽名的 ipa 的路徑,第二項是我們重簽名的配置描述文件的路徑(不用改為 embedded 也可以),第四項,填寫我們生成重簽名用到的
mobileprovison
的 bundle identifier,勾選修改 ID,第五項是我們重簽名用到的mobileprovison
的證書 - 第三項很多教程說不用填,但是不填是無法自動生成的,會一直卡在
entitlements generated
這個步驟,無法生成。所以我們要自己生成entitlements.plist
! 首先我們把要重簽的 XXXX.ipa 解壓后得到Payload
目錄,然后終端 cd 到Payload
目錄下,執(zhí)行以下命令:/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i XXXX.app/embedded.mobileprovision) > Entitlements.plist
其中 XXXX.app 是你要重簽的 ipa的包名。生成的entitlements.plist
存放在Payload
目錄下,然后我們用 文本編輯或者 Xcode打開plist
文件,修改里面的<key>application-identifier</key>
<string>PREFIX.yourappBundleID</string>為第四項填寫的bundle id
。到此,配置完成,點(diǎn)擊重新簽名! -
噔噔噔!簽名成功請看下圖:
- 用 pp 助手安裝驗證,是沒問題的,可以同時存在兩個不同的包
- iResign 使用注意事項:第三個 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的對應(yīng)。
三、 iOS ipa重簽名工具 - iOS App Signer
Github的官方 read me 提示:This app requires Xcode to be installed, it has only been successfully tested on OS X 10.11 at this time.
-
下載 iOS App Signer 源碼,運(yùn)行在 May Mac 上
- 第一項,填寫我們需要重簽名的 ipa 路徑,第二項是我們要簽名的證書,第三項選擇我們配置的 provisoning profile(默認(rèn)項
Re-Sign Only
是無效的),然后,點(diǎn)擊star!
- pp助手驗證通過!此方式會自動分析
provisoning profile
描述文件中的東西,所以不用我們自己填寫變更的bundle id
總結(jié):目前重簽名比較便利的方式就是以上三種,都是腳本方式實(shí)現(xiàn)的,通過便歷XXXX.app 包內(nèi)的內(nèi)容進(jìn)行重簽名和配置。其中關(guān)乎簽名失敗與否的兩個點(diǎn)在于:1. entitlements.plist 的配置 2. 重簽名證書的配置(推送等,還有 bundle id)
參考文章: