因為現在做的是企業版的APP,不能保證用戶不越獄,也不能保證有些用戶喜歡自己修改ipa包里的資源文件,比如更換一些資源圖片。因此,我們有必要在請求報文中,增加正版應用的二進制和資源文件的標識,讓服務器知道,此請求是否來自正版的未經修改的app。
在沙盒中我們可以讀到自己程序的二進制,也可以讀到資源文件簽名文件,我們可以對其取md5值得到一個標記字符串,然后發給服務器,對比存儲在服務器段的MD5值是否正確,如果APP被修改就禁止繼續使用,殺掉自己的進程。
下面是獲取自己APP的二進制、資源文件和簽名文件的獲取方法。因為從iOS8開始沙盒機制有所變化,文稿和資源文件分開在不同的路徑,而且文稿是一個動態的路徑,所以獲取方法要區分系統版本。
下面貼代碼:
定義加密類型(MD5 SHA1 SHA512)
封裝加密方法
獲取資源包的加密后字符串
獲取簽名證書加密后的字符串
可以根據自己的需要把這些信息發送給服務器進行判斷,現在我們做的是APP版本號、iPhone版或iPad版再加上面兩條字符串發給服務器。
外加自動殺掉自己進程的方法:
補充:突然發現在打包之前clean一下,獲取到的sourceData會改變,現在的做法是增加一個彈出的alertView,title是獲取的sourcedata的md5值,每次打包前clean一次,然后run一次,通過彈出的提示手動記錄一下md5值,然后注釋掉alertView的代碼,這時候再打包,注意這次就不要clean了,只改變幾行簡單的代碼不會影響APP的功能也不會改變appdata和sourcedata。(如果發現其他更好的方法會及時更新)