1. 程式人生 > >關於iOS 9.2.1 從App Store下載出現不規則崩潰的問題

關於iOS 9.2.1 從App Store下載出現不規則崩潰的問題

##問題分析:

使用iOS系統9.2.1的手機,真機除錯情況下,即Debug 模式,App不會出現任何崩潰,執行沒有問題。然而,打包釋出到App Store上面去的時候,即Release模式,用手機從App Store上面下載,執行,則出現各種崩潰,不規律崩潰等等。

發現 [ iOS 原生二維碼生成與掃描 ] (https://github.com/kingsic/SGQRCode) 在這個開源專案中的圖片 [email protected] 在iOS 9.2.1系統上執行出現崩潰問題。

##原理: 在 Xcode 8 中,當你資原始檔中[含有16點陣圖]或者[圖片顯示模式γ值為'P3']

且iOS targets設定為iOS 9.3以下就會出現這個問題, 如果你的app需要支援廣色域顯示的話,那你必須得把target設定成iOS 9.3+,相反,如果你的app不需要支援廣色域且你想相容 iOS 9.3 之前的專案,你就得把所有的16位的或者顯示模式為'P3'圖片全都替換成8位模式的SRGB顏色的圖片。

##步驟:(源於網路,侵權刪!)

  1. 打包,匯出專案的 ipa 檔案

  2. 定位到該ipa檔案修改後綴名 .ipa 為.zip.

  3. 解壓該 .zip 檔案. 解壓後的目錄裡面會有一個包含著你的 app bundle 檔案的 Payload 資料夾.

  4. 開啟終端病切換到你的app的Payload資料夾下的 .app bundle 資料夾內,形式如下: cd path/to/Payload/your.app

  5. 用 find 命令定位到 Assets.car 檔案 .app bundle , 形式如下: find . -name 'Assets.car'

    比如:SGQRCodeExample這個工程,find 的結果為: ./SGQRCodeExample.app/Assets.car

  6. 使用 assetutil 命令找到任何包含著 16-bit or P3 的資原始檔, 對每個 Assets.car 之行以下命令 : sudo xcrun --sdk iphoneos assetutil --info/path/to/a/Assets.car> /tmp/Assets.json 注:這裡的/path/to/a/Assets.car

    指的是Assets.car的路徑,不要直接複製!!!使用上一步find命令的結果。

    比如:SGQRCodeExample這個工程打包後,命令應該為:

    sudo xcrun --sdk iphoneos assetutil --info ./SGQRCodeExample.app/Assets.car> /tmp/Assets.json
    
  7. 開啟上一步生成的 /tmp/Assets.json 檔案並查詢包含有 “DisplayGamut": “P3” 或者相關的內容. 這段json的"Name"欄位對應的值就是16位或顯示的γ值為P3的資原始檔名. 以下是完成圖片,再提醒,注意這個info /path/to/a/Assets.car,按照我的終端命令來就可以的了。

希望各位開發者能夠輕鬆解決這個問題。

** 完 **