前言
我們都知道 iOS 是使用 ipa 檔案來安裝 app,而該如何換掉 ipa 裡頭的憑證呢?
解壓縮
首先,我們先將 Application.ipa 解壓縮,可以得到一個 PayLoad 的資料夾,裡頭包含著一個應用程式 Application。
移除舊有的簽章
接著我們透過 terminal 來進行移除的動作
rm -rf PayLoad/Application/_CodeSignature
找出你打算簽章的 provisionprofile
你可以透過 Apple developer 的網頁直接下載,或是查看本機裡頭的檔案,路徑會是在:
~/資源庫/MobileDevice/Provisioning Profiles/
用 Finder 到那路徑之後,可以使用空白鍵來進行預覽, 透過名稱以及 SHA-1 來辨別。
嵌入 mobileprovision 到 app 之中
接著就複製並改名字放入 app 中
cp yourProvisionProfile.mobileprovision Payload/Application.app/embedded.mobileprovision
來製作簽章所需要的 entitlements.plist
先將 .mobileprovision 輸入成 profile.plist
security cms -D -i yourProvisionProfile.mobileprovision > profile.plist
再來利用 profile.plist 輸出成 entitlements.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlements.plist\
記得 App Bundle Identifier 得和簽章的名稱一致
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier tw.Archie.Application" Payload/Application.app/Info.plist
就可以開始簽章了!
我們先透過 security 來找尋並複製剛剛 .mobileprovision 的 SHA-1
security find-identity -p codesigning -v
這邊記得要從 Frameworks 開始一個一個簽,再來才是 App 本身;
假設你的 mobileprovision SHA-1 為 B77ED97FBFC708A802BDB159CC2ED4E2A4472A09
codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Frameworks/someFramework.framework
一個一個簽章完之後,便可以簽署 app 了
codesign -f -s B77ED97FBFC708A802BDB159CC2ED4E2A4472A09 --entitlements entitlements.plist Payload/Application.app/Application
最後確認是否有簽對
我們可以透過 codesign 來查詢
codesign -vv -d Payload/Application.app
如果資訊都沒錯的話,就來輸出吧!🎉
zip -qr Resigned.ipa Payload
題外話,使用 Xcode 安裝
就在 Xcode 之中打開 Devices and Simulators 視窗,並將剛剛最後產出的 ipa 直接拖拉到你的裝置即可!