就在昨天,通過企業id發布了公司使用的一個iOS app 由于在真機調試沒有發現問題。就直接替換了線上的文件。但是通過下載安裝發現,開啟程序后閃退,而且是每次都出現,這就讓我感到非常迷茫,真機調試都是沒問題的,為什么會出現如此嚴重的bug。立刻iphone連接orgnizer。查看device logs 發現都是bad access錯誤,控制臺也出現了Could not lookup ReleaseType from system version dictionary錯誤,我先檢查了bad access定位的代碼,沒有發現問題。然后就查找releasetype的問題,對于這個問題網上相關資料很少,也沒能幫我解決問題。我就繼續從代碼入手。發現都是與dispatch_queue 有關,我就把關于他的很多資料看了一遍,由于我是iOS5編譯,iOS6運行,我就懷疑與dispatch_queue在5 6上的arc差異造成,然后從這個方向入手繼續追查(其實我走錯了道,后面說)。不斷修改相關代碼,重新發布,安裝運行。由于通過xcode安裝是沒有任何問題的,因此只能這樣調試。折騰下來,問題依舊。然后就在網上搜索所有相關資料。到了12點我依然沒有解決問題。只能洗洗睡了,早上起來,腦子清醒了許多,拋棄了昨晚所有的想法,直接從代碼入手,一句句注釋掉代碼,然后調試。仔細的檢查代碼。最終發現while 循環在應該退出的地方沒有退出,會不會是這里的問題呢。修改之后,發布測試。一切正常。果然問題是這里造成的,至于為什么死循環在debug階看不到問題,我現在還沒有明白。
推薦一個關于 iOS Device logs調試的文章:
http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs
總結一下這次的經歷:
1,這是一個愚蠢的bug。 while 死循環。測試沒問題不代表發布的沒問題,因為還有可能存在不同機型有不同的問題。
2,上線發布沒有備份線上版本,造成我只能恢復最老的版本。以后不管什么情況的更新都要做到本分前一個版本。
3,由于沒有備份 + debug沒有問題,造成我心里緊張,慌亂之下找問題跑偏了方向,造成很多時間的浪費。一定要淡定,否則就亂套了,腦子也就不好使了。
4,沒有仔細檢查代碼,否則早就搞定了。雖然第一次仔細檢查了,但是不全面。仔細檢查包括全面細致。
5,出現 Could not lookup ReleaseType from system version dictionary 錯誤 可能是由于代碼問題造成。
6,dispatch_release 在 iOS6 arc下不需要使用了,但是在 iOS6以前的版本arc中需要 http://stackoverflow.com/questions/8618632/does-arc-support-dispatch-queues
為什么是一,因為以后還有可能有別的愚蠢出現
新聞熱點
疑難解答