[ios] 오류 : iOS9의 _handleNonLaunchSpecificActions

iOS 9에서 다음 오류가 발생합니다.

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action ->
      <FBSSceneSnapshotAction: 0x150b2aef0>
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650>
            {
                (1) = 5;
            };
        }

다른 사람 이이 오류를 겪었습니까? 뭐가 잘못 되었 니?



답변

코드에는 아무런 문제가 없습니다. 이것은 Apple 내부의 로깅 메시지이므로 이에 대한 레이더를 제출해야합니다.

이것이 아마도 Apple의 코드 임을 보여주는 두 가지 힌트가 있습니다.

  1. 메소드 이름의 밑줄 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion은 메소드가 선언 된 클래스에 대해 개인 / 내부임을 나타내는 규칙입니다 ( 이 주석 참조 ).

  2. 두 글자 접두사가 FBSSceneSnapshotActioniOS 9 희망 목록 : 게스트 모드”의 Rene Ritchie에 따르면 앱 시작과 관련된 전체 소프트웨어 제품군의 일부인 Rene Ritchie에 따르면 가 FrontBoard의 축약 형 입니다.

iOS 8을 통해 Apple은 시스템 관리자 SpringBoard를 더 작고 집중적 인 여러 구성 요소로 리팩토링했습니다. 백그라운드 작업을 처리하기 위해 이미 분리 된 BackBoard 외에도 포 그라운드 작업을 위해 Frontboard를 추가했습니다. 또한 안전한 암호화 된 조건에서 잠금 화면을 처리하기 위해 PreBoard를 추가했습니다. […]

BS접두사가 무엇인지 전혀 모른다BSSettings 못하지만이 로그 메시지를 분석하면 그것이 수행 한 것이 아니라는 것을 나타내므로 로깅 메시지를 재현하는 단계가있는 레이더를 제출해야합니다.

스택 추적을 시도하고 싶다면 여기에 링크 된 범주를 있습니다 . 일부는 개인 API를 재정의하는 것이 좋지 않다고 주장하지만이 경우 스택 추적을 잡기위한 임시 주입은 너무 해가 될 수 없습니다.

편집하다:

그러나 우리는 여전히이 행동이 무엇인지 알고 싶습니다. 그래서 중단 점을 설정 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]하고 레지스터 값을 인쇄하기 시작했고 FBSceneImpl내 응용 프로그램에 대한 많은 정보를 가진 클래스를 찾았습니다 .

장면

다음에 호출 할 개인 메소드를 찾을 수 있습니다 (프로그램 카운터에 저장, 등록 15).

프로그램 카운터

처리되지 않은 것을 찾으려고 노력했습니다. FBSceneSnapshotAction로그에서 참조를 했지만 주사위는 없습니다. 그런 다음 UIApplication을 서브 클래스 화하고 overrode했습니다 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. 이제 직접 조치를 취할 수 있었지만 여전히 그 조치가 무엇인지 모릅니다.

그런 다음 FBSceneSnapshotAction을 다시 살펴 보았습니다. 슈퍼 클래스가 있다고 밝혀졌습니다.BSAction .

그런 다음 RuntimeBrowser 와 유사한 도구작성 하고 BSAction의 모든 하위 클래스를 찾아 보았습니다. 그것들의 목록이 상당히 있음이 밝혀졌습니다.

액션리스트

우리가 가지고있는 두 가지 메소드 이름 (하나는 로그에서, 다른 하나는 장치의 프로그램 카운터에서)은 이러한 조치가 시스템에서 조치를 전달하기 위해 후드 아래에서 사용됨을 나타냅니다.

일부 작업은 아마도 앱 대리자의 콜백으로 전송되는 반면 다른 작업은 내부적으로 처리됩니다.

여기서 일어나는 일은 올바르게 처리되지 않은 조치가 있고 시스템이이를 인식하고 있다는 것입니다. 우리는 그것을 보지 말아야했습니다.


답변