ipa 包重簽名最新最簡單教程
重簽名的意義:ipa 重簽名最大的用處是,不必重新打包,和配置其它第三方獲取 appkey 等操作,直接重簽名之后依然可以擁有這些功能,更快的發布測試或者灰度版本。
本文介紹三種方式的重簽名,當然着重介紹第一種,因為目前來說是簽名最全面的,也是最可靠的。
首先,我們得准備需要的東西
- 開發證書或者企業證書,什么都好吧,反正是你想重簽名的證書,關於證書和 provision描述文件的申請和下載,請參考下面鏈接iOS 證書申請和使用詳解
- 這里我說一下必須要注意的點,證書必須是申請證書的電腦導出的p12文件才可以,因為有信任認證,不然雙擊是不會添加到鑰匙串,也不會顯示出來私鑰的。
- 下載下來的
mobileprovision
文件必須改名字為embedded.mobileprovison
然后安裝。 - 一般重簽名用企業發布證書!個人證書,公司證書當然也可以(你重簽的包也只能是你的 devices 里選中的機器能運行)
- 按照原理是可以無限重簽的,但是因為蘋果的新的安全驗證機制,加強了對 ipa 安裝包簽名的驗證,主要區別在於 ipa 唯一標識在原來的
Bundle Identifier
的基礎上增加了證書的 ID - 每一個重簽版本都需重新申請一個
appid
和provisoning profile
,不然同appid
的會覆蓋。
- mac電腦的開發環境配置,不得不提的就是工具集的神器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的鏡像源,現在一般為https://gems.ruby-china.org
如果提示 timeout 還是啥的,請把 https 的 s 去掉,重新添加) 設置可以參考Ruby China - 確保自己這個時候還是清醒的,因為一系列安裝踩坑下來,你都快崩潰了(當然,你臉好當我沒說)
- 准備好需要重簽名的 ipa 包
- 准備好需要重簽名的 ipa 包(不會打包的看這里iOS App打包上架超詳細流程(手把手圖文教你))
- 如果你是偷別人的包,請先把 ipa 包砸殼iOS逆向,這里面的大神帶你飛
- 百度上一大堆關乎重簽名的辦法,但是預期都不是很理想,因為命令行的方法現在幾乎行不通了。
開始我們的重簽名之路吧
一、sigh resign
:最有效,不出錯的重簽名方法。已驗證
- 第一步,把我們要重簽名的 ipa 包和我們下載下來安裝的
embedded.mobileprovison
放在同一文件夾目錄下,同級 - 第二步,終端 cd 到這個 ipa 的文件夾目錄下,執行
sigh resign
或者fastlane sigh resign
命令 - 第三步:這時候,sigh 會直接彈出下面這個指令要你輸入:
Signing Identity
這個就是你的證書的十六進制串,輸入之后回車,然后等待見證奇跡的時刻吧。
看圖說話最直接,下面就看看終端的截圖,當出現Successfully signed 路徑/xxx.ipa!原來文件夾中的.ipa已經被重簽名了。

- 第四步:驗證我們重簽的 ipa 包的時刻到了
現在還能用的助手不多了,pp 助手目前還存活,iTools 已經頻繁報錯沒更新了。pp 助手安裝 ipa 包的流程大致如下:
- 點擊應用游戲目錄,選擇連接的機器,有個應用列表,點擊左上角有個安裝,這時候就可以安裝我們本地的 ipa 包了
- 先安裝重簽名之前的 ipa 包,然后再安裝我們重簽名之后的 ipa 包,如果沒有覆蓋,出現了兩個一模一樣的 App,各自點開沒閃退沒打不開的情況下,說明我們簽名成功了。
sigh resign
關於重簽名有時候失敗或者無法安裝的情況說明。
- 如果ipa 里面有除了系統之外的
framework
或者dylib
的話,也需要先簽名,不然也會導致簽名后安裝失敗!至於 sigh 里面大致執行的腳本代碼如下:
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
看得懂或者熟悉腳本的同學可以前往以下地址:/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
版本號是根據自己當前 sigh
插件的版本號決定的(直接執行此腳本可以重簽多 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
)
- 蘋果的政策越來越收緊,這種方案的可行性的周期不確定。因為很多方案已經隨着版本的更新,變得不可行了。從 iTunes 關閉了 ipa應該管理功能就知道了,對於包的安全性蘋果越來越重視。另外,企業賬號申請的難度越來越高,也有這種趨勢。
- 你們還可以通過下面的文章去嘗試適合自己的方法,有圖形化重簽的工具,也有純命令行的,但是對於結果,就看個人造化了。
二、iResign 重簽名方案
-
- 參數路徑跟圖片上描述的很清楚,第一項是你要重簽名的 ipa 的路徑,第二項是我們重簽名的配置描述文件的路徑(不用改為 embedded 也可以),第四項,填寫我們生成重簽名用到的
mobileprovison
的 bundle identifier,勾選修改 ID,第五項是我們重簽名用到的mobileprovison
的證書 - 第三項很多教程說不用填,但是不填是無法自動生成的,會一直卡在
entitlements generated
這個步驟,無法生成。所以我們要自己生成entitlements.plist
! 首先我們把要重簽的 XXXX.ipa 解壓后得到Payload
目錄,然后終端 cd 到Payload
目錄下,執行以下命令:/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
。到此,配置完成,點擊重新簽名! -
噔噔噔!簽名成功請看下圖:
- 用 pp 助手安裝驗證,是沒問題的,可以同時存在兩個不同的包
- iResign 使用注意事項:第三個 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的對應。
三、 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 源碼,運行在 May Mac 上
- 第一項,填寫我們需要重簽名的 ipa 路徑,第二項是我們要簽名的證書,第三項選擇我們配置的 provisoning profile(默認項
Re-Sign Only
是無效的),然后,點擊star!
- pp助手驗證通過!此方式會自動分析
provisoning profile
描述文件中的東西,所以不用我們自己填寫變更的bundle id
總結:目前重簽名比較便利的方式就是以上三種,都是腳本方式實現的,通過便歷XXXX.app 包內的內容進行重簽名和配置。其中關乎簽名失敗與否的兩個點在於:1. entitlements.plist 的配置 2. 重簽名證書的配置(推送等,還有 bundle id)
參考文章: