方法壹、終端命令:sigh resign
1. 明白兩個東西:想要重簽名的證書和描述文件
開發證書或者企業證書,即妳想要重簽名的證書、provision描述文件。我是個人賬戶。沒交錢的那種。(Xcode中自動管理會生成證書和描述文件)。
註意?:每壹個重簽版本都需重新申請壹個 appid 和 provisoning profile,不然同appid的會覆蓋。
mac電腦的開發環境配置
安裝 homebrew,命令:
/usr/bin/ruby -e "$(curl -fsSL /Homebrew/install/master/install)"
安裝 ruby,命令:brew install ruby更新 ruby 版本
安裝 sigh,命令:sudo gem install sigh
如果出錯那就換成gem install sigh安裝過程是漫長的。(在安裝 sigh 之前,妳得檢查 gem的鏡像源,現在壹般為https://gems.ruby-china.org)
準備好需要重簽名的 ipa 包
自己的ipa 不用多說。編譯壹下在工程的Product 文件件下就有。也可以通過愛思助手下載具體教程:Mac 如何下載ipa
開始重簽名
第壹步,把我們要重簽名的 ipa 包和我們下載下來安裝的?embedded.mobileprovison放在同壹文件夾目錄下,同級
第二步,終端 cd 到這個 ipa 的文件夾目錄下,執行sigh resign或者?fastlane sigh resign命令
第三步:這時候,sigh 會直接彈出下面這個指令要妳輸入:Signing Identity這個就是妳的證書的十六進制串,輸入之後回車,然後等待見證奇跡的時刻吧。
請點擊輸入圖片描述
第四步:驗證我們重簽的 ipa 包的時刻到了
先安裝重簽名之前的 ipa 包,然後再安裝我們重簽名之後的 ipa 包,如果沒有覆蓋,出現了兩個壹模壹樣的 App,各自點開沒閃退沒打不開的情況下,說明我們簽名成功了。12sigh 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
done12345678910111213
看得懂或者熟悉腳本的同學可以直接看腳本文件:?resign.sh
位置:/Library/Ruby/Gems/2.3.0/gems/sigh-2.0.1/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應該管理功能就知道了,對於包的安全性蘋果越來越重視。另外,企業賬號申請的難度越來越高,也有這種趨勢。這種方法已經失敗。
方法二、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。到此,配置完成,點擊重新簽名!
噔噔噔!簽名成功請看下圖:
iResign 使用註意事項:第三個 plist 文件是必填的,修改ID 的 bunle id 要跟 plist 修改的對應。
請點擊輸入圖片描述
方法三、iOS ipa重簽名工具 -?iOS App Signer
下載 iOS App Signer 源碼,運行在 May Mac 上
請點擊輸入圖片描述
請點擊輸入圖片描述
第壹項,填寫我們需要重簽名的 ipa 路徑,第二項是我們要簽名的證書,第三項選擇我們配置的 provisoning profile(默認項Re-Sign Only 是無效的),然後,點擊star!
此方式會自動分析 provisoning profile描述文件中的東西,所以不用我們自己填寫變更的bundle id
請點擊輸入圖片描述
驗證得到ipa 直接在愛思助手中的:我的應用->中壹拖就可以了。
這個方式親自試了,比較簡單方便。
結論:
但是最後重簽名之前的能正常打開,重簽名之後的都是壹而退。暫時不知道什麽原因。