ipa重簽名最直接的教程

ipa 包重簽名最新最簡單教程

重簽名的意義:ipa 重簽名最大的用處是,沒必要從新打包,和配置其它第三方獲取 appkey 等操做,直接重簽名以後依然能夠擁有這些功能,更快的發佈測試或者灰度版本。ios

本文介紹三種方式的重簽名,固然着重介紹第一種,由於目前來講是簽名最全面的,也是最可靠的。git

首先,咱們得準備須要的東西

  • 開發證書或者企業證書,什麼都好吧,反正是你想重簽名的證書,關於證書和 provision描述文件的申請和下載,請參考下面連接iOS 證書申請和使用詳解
  1. 這裏我說一下必需要注意的點,證書必須是申請證書的電腦導出的p12文件才能夠,由於有信任認證,否則雙擊是不會添加到鑰匙串,也不會顯示出來私鑰的。
  2. 下載下來的 mobileprovision文件必須更名字爲 embedded.mobileprovison 而後安裝。
  3. 通常重簽名用企業發佈證書!我的證書,公司證書固然也能夠(你重籤的包也只能是你的 devices 裏選中的機器能運行)
  4. 按照原理是能夠無限重籤的,可是由於蘋果的新的安全驗證機制,增強了對 ipa 安裝包簽名的驗證,主要區別在於 ipa 惟一標識在原來的Bundle Identifier的基礎上增長了證書的 ID
     
     
    圖中的框裏面的字符串就是證書 ID,只有二者徹底匹配,才能覆蓋安裝。
  5. 每個重籤版本都需從新申請一個 appidprovisoning profile,否則同appid的會覆蓋。
  • mac電腦的開發環境配置,不得不提的就是工具集的神器HomeBrew
  1. 安裝 homebrew,命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 安裝 ruby,命令:brew install ruby更新 ruby 版本
  3. 安裝 sigh,命令:sudo gem install sigh若是出錯那就換成gem install sigh安裝過程是漫長的。(在安裝 sigh 以前,你得檢查 gem的鏡像源,如今通常爲https://gems.ruby-china.org若是提示 timeout 仍是啥的,請把 https 的 s 去掉,從新添加) 設置能夠參考Ruby China
  4. 確保本身這個時候仍是清醒的,由於一系列安裝踩坑下來,你都快崩潰了(固然,你臉好當我沒說)
  • 準備好須要重簽名的 ipa 包
  1. 準備好須要重簽名的 ipa 包(不會打包的看這裏iOS App打包上架超詳細流程(手把手圖文教你)
  2. 若是你是偷別人的包,請先把 ipa 包砸殼iOS逆向,這裏面的大神帶你飛
  3. 百度上一大堆關乎重簽名的辦法,可是預期都不是很理想,由於命令行的方法如今幾乎行不通了。

開始咱們的重簽名之路吧

1、sigh resign:最有效,不出錯的重簽名方法。已驗證

  • 第一步,把咱們要重簽名的 ipa 包和咱們下載下來安裝的 embedded.mobileprovison放在同一文件夾目錄下,同級
  • 第二步,終端 cd 到這個 ipa 的文件夾目錄下,執行sigh resign或者 fastlane sigh resign命令
  • 第三步:這時候,sigh 會直接彈出下面這個指令要你輸入:Signing Identity這個就是你的證書的十六進制串,輸入以後回車,而後等待見證奇蹟的時刻吧。

看圖說話最直接,下面就看看終端的截圖,當出現Successfully signed 路徑/xxx.ipa!原來文件夾中的.ipa已經被重簽名了。github


 
 
  • 第四步:驗證咱們重籤的 ipa 包的時刻到了

如今還能用的助手很少了,pp 助手目前還存活,iTools 已經頻繁報錯沒更新了。pp 助手安裝 ipa 包的流程大體以下:shell

  1. 點擊應用遊戲目錄,選擇鏈接的機器,有個應用列表,點擊左上角有個安裝,這時候就能夠安裝咱們本地的 ipa 包了
  2. 先安裝重簽名以前的 ipa 包,而後再安裝咱們重簽名以後的 ipa 包,若是沒有覆蓋,出現了兩個如出一轍的 App,各自點開沒閃退沒打不開的狀況下,說明咱們簽名成功了。
  • sigh resign關於重簽名有時候失敗或者沒法安裝的狀況說明。
  1. 若是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安全

  1. 蘋果的政策愈來愈收緊,這種方案的可行性的週期不肯定。由於不少方案已經隨着版本的更新,變得不可行了。從 iTunes 關閉了 ipa應該管理功能就知道了,對於包的安全性蘋果愈來愈重視。另外,企業帳號申請的難度愈來愈高,也有這種趨勢。
  2. 大家還能夠經過下面的文章去嘗試適合本身的方法,有圖形化重籤的工具,也有純命令行的,可是對於結果,就看我的造化了。

2、iResign 重簽名方案

  •  

     

    下載 iResign,下載完直接有個可執行的iResign.app,雙擊執行
     
     
  • 參數路徑跟圖片上描述的很清楚,第一項是你要重簽名的 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。到此,配置完成,點擊從新簽名!
  • 噔噔噔!簽名成功請看下圖:ruby


     
     
  • 用 pp 助手安裝驗證,是沒問題的,能夠同時存在兩個不一樣的包
  • iResign 使用注意事項:第三個 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的對應。

3、 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.bash

  • 下載 iOS App Signer 源碼,運行在 May Mac 上app


     
     
  • 第一項,填寫咱們須要重簽名的 ipa 路徑,第二項是咱們要簽名的證書,第三項選擇咱們配置的 provisoning profile(默認項Re-Sign Only 是無效的),而後,點擊star!
     
     
  • pp助手驗證經過!此方式會自動分析 provisoning profile描述文件中的東西,因此不用咱們本身填寫變動的bundle id

總結:目前重簽名比較便利的方式就是以上三種,都是腳本方式實現的,經過便歷XXXX.app 包內的內容進行重簽名和配置。其中關乎簽名失敗與否的兩個點在於:1. entitlements.plist 的配置 2. 重簽名證書的配置(推送等,還有 bundle id)

參考文章:curl

iOS ipa包從新簽名ide

ipa重簽名

iOS 應用重簽名上

iOS ipa重簽名終極傻瓜版(含動態framework、entitlements)

iOS App 簽名的原理

ios app 開發中ipa從新簽名步驟介紹

iOS ipa重簽名工具 - iOS App Signer

相關文章
相關標籤/搜索