1. 程式人生 > >iOS App Archive 版本出錯的問題 除錯和解決方法

iOS App Archive 版本出錯的問題 除錯和解決方法

現象:

debug聯機除錯時無問題
archive出來安裝到iPhone執行報錯

聯機在organizer中看錯誤日誌:

Triggered by Thread:  0

Thread 0 Crashed:
0   SanguoOnline                       0x001a763e rijndael_decrypt + 14
1   SanguoOnline                       0x001a81f2 decryption + 34
2   SanguoOnline                       0x0010a024 cocos2dx_lua_loader + 376

rijndael_decrypt 

此方法是用來解密下載的lua檔案


為了更好的定位錯誤根源 Mac連上iPhone後 edit scheme 在Run ***(工程名)更新Build Configuration選擇Release 這樣保證聯機執行的版本與釋出版本一致,再執行程式開始除錯。

果然在rijndael_decrypt  報錯

跟蹤程式碼除錯,發現明明一個變數有值但將它賦值給另外一個變數時出錯 錯誤資訊: Exception Subtype: EXC_ARM_DA_ALIGN at 0x02dff001

懷疑是編譯器問題 嘗試修改編譯器優化數值:
工程-> Target -> Apple LLVM 5.1 - Code Generation -> Optimization Level -> Release 設定為 None [-O0] (與debug儲存一致) 再聯機執行除錯,問題沒有再出現 



現在需要單獨設定此檔案 為不優化,首先把 Optimization Level -> Release 值 改回去
再在 Build Phases 中搜索 rijn 找到對應的檔案 點選 Complier Flag 設定為 -O0

再聯機進行除錯,問題沒有出現
再Archive出來 再除錯 問題沒有出現,至此問題結束

問題關鍵:
1. 如果Archive 版本有Debug版本不存在的問題,首先修改Scheme將執行方式改完Release以保證聯機除錯版本一致
2. 如果確實存在通過修改程式碼邏輯無法修復的問題 需要考慮是否為編譯器的bug 調整編譯優化值