剛入職新公司,遇到了幾個問題,感覺需要記錄一下,順便分享。#
問題 1 界面和代碼對應#
由於剛入職,所以不知道哪個界面對應的代碼是哪裡,又加上項目比較老,比較大,如何才能快速找準界面和代碼之間對應,這是第一個難題。
做法:
- 最開始,我是先走一遍 app 的所有界面,大概知道都有哪些,然後開始看代碼命名,根據名字猜測可能是哪個界面,然後驗證是否正確。但是隨後發現這樣很累,而且因為代碼比較老,有些類重寫了,老的都沒有刪除,命名又很像,所以有些根本沒辦法對應;而且這樣效率很低,如果項目不大還好,但是項目大,時間又緊,那這樣根本就行不通。
- 然後晚上下班,走在路上的時候,突然想起來之前看到的一篇博客,Method Swizzling 和 AOP 實踐,這裡面介紹用 Method Swizzling 來實現給每個界面加統計,然後我就想,既然都能給每個界面加統計了,那肯定也能打印每個界面的信息。所以,我就用 Method Swizzling 實現替換 ViewWillAppear: 方法,然後每次界面出現的時候都會打印當前類名。這樣我只需要運行 app,然後點擊界面,然後就會打印當前類。很輕鬆就能找到界面對應代碼。
問題 2 模擬器運行沒問題,直接運行真機也沒問題,但是打包出來的顯示就不對#
開發新版本,打包給測試,結果測試說你這顯示不對;然後我仔細看看,確實所有顯示數字的地方都出錯了,但是我在模擬器上運行沒錯啊,所有的數據都正常啊
排查:
- 最開始我以為是證書的原因,但是想想不太可能,如果是證書的問題話,造成的後果是打不了包,而不應該是打包數據不對。然後我在想,會不會是因為我打包的時候少設置了什麼?但是也沒有排查出來,而且也沒人告訴我需要特別設置的。
- 於是就需要定位錯誤,然後我上真機,直接運行,妹的,也沒錯啊,這是什麼鬼。
- 然後求人問佛,想想,會不會是因為 scheme 的問題,因為如果說打包和直接運行有什麼不同的話,那就是 scheme 了。於是我把 scheme 改為 release 直接運行,報錯了。。。。。無奈,就把 scheme 改為 debug,打個包(打包是個很痛苦的事,電腦卡,項目大,編譯要等幾分鐘,親測,我點擊 archieve,然後去上廁所,回來發現還沒編譯完。。。。。。),安裝,結果顯示還是不正確。欲哭無淚啊。。。。
- 然後測試催我,於是我找旁邊的人幫我打個包,結果發現,他打的包就沒問題。。。所以我以為確實是我打包的時候少選了什麼,但是發現不了啊。
- 第二天來,測試又催著打包,沒辦法,接著查,發現敵情 —— iOS 開發遇到的坑之三 -- 使用 asi 框架在 xcode 下正常運行,但是打包時卻不能進行網絡訪問和asi 打包 ipa 的坑,然後我按照說明改了一下,編譯打包,見證奇蹟的時刻到了,好了,丫的,果然是這個問題。項目比較老,所以用的 asi,一直沒有替換,然後我以前還沒用過,但是神奇的是,我旁邊的那個 iOS,他的編譯條件就是 - fno-objc-arc,但是打出來的包就沒問題,這點好生奇怪!
問題 3 模擬器運行沒問題,真機運行出問題#
上個問題剛改好,晚上測試提個 bug,點擊鏈接跳轉 web,加載失敗,安卓就可以
排查:
- 測試剛提過來的時候,我檢查了一下,發現模擬器上是沒有問題的,測試告訴我,安卓也是沒有問題的,所以我就在想,丫的,莫非又是打包出問題了?但是我把鏈接替換成百度,就沒有問題啊。
- 老規矩,上真機,然後單步調試,鏈接沒錯啊,但是確實加載不出來啊,難道是 webView 的那個界面寫錯了(我新來的,所以用的是之前已有的加載 web 的類),然後一步一步調試,發現每次加載的時候,都在鏈接後面拼接了 "?source=app",哈哈哈,我果然聰明,註釋掉,運行,shit,怎麼還不行;然後後台告訴我,這個其實不會影響鏈接,所以我乖乖的又把註釋給打開了。
- so,那到底是為神马,還是後台說,你試試其他手機可以打開嗎?把這個鏈接複製到瀏覽器裡,看看能直接打開嗎?然後我試了一下,丫的,果然,在瀏覽器裡也打不開。然後換其他測試機,發現可以,可以,可以啊,原來測試都沒看其他的手機啊。。。。(Ps:我的手機還沒加到測試帳號裡,所以一直不能用),唉,但是手機明明聯網了啊,為什麼就是不行呢,為什麼啊,後來想想,首先:我們公司的網是有限制的;再次:這個鏈接本來就是測試的鏈接,有可能前端沒配好。
- 但是,不是我的問題,為什麼我會改這麼長時間啊?為什麼呢?對啊,為什麼呢?