iOS 11 BUG 의 발견,위치 추적 및 해결

3687 단어 iOS11BUG
머리말
iOS 11 이 발 표 된 후에 일련의 적합 한 문제 가 발생 했다.UIScrollView 는 paging Enabled=YES 에서 미끄럼 제스처 가 민감 하지 않 고 UITableView 의 미끄럼 삭제 기능 변동,UIImagePickerViewController 의 취소 버튼 클릭 영역 이 작 아 지 는 등 본 고 는 그 중의 UIAlertView 문 제 를 소개 하고 발견,포 지 셔 닝 과 해결 을 공유 했다.
본문
1.문제 발생
문 제 는 최초 로 iOS 11 정식 판이 발 표 된 지 얼마 되 지 않 아 테스트 학생 들 이 iOS 11 과 관련 된 버그 를 제기 한 것 이다.생방송 에서 채 팅 메 시 지 를 보 내 면 금 지 될 경우'금 지 된 메시지'알림 이 뜨 고 키보드 가 꺼 지면 튕 겨 나 오지 않 는 다 는 것 이다.
개발 은 이 BUG 를 받 았 을 때 먼저 문 제 를 몇 가지 요 소 를 추상적으로 추정한다.생방송 중,키보드 팝 업,팝 업 알림,키보드 회수,키보드 팝 업 이 불가능 하 다.
"팝 업 힌트 는 UIAlertView 방식 을 사용 합 니 다."키보드 가 나타 날 때 UIAlertView 의 알림 이 뜨 면 키보드 가 걷 히 고 UIAlertView 가 사라 지면 키보드 가 다시 뜨 는 정상 적 인 표현 입 니 다."
2.문제 재현
재현 경로 에 따라 한 번 시도 해 보 니 BUG 가 재현 할 수 있 고 문제 가 존재 하 는 지 확인 할 수 있 습 니 다.
경험 에 따 르 면 문 제 는 키보드 와 UIAlertView 에 나타 날 수 있 으 며'금언'업무 와 는 무관 하 다.
생방송 에서'금언'이 아 닌 다른 장면 을 시도 하 는 것 도 마찬가지 로 키보드 가 나 올 때 UIAlertView 의 알림 이 뜨 고 후속 키보드 가 뜨 지 못 하 는 상황 을 초래 할 수 있다.
다른 비 생방송 간 의 메 인 장면 을 시도 한 후에 문 제 는 다음 과 같다.
iOS 11 기 계 는 UIAlertView 를 한 번 만 튕 긴 후 become First Responsder 를 통 해 키 보드 를 호출 할 수 없습니다.입력 영역 을 수 동 으로 클릭 하여 시스템 의 키보드 팝 업 행 위 를 촉발 하거나 배경 에 들 어가 서 다시 잘라 야 키보드 가 정상적으로 튀 어 나 올 수 있 습 니 다.
일부 페이지 는 댓 글 을 클릭 하면 투명 마스크 뷰 를 추가 하고 키 보드 를 팝 업 합 니 다.투명 한 maskView 를 누 르 면 resignFirst Responsder 를 호출 하여 키보드 가 사라 진 notification 에서 maskView 를 제거 합 니 다.키보드 가 팝 업 되 지 않 기 때문에(키보드 가 사라 진 notification 을 받 을 수 없 지만 maskView 는 정상적으로 추 가 됩 니 다)이 부분 페이지 는 후속 적 인 상호작용 을 할 수 없습니다.
3.문제 평가
문제 가 복 원 된 후 에는 문제 의 심각 성 을 평가 해 버그 복구 의 우선 순 위 를 정 해 야 한다.
알려 진 표현 을 보면 iOS 11 에서 의 사용 영향 이 크다(UIAlertView 의 알림 이 많다).
iOS 11 의 기기 로 외부 네트워크 버 전 을 다운로드 하여 테스트 를 진행 하 였 는데,BUG 가 복원 할 수 없 음 을 발견 하 였 습 니 다!
이상 하지만 문제 의 우선 순 위 는 더 낮 아 져 정상 적 인 버그 해결 목록 에 들 어 갈 수 있다.
4.문제 해석
외부 네트워크 버 전 은 Xcode 8 컴 파일 본 입 니 다.로 컬 버 전에 서 사용 하 는 Xcode 9 GM 컴 파일 입 니 다.Xcode 9 컴 파일 로 인 한 것 입 니까?
1.demo 를 새로 만 듭 니 다.입력 상자 와 버튼 만 있 고 UIAlertView 팝 업 을 모 의 하면 demo 가 정상 적 인 것 을 발견 합 니 다.
2.app 의 프로젝트 설정 을 demo 로 복사 하고 입력 상자 의 속성 설정 을 demo 로 복사 합 니 다.demo 는 여전히 정상 입 니 다.
3.demo 코드 를 app 에 복사 하고 app 의 rootView Controller 를 demo 의 VC 로 할당 하 는 것 이 정상 입 니 다.
앱 의 일부 코드 로 인 한 키보드 가 꺼 지지 않 는 것 이 확실 합 니 다.
2 분 주석 방식 을 통 해 신속하게(4,5 회 정도)문 제 를 찾 는 것 은 app 의 특정한 Service 류 로 인 한 것 입 니 다.
Service 클래스 의 속성 을 자세히 배열 해 보 니 UIWindow 를 계승 하고 level 이 UIWindow Level Status Bar 보다 높 은 속성 이 있 습 니 다.
이로부터 배 운 것 과 애플 UIKit 의 문서 에 따라 우 리 는 문 제 를 한 번 거 슬러 올 라 갈 수 있다.
5.문제 의 회고

애플 홈 페이지 의 응답 체인 과 UIWindow 의 설명 에 따 르 면 become First Responsder()에 대한 설명 은 Asks UIKit to make this object the first responder in its window 입 니 다.
UIAlertView 의 iOS 11 시스템 행동 에 대해 다음 과 같이 추측 합 니 다.
1.UIAlertView 가 팝 업 될 때 시스템 의 keyWindow 를 선점 하기 때문에 키보드 가 UIAlertView 에 나타 날 때 회수 합 니 다(keyWindow 가 바 뀌 었 기 때 문 입 니 다).
2.UIAlertView 가 사라 질 때 모든 Window 를 옮 겨 다 니 며 z 축 이 키 Window 로 가장 높 은 것 을 찾 습 니 다.따라서 키 보드 는 UIAlertView 가 사라 진 후에 팝 업 됩 니 다(keyWindow 가 원래 의 것 으로 변 합 니 다).
코드 디 버 깅 app 을 써 서 위의 추측 을 확인 하 였 습 니 다.
iOS 11 에 서 는 UIAlertView 가 팝 업 될 때 UIWindowLevel 이 UIWindowLevel Normal 보다 큰 UIWindow 가 존재 하면 이 키보드 가 팝 업 할 수 없 는 BUG 를 터치 합 니 다.
6.문제 복구
1.app 에 상주 하 는 UIWindow 가 없 음 을 보증 합 니 다.
2.키보드 가 꺼 지지 않 을 때 maskView 가 제거 할 수 없 는 BUG;
3.UIAlertView 는 다음 버 전에 서 교체 합 니 다.
총결산
이번 문 제 는 발생,재현,포 지 셔 닝,평가 에서 복구 까지 의 시간 과 이 글 을 쓰 는 시간 차이 가 많 지 않다.
BUG 의 해결 절 차 는 각각 다 르 기 때문에 이 를 통 해 BUG 의 해결 에 목적 성과 우선 순 위 를 가 져 야 한다 고 자신 에 게 일 깨 워 준다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기