一個iOS 11BUG的發(fā)現(xiàn)棵里、定位和解決

前言

在iOS 11發(fā)布之后衍慎,出現(xiàn)了一系列適配相關(guān)的問題,UIScrollView在pagingEnabled=YES時滑動手勢不靈敏稳捆,UITableView的滑動刪除功能變動乔夯,UIImagePickerViewController的取消按鈕點擊區(qū)域變小等,本文介紹其中一個UIAlertView問題侧纯,分享其發(fā)現(xiàn)眶熬、定位和解決妹笆。

正文

1拳缠、問題產(chǎn)生

問題的最初窟坐,是iOS 11正式版發(fā)布后不久绵疲,測試的同學提了一個iOS 11相關(guān)的BUG,表現(xiàn)是:在直播間內(nèi)發(fā)送聊天信息帕胆,如果被禁言般渡,會彈出“被禁言”提示驯用,鍵盤收回去儒老,然后就彈不出來

開發(fā)在接到這個BUG的時候薇正,先把問題抽象出來幾個要素:直播間內(nèi)挖腰、鍵盤彈出练湿、彈出提示、鍵盤收回辽俗、鍵盤無法彈出崖飘。

彈出提示是用的UIAlertView的方式杈女。在鍵盤出現(xiàn)時彈出UIAlertView的提示,鍵盤會收起赊琳,UIAlertView消失后,鍵盤會再次彈出板丽,是一次正常的表現(xiàn)趁尼。

2、問題復現(xiàn)

按照復現(xiàn)路徑做一次嘗試砚殿,發(fā)現(xiàn)BUG可以復現(xiàn)似炎,確定問題存在悯姊;

根據(jù)經(jīng)驗,猜測問題可能出現(xiàn)在鍵盤和UIAlertView上悯许,與“禁言”的業(yè)務無關(guān)。

在直播間內(nèi)嘗試其他非“禁言”的場景瘩扼,同樣是在鍵盤出現(xiàn)的時候垃僚,彈出UIAlertView的提示谆棺,也會造成后續(xù)鍵盤無法彈出的情況。

在嘗試完其他非直播間的主場景之后纫谅,發(fā)現(xiàn)問題可以描述為:

iOS 11的機器只要彈出來一次UIAlertView付秕,之后再通過becomeFirstResponder無法呼起鍵盤侍郭;必須手動點擊輸入?yún)^(qū)域,觸發(fā)系統(tǒng)的鍵盤彈出行為猛计,或者切入后臺再切回來,才能正常彈出來鍵盤勾拉。

部分頁面在點擊評論后藕赞,會添加一層透明maskView斧蜕,并彈出鍵盤砚偶。點擊透明的maskView會調(diào)用resignFirstResponder,在鍵盤消失的notification中消除maskView均芽。因為鍵盤無法彈出(也無法收到鍵盤消失的notification,但maskView還是正常添加)羞反,導致這部分頁面無法進行后續(xù)的交互囤萤。

3、問題評估

在復現(xiàn)問題后澄惊,需要對問題的嚴重性進行評估富雅,確定BUG修復的優(yōu)先級没佑。

從已知的表現(xiàn)來看蛤奢,iOS 11下的使用影響較大(UIAlertView的提示較多)陶贼。

用iOS 11的機器下載外網(wǎng)版本進行測試待秃,發(fā)現(xiàn)BUG竟然無法復現(xiàn)!

雖然很詭異枉氮,但是問題的優(yōu)先級可以降到更低嘲恍,排入正常的BUG解決列表中雄驹。

4医舆、問題解析

外網(wǎng)版本是Xcode8編譯的本,本地版本使用的Xcode9 GM編譯的蔬将,難道是Xcode 9編譯導致爷速?

1、新建一個demo霞怀,只有輸入框和按鈕惫东,模擬UIAlertView彈出,發(fā)現(xiàn)demo是正常的毙石;

2廉沮、把app的工程設(shè)置復制到demo,把對輸入框的屬性設(shè)置同樣復制到demo徐矩,demo依舊正常滞时;

3、把demo代碼復制到app滤灯,并把app的rootViewController賦值為demo中的VC坪稽,依舊正常;

可以確定是app中某部分代碼導致的鍵盤無法彈出的鳞骤。

經(jīng)過二分注釋的方式,迅速(4庭猩、5次左右)定位到問題是app中的某個Service類導致震糖。

仔細排插Service類的屬性,發(fā)現(xiàn)里面有一個屬性的是繼承UIWindow并且level比UIWindowLevelStatusBar高。

自此雅宾,根據(jù)所學和蘋果UIKit的文檔,我們可以對問題進行一次回溯。

5库北、問題回溯


蘋果官網(wǎng)上響應鏈和UIWindow的說明孵构,里面關(guān)于becomeFirstResponder()的解釋是:

Asks UIKit to make this object the first responder in its window.

對于UIAlertView的iOS 11系統(tǒng)行為蜡镶,猜測:

1芹橡、在UIAlertView彈出的時候,會搶占系統(tǒng)的keyWindow,所以會出現(xiàn)鍵盤在UIAlertView的時候收回(因為keyWindow改變)弓乙;

2浓瞪、在UIAlertView消失的時候,會遍歷所有Window骂倘,找到其中z軸最高作為keyWindow,所以會出現(xiàn)鍵盤在UIAlertView消失后彈出(keyWindow變成原來的)荧库;

通過寫代碼調(diào)試app般此,確定了上面的猜測。

在iOS 11壁畸,如果UIAlertView彈出時令杈,存在windowLevel 大于 UIWindowLevelNormal 的UIWindow,就會觸發(fā)這個鍵盤無法彈出的BUG。

6残邀、問題修復

1耻台、保證app中,沒有常駐的UIWindow坝咐;

2映挂、修復鍵盤無法彈出時咪辱,maskView無法消除的BUG专筷;

3味咳、UIAlertView在后續(xù)的版本替換掉;

總結(jié)

這次問題從產(chǎn)生、復現(xiàn)、定位渡处、評估再到修復的時間稼锅,和寫這篇文章的時間差不多锥债。

BUG的解決流程各不相同恼策,借此提醒自己對于BUG的解決要有目的性和優(yōu)先級。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骤视,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盗扇,老刑警劉巖佑笋,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜀备,死亡現(xiàn)場離奇詭異荒叶,居然都是意外死亡些楣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門污茵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事咐蝇。” “怎么了巷查?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵有序,是天一觀的道長。 經(jīng)常有香客問我岛请,道長旭寿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任崇败,我火速辦了婚禮盅称,結(jié)果婚禮上肩祥,老公的妹妹穿的比我還像新娘。我一直安慰自己缩膝,他們只是感情好混狠,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疾层,像睡著了一般将饺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痛黎,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天予弧,我揣著相機與錄音,去河邊找鬼湖饱。 笑死掖蛤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的井厌。 我是一名探鬼主播蚓庭,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仅仆!你這毒婦竟也來了彪置?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蝇恶,失蹤者是張志新(化名)和其女友劉穎拳魁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撮弧,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡潘懊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贿衍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片授舟。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贸辈,靈堂內(nèi)的尸體忽然破棺而出释树,到底是詐尸還是另有隱情,我是刑警寧澤擎淤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布奢啥,位于F島的核電站,受9級特大地震影響嘴拢,放射性物質(zhì)發(fā)生泄漏桩盲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一席吴、第九天 我趴在偏房一處隱蔽的房頂上張望赌结。 院中可真熱鬧捞蛋,春花似錦、人聲如沸柬姚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽量承。三九已至搬设,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宴合,已是汗流浹背焕梅。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工迹鹅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卦洽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓斜棚,卻偏偏與公主長得像阀蒂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弟蚀,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容