博客 / 詳情

返回

iOS9系統下SEGV_ACCERR問題的解決方案

很久不寫博客,稍有生疏,感謝一直以來大家的支持。最近我又回到了自己的老本行——iOS開發。之後的博客應該大部分是iOS相關了,當然,我也會持續關注前端的技術,也歡迎朋友們來捧場哦😸😸😸

今天要講的是開發過程中遇到的一個小問題,看到網上也有很多人為之困擾。幾番搜索之後,找到了解決方案,希望該方案也能對大家有所幫助。

起因

相信很多開發者收集數據都會用到友盟、bugly之類的工具,筆者就在使用bugly時遇到了一個很棘手的問題:iOS9的系統下,會有一個頻發的崩潰,bugly上的描述為SEGV_ACCERR

這個描述大都指對象提前釋放,然而堆棧信息也沒能提供特別有用的信息來幫助開發者定位該問題。筆者和測試小夥伴反覆操作都很難找到必現步驟,逐步打斷點調試也無法找到提前釋放的對象。

本來想提高適配版本到iOS10,但是又無法拋棄那一羣不會更新系統的小白用户們。於是伴隨着漫天飛舞的柳絮,我陷入了沉思😔😔

又一村😏

抱着試一試的心態,反覆換着關鍵詞查,終於。。。在stackoverflow上找到了一個支持量為2的解決方案。這個方案講到:該崩潰與項目中的圖片資源相關,具體是伽馬值為P3的圖片。

這個方案看着不太靠譜,但是能怎麼辦,當然是選擇試一試咯,我也很絕望啊。

以下為該解決方案的翻譯:

  1. 打包app並導出ipa
  2. 將導出的ipa文件後綴名改為.zip
  3. 解壓該zip文件,解壓後有一個Payload文件夾,該文件夾中是你的app bundle
  4. 打開終端,定位到該app bundle。命令如下:
    cd path/Payload/xxx.app
  5. 使用find命令查找到Assets.car文件。命令為:
    find . -name 'Assets.car
  6. 使用assetutil命令找到任何包含着16-bit或者P3的資源文件。對上一步找出的每個Assets.car執行如下命令:
    sudo xcrun --sdk iphoneos assetutil --info /path/Assets.car > /tmp/Assets.json

    第6步裏面有兩個路徑,第一個路徑/path/Assets.car不要照抄,替換為第五步中查找出的路徑。
  7. 使用open命令打開第六步生成的Assets.json。命令為:
    open /tmp/Assets.json

    在第7步打開的文件中查找P3字段,對應的Name字段即為該資源的名稱,刪除相應資源,或者修改文件格式即可。

😛以下為筆者的操作過程,大家可以對照使用:

圖片描述

Done✌️

使用以上方案,筆者找到了伽馬值為P3的圖片,並和設計小哥哥聯繫修改了該資源。回測之後,奔潰問題已不再復現,如果該方案也幫助到你了,不妨點個贊吧。

下一週的主題還在構思中。。。記得常回來看看👋

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.