ipa重簽名

在工作中分發內測應用是經常遇見的,常見的方式有:TestFlight,用企業級開發者賬號,搜集UDID打包等方式,每種方式都各有利弊。

由于公司有企業級開發者賬號,所以平常應用內測比較簡單:直接拿企業級賬號打包.ipa,將.ipa發布到內測平臺(比如蒲公英fir.im),測試人員直接下載安裝就可,只是第一次需要信任一下企業級證書。

在工作中,有時候我們需要分發某個app的.ipa包,并沒有改app的源碼,無法用自己的賬號打包。這時就用到了重簽名。

其實ipa重簽名的應用場景很多,比如App Store上的付費應用,可以使用自己的開發者賬號,其.ipa包重新簽名,就可以安裝了。各大app助手平臺就是這么做的。注意直接從App Store下載的應用是加殼的,無法直接重新簽名,必須砸殼。iOSRE逆向

iReSign

iReSign是一個重簽名工具

iReSign

操作步驟:

  1. 選擇.ipa包的路徑
  2. 選擇embedded.mobileprovision文件路徑。embedded.mobileprovision是用于打包的配置文件Provisioning Profiles。可以直接在Certificates, Identifiers & Profiles中下載,注意下載之后需要將名字設置為embedded.mobileprovision。也可以在之前用該文件打包過的.ipa中找:解壓.ipa -> Payload -> xx.app顯示包內容 -> embedded.mobileprovision
  3. 網上有資料說entitlements.plist不需要填寫。我試過不填寫或填寫,我按照本文iOS證書及ipa包重簽名探究的方式寫的.plist文件。
  4. 選中修改ID,填寫修改的appid
  5. 選擇證書,下拉列表會顯示mac上有的證書。
  6. 點擊重新簽名!

結果是失敗了。

iResign運行結果

錯誤信息如下,可以查看該錯誤的IResign上的issues

[General] Error Domain=NSCocoaErrorDomain Code=3840 "Unexpected character s at line 1" UserInfo={NSDebugDescription=Unexpected character s at line 1, kCFPropertyListOldStyleParsingError=Error Domain=NSCocoaErrorDomain Code=3840 "Unexpected ';' or '=' after key at line 1" UserInfo={NSDebugDescription=Unexpected ';' or '=' after key at line 1}}

另外還有一個重簽名工具:ios-app-signer

實踐篇:iOS 應用重簽名(上)這篇文章介紹了entitlement文件如何寫,ios-app-signer的使用。我沒有測試該方法是否可行。

使用sigh腳本

在iReSign失敗后,我在網上找到使用sigh腳本的方式來重簽名。

  1. 安裝神器brew,沒有安裝的看這里:Homebrew
  2. 安裝ruby,命令:brew install ruby
  3. 安裝sigh,命令:sudo gem install sigh,過程比較漫長。

安裝sigh腳本后,開始進行重簽名,步驟如下

  1. 在終端輸入sigh resign,回車
  2. 把要簽名的ipa文件拖到窗口上,回車
  3. 填寫用來簽名的證書名,回車
  4. 把項目的配置文件embedded.mobileprovision文件拖到窗口上,回車
  5. 好了,resign腳本會自動更改bundel id,簽名并重新打包。

注意ipa包名不要有中文。如果應用有多個targetes無法用上述方式重簽名。參考文章:iOS的ipa重簽名

我按照如上步驟操作,成功使用企業級證書打包,上傳到蒲公英內測平臺上,也顯示的是企業級應用,但是無法安裝,提醒無法下載app,我手機上沒有從App Store上下載安裝該應用,排除了無法覆蓋問題。

iOS9以后,企業級應用不會出現信任按鈕,如果ipa包和網頁的bundle ID不匹配,就無法安裝。在iOS9之前是沒有檢測的。詳情見大神iOS程序犭袁的文章ios9適配系列教程

我操作成功的辦法

經過了無數次測試sigh腳本簽名方式,最后即將放棄的時刻成功了。

  1. 將需要重簽的.ipa文件和embedded.mobileprovision配置文件放到同一個文件夾下。注意路徑和文件名中不要出現中文,配置文件名一定要是embedded
  2. 在終端中cd到該路徑下
  3. 使用sigh腳本:sigh resign回車,運行結果跟上面是不一樣的,會直接出現Signing Identity:讓我填證書名。上述方式應該是第二步拖ipa文件到窗口,Path to ipa file:
  4. Signing Identity:上面會出現一串可用的identity,這里要輸入這些identity的十六進制串。回車
  5. 成功了:Successfully signed 路徑/xxx.ipa!原來文件夾中的.ipa已經被重簽名了。上傳到蒲公英內測平臺,完全可以下載使用。
操作步驟

本文涉及到的知識點都是從網上Google的,感謝網友們分享的資料,還涉及的一些參考資料:

代碼簽名探析

mac用終端對ipa包重新簽名

iPhone 如何不越獄安裝越獄軟件

企業證書重新簽名ipa

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容