1. 程式人生 > >iOS巔峰之系統iOS9.3以下從App Store下載的應用就奔潰

iOS巔峰之系統iOS9.3以下從App Store下載的應用就奔潰

一、前言

如果你剛剛升級了Xcode8,而你的專案的Deployment Target是iOS 9.3以下,執行iOS8的時候過了幾十秒後crash到main函式,出現EXC_BAD_ACCESS,或者崩潰到imageNamed:,或者每次編譯執行隨機崩潰到某個地方。那麼恭喜你,你讀完這個文章你可能就解決了。

二、崩潰原因

在Xcode8中,如果你的圖片資原始檔裡有16點陣圖或者圖片顯示模式為P3,並且Deployment Target是iOS9.3以下的就會出現這個問題。(話說我公司的專案裡面就出現了一個小按鈕,導致了這次崩潰,不知道設計師是怎麼弄出來的這個特殊圖片…)如果你的App需要支援wide color functionality,那你就必須設定Deployment Target為iOS9.3以上。如果你的APP不需要支援wide color functionality並且你希望相容iOS老版本,那麼你需要將所有16-bit or P3 assets的圖片轉換為8-bit sRGB assets

三、定位到問題圖片

1.找到匯出專案的ipa檔案;
2.對該ipa檔案使用解壓工具解壓,或者直接修改後綴名.ipa為.zip後直接解壓該檔案;
3.解壓後會有裡面會有Payload資料夾,點選Payload檔案裡面有你的APP檔案;
4.開啟終端,進入到你的APP的Payload資料夾下的.app bundle資料夾內(開啟終端,輸入 cd 拖入Payload資料夾裡面的檔案,回車cd 檔案目錄/Payload/your.app);
5.在終端裡,用find命令找到Assets.car檔案(find . -name 'Assets.car'
6.使用 assetutil 命令匯出圖片的資訊儲存到Assets.json檔案中
sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json


注意:/path/to/a/Assets.car 替換成find . -name 'Assets.car'獲取到的路徑
7.前往資料夾 開啟剛才生成的Assets.json檔案,查詢含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的內容。這個對應的Name就是出現問題的圖片了。

Name:是圖片的名字, 將找到的圖片發給UI重新設計就ok了