重簽名的意義:ipa 重簽名最大的用處是,沒必要從新打包,和配置其它第三方獲取 appkey 等操做,直接重簽名以後依然能夠擁有這些功能,更快的發佈測試或者灰度版本。ios
本文介紹三種方式的重簽名,固然着重介紹第一種,由於目前來講是簽名最全面的,也是最可靠的。git
mobileprovision
文件必須更名字爲 embedded.mobileprovison
而後安裝。Bundle Identifier
的基礎上增長了證書的 ID
appid
和 provisoning profile
,否則同appid
的會覆蓋。/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ruby
更新 ruby 版本sudo gem install sigh
若是出錯那就換成gem install sigh
安裝過程是漫長的。(在安裝 sigh 以前,你得檢查 gem的鏡像源,如今通常爲https://gems.ruby-china.org
若是提示 timeout 仍是啥的,請把 https 的 s 去掉,從新添加) 設置能夠參考Ruby Chinasigh resign
:最有效,不出錯的重簽名方法。已驗證embedded.mobileprovison
放在同一文件夾目錄下,同級sigh resign
或者 fastlane sigh resign
命令Signing Identity
這個就是你的證書的十六進制串,輸入以後回車,而後等待見證奇蹟的時刻吧。看圖說話最直接,下面就看看終端的截圖,當出現Successfully signed 路徑/xxx.ipa!原來文件夾中的.ipa已經被重簽名了。github
如今還能用的助手很少了,pp 助手目前還存活,iTools 已經頻繁報錯沒更新了。pp 助手安裝 ipa 包的流程大體以下:shell
sigh resign
關於重簽名有時候失敗或者沒法安裝的狀況說明。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
)安全
下載 iResign,下載完直接有個可執行的iResign.app,雙擊執行
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>bundle id
。到此,配置完成,點擊從新簽名!噔噔噔!簽名成功請看下圖:ruby
Github的官方 read me 提示:This app requires Xcode to be installed, it has only been successfully tested on OS X 10.11 at this time.
bash
下載 iOS App Signer 源碼,運行在 May Mac 上app
Re-Sign Only
是無效的),而後,點擊star!provisoning profile
描述文件中的東西,因此不用咱們本身填寫變動的bundle id
參考文章:curl
iOS ipa包從新簽名ide