iOS9 스토리 보드 처리되지 않은 작업 (handleNonLaunchSpecificActions)이란 무엇입니까?


84

스토리 보드를 사용할 때 iOS 9에서 내 앱을 실행할 때 콘솔에 다음 오류가 표시되는 것을 확인했습니다. xCode7을 사용하고 있습니다. 이것이 제가 걱정할 필요가있는 것입니까?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

Apple은 iOS 9가 안정성에 관한 것이라고 말 했으므로 걱정하지 않으셔도됩니다 ;-) PS 저도 같은 문제가 있고 다른 개발자들도 역시 stackoverflow.com/questions/32344082/…
Roma

11
스토리 보드와 관련이 있는지 확실하지 않은 경우 스토리 보드가 아닌 앱에서도 볼 수 있습니다.
koen 2015 년

빌드에 다른 경고가 있습니까? 사소한 경고일까요?
Joe Susnick

스토리 보드를 사용하지 않고 있으며이 경고도 표시됩니다. CMD + L로 시뮬레이터를 잠근 다음 "슬라이드하여 잠금 해제"하여 앱으로 돌아 오면 팝업됩니다.
SDW

장치 로그를 보면 장치의 화면을 자동으로 끄는 것과 관련이있을 수 있습니다. 이 줄 SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.은 인용 된 오류 메시지 바로 전에 기록됩니다.
Christian

답변:


32

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

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

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

  2. FBSSceneSnapshotActionRene Ritchie에 따르면 " iOS 9 위시리스트 : 게스트 모드"의 Rene Ritchie는 앱 실행과 관련된 전체 소프트웨어 제품군의 일부인 FrontBoard 의 두 글자 접두사 가 속기 라고 추측하는 것이 합리적 입니다.

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

BS접두사가 무엇인지 BSSettings모르겠지만

BS는의 약어이며이 BackBoard Settings로그 메시지를 분석하면 사용자가 수행 한 작업이 아님을 나타내므로 로깅 메시지를 재현하는 단계와 함께 레이더를 제출해야합니다.

스택 추적을 시도하고 싶다면 여기에 링크 된 카테고리를 구현할 수 있습니다 . 일부는 비공개 API를 재정의하는 것이 좋지 않다고 주장하지만이 경우 스택 추적을 가져 오기위한 임시 주입은 너무 해로울 수 없습니다.

편집하다:

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

장면

다음에 어떤 private 메서드가 호출되는지 알 수 있습니다 ( 프로그램 카운터, 명령 포인터, 레지스터 15에 저장 됨).

프로그램 카운터

나는 FBSceneSnapshotAction로그에서 언급 된 처리되지 않은 것을 찾으려고 했지만 주사위는 없었다. 그런 다음 UIApplication을 서브 클래 싱하고 _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. 이제 나는 직접 행동을 취할 수 있었지만 여전히 그것이 무엇인지 모릅니다.

그런 다음 FBSceneSnapshotAction을 다시 살펴 보았습니다. 라는 수퍼 클래스가 BSAction있습니다.

그런 다음 RuntimeBrowser 와 유사한 도구작성 하고 BSAction의 모든 하위 클래스를 검색했습니다. 꽤 많은 목록이 있음이 밝혀졌습니다.

액션 목록

우리가 가지고있는 두 가지 메서드 이름 (하나는 로그에서, 하나는 장치의 프로그램 카운터에서)은 이러한 작업이 시스템 전체에 작업을 전달하기 위해 내부적으로 사용된다는 것을 나타냅니다.

일부 작업은 앱 델리게이트의 콜백으로 전송되는 반면 다른 작업은 내부적으로 처리됩니다.

여기서 일어나는 일은 올바르게 처리되지 않은 작업이 있고 시스템이이를 인식하고 있다는 것입니다. 분명히 우리는 그것을 볼 수 없었습니다.


좋은 조사이지만 여기에 흥미로운 것이 있습니다. 개인 Apple API를 사용할 때 정확한 OP 오류가 발생합니다. 개인 API를 사용하고 있기 때문에 아마도 Apple 엔지니어를 위해 콘솔 로그가 표시됩니다.
OhadM

1
@Moshe Apple을 대신하여 조사한 대가로 Apple이 지불 한 금액은 얼마입니까? 그러나 그들은 그것에 관심이 없을 수도 있습니다. : P
codelearner

"레이더 제출"이란 무엇을 의미합니까?
Paul Masri-Stone

Apple의 버그보고 도구를 사용하여 버그 보고서를 제출하는 것을 의미합니다.
Moshe

12

AFAIK, 위의 정보는 화면 스냅 샷 중 iOS와 관련이 있습니다 (더블 클릭 홈 멀티 태스킹 관련 동작을 가정 함). 내 애플리케이션을 깊이 조사한 결과 부수적 동작이 발생하지 않는 것 같습니다. 지금은 무시해도됩니다.

다음 요점 간단한 범주 를 사용 하여 위 함수에 대한 호출에 대해 자신을 테스트 할 수 있습니다 .


1

나는 그것을 알아 냈다. .h 또는 .m 파일에 IBAction 메서드를 선언했지만 컨트롤에 바인딩하지 않았을 때 발생합니다.

.m 예 :

- (IBAction)click:(id)sender{
}

하지만이 메서드는 스토리 보드의 컨트롤에 할당되지 않았습니다.


이것은 내 앱의 경우가 아닙니다. 바인딩되지 않은 IBAction이 없으며이 메시지도 표시됩니다. 내 앱은 Swift 앱입니다.
henrikstroem

1

내 앱에서 왜 발생하는지 알지 못했지만 로그 창에 표시되지 않도록하려면 최소한 예외를 포착 할 수 있습니다. 해결책은 아니지만 캐치에서 전달되는 인수를 검사하여 왜 이것이 실패하는지 더 많은 통찰력을 줄 수 있습니다.

신속한 2 버전 :

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.