The following error keeps coming up in my app\'s crashlytics logs
on IOS 8:
libobjc.A.dylib objc_msgSend + 5 didHideZoomSlider:
Crashed: com.apple.m
I didn't have much luck with adding the delay. Crashes still occurred in my case (iOS 8 and 9.0.1).
There's an OpenRadar that suggests removing the delegate of the CAMZoomSlider likely responsible for the crash, and this worked well for me.
User beware, though, as this manipulates a private class and may result in an App Store submission rejection...
To fix issue with delegate, subclass UIImagePickerController and add the following:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self clearZoomSliderDelegateForClass:[self sliderClass] subviews:self.view.subviews];
}
- (void)clearZoomSliderDelegateForClass:(Class)sliderClass subviews:(NSArray *)subviews {
for (UIView *subview in subviews) {
if ([subview isKindOfClass:sliderClass] && [subview respondsToSelector:@selector(setDelegate:)]) {
[subview performSelector:@selector(setDelegate:) withObject:nil];
return;
}
else {
[self clearZoomSliderDelegateForClass:sliderClass subviews:subview.subviews];
}
}
}
- (Class)sliderClass {
for (NSString* prefix in @[@"CAM", @"CMK"]) {
Class zoomClass = NSClassFromString([prefix stringByAppendingString:@"ZoomSlider"]);
if (zoomClass != Nil) {
return zoomClass;
}
}
return Nil;
}
In iOS 9 SDK private CameraKit framework prefix changed from CAM to CMK (just check slider with visual debugger), so previous workaround had to be updated.
This crash may also look like this in logs:
0 libobjc.A.dylib 0x3591fae6 objc_msgSend + 6
1 Foundation 0x24d28e59 __NSFireDelayedPerform + 466
...