I've noticed the following error popping up in the console when running my app on iOS 9 when using a storyboard. I'm using xCode7. Is this something I need to be concerned about?
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
handler = remote;
info = <BSSettings: 0x176a5d90> {
(1) = 5;
};
}
There is nothing wrong with your code. This is a logging message internal to Apple, and you should file a radar about it.
There are two hints that show that this is probably Apple's code:
The underscore leading the method name
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
is a convention indicating that the method is private/internal to the class that it's declared in. (See this comment.)It's reasonable to guess that the two letter prefix in
FBSSceneSnapshotAction
is shorthand for FrontBoard, which according to Rene Ritchie in "iOS 9 wish-list: Guest Mode" is part of the whole family of software related to launching apps:I have no idea what theBS
prefix inBSSettings
is for, butBS
is shorthand forBackBoard Settings
, and an analysis of this log message would indicate that it's not anything you did, and you should file a radar with steps to reproduce the logging message.If you want to try and grab a stack trace, you can implement the category linked to here. Some would argue that overriding private API is a bad idea, but in this case a temporary injection to grab a stack trace can't be too harmful.
EDIT:
But, we still want to know what this action is. So I put a breakpoint on
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
and started printing out register values and found a class calledFBSceneImpl
which had a whole bunch of information about my application:We are able to find out which private method is called next (stored in the
program counter,instruction pointer, register 15.)I tried finding the un-handled
FBSceneSnapshotAction
referenced in the log, but no dice. Then, I subclassed UIApplication, and overrode_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Now I was able to get at the action directly, but still, we don't know what it is.Then, I looked at the FBSceneSnapshotAction again. Turns out it has a superclass called
BSAction
.Then I wrote a tool similar to RuntimeBrowser and looked up all of the subclasses of BSAction. It turns out that there's quite a list of them:
The two method names we have (one from the log and one from the program counter on the devices) indicate that these actions are used under the hood for passing actions around the system.
Some actions are probably sent up to the app delegate's callbacks, while others are handled internally.
What's happening here is that there is an action that wasn't handled correctly and the system is noting it. We weren't supposed to see it, apparently.
AFAIK, the info above is related to iOS during snapshot the screen (i suppose for double click home multitask related behaviour).I deeply investigated my application and seems that it does not get any side behaviours. You can safely ignore it, for now.
You can use the following gist simple category to test yourself against the calls to the above function:
I have figured it out, it will happen when you have IBAction method declared in .h or .m file but you have not bind it to any control.
.m example:
but not assigned this method to any control in storyboard.
haven't find out why it happens in my app, but at least you can catch the exception, if you want to keep this from popping up in your log pane. It's not a solution, but it might give you more insight why it is happing by inspecting any of the arguments that are passed in the catch.
swift 2 version: