ipa重簽名最直接的教程


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

重簽名的意義:ipa 重簽名最大的用處是,不必重新打包,和配置其它第三方獲取 appkey 等操作,直接重簽名之后依然可以擁有這些功能,更快的發布測試或者灰度版本。

本文介紹三種方式的重簽名,當然着重介紹第一種,因為目前來說是簽名最全面的,也是最可靠的。

首先,我們得准備需要的東西

  • 開發證書或者企業證書,什么都好吧,反正是你想重簽名的證書,關於證書和 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. 百度上一大堆關乎重簽名的辦法,但是預期都不是很理想,因為命令行的方法現在幾乎行不通了。

開始我們的重簽名之路吧

一、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 包的流程大致如下:

  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. 你們還可以通過下面的文章去嘗試適合自己的方法,有圖形化重簽的工具,也有純命令行的,但是對於結果,就看個人造化了。

二、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。到此,配置完成,點擊重新簽名!
  • 噔噔噔!簽名成功請看下圖:


     
     
  • 用 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)

參考文章:

iOS ipa包重新簽名

ipa重簽名

iOS 應用重簽名上

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

iOS App 簽名的原理

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

iOS ipa重簽名工具 - iOS App Signer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM