Understanding iOS Crash [SIGABRT ABORT]

user3185748 picture user3185748 · Jan 18, 2015 · Viewed 17.4k times · Source

I just received my first crash report from Crashlytics and am attempting to correct the issue. Unfortunately it is only with a line of code that runs on older devices so I can't test it on my iPhone 6.

The crash report from Crashlytics highlights two threads, the first reads:

Fatal Exception: NSInvalidArgumentException
-[CABasicAnimation altitude]: unrecognized selector sent to instance 0x17734440

While the second reads:

Crashed: Map Update :: NSOperation 0x1a839470
SIGABRT ABORT at 0x316a3dfc

The indicated line of code for both threads is:

let relativeAlt = mylocation.altitude - appDelegate.elevation

Where:

let mylocation = self.mapView.myLocation
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

I'm trying to understand what I'm reading in the crash report. The way I see it the program doesn't understand the altitude reference made for some reason? This doesn't make sense to me since this crash seems to occur after that app has been running for several minutes without error, the highlighted line of code is run possibly hundreds of times before the app crashed. What is really happening here?

Additional Information:

Since writing, I have received additional crashes that I believe stem from the same issue:

Crashed: Map Update :: NSOperation 0x19fb2d50
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x11d077ca

Crashed: Map Update :: NSOperation 0x145ced50
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x81450a64

The first highlighted the following line in my code (I believe since I had worked on the app since this beta release and the line numbers have changed slightly):

self.lastLocation = (self.mapView.myLocation as CLLocation).coordinate

While the second crash just gave me:

libobjc.A.dylib 
objc_msgSend + 5

The first of the new crashes (That provided a line of code) provided this report:

Thread : Crashed: Map Update :: NSOperation 0x19fb2d50
0  libobjc.A.dylib                0x3105c708 objc_release + 7
1  FlightTracker                  0x000ba830 FlightTracker.MapViewController.    (locationManager (FlightTracker.MapViewController) -> (Swift.ImplicitlyUnwrappedOptional<ObjectiveC.CLLocationManager>, didUpdateLocations : Swift.ImplicitlyUnwrappedOptional<Swift.Array<Swift.AnyObject>>) -> ()).(closure #1) (MapViewController.swift:168)
2  Foundation                     0x244ce0fd __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 8
3  Foundation                     0x24438fc5 -[NSBlockOperation main] + 148
4  Foundation                     0x2442b845 -[__NSOperationInternal _start:] + 768
5  Foundation                     0x244d0a57 __NSOQSchedule_f + 186
6  libdispatch.dylib              0x315ad5d9 _dispatch_queue_drain$VARIANT$mp + 948
7  libdispatch.dylib              0x315ad0a9 _dispatch_queue_invoke$VARIANT$mp + 84
8  libdispatch.dylib              0x315af0d3 _dispatch_root_queue_drain + 330
9  libdispatch.dylib              0x315b01fb _dispatch_worker_thread3 + 106
10 libsystem_pthread.dylib        0x31720e25 _pthread_wqthread + 668

Answer

Olie picture Olie · May 11, 2015

Probably not your problem, but I just had a SIGABRT that was driving me nuts (that's how I ended up looking at this question) and I'll post my solution in case it helps some future S.O. spelunker.

In my (iPad, not that it matters) app, you can push a button that results in the creation of a not-full-screen UIViewController which contains a UITableView, and this viewController is presented via UIPopoverController.

In my case I had a screw-up in my loading of the tableView items which, at the time of creating the tableView cell I ended up trying to add a null value into a dictionary. (It's a long story, having to do with an infrastructure class that expects the data to be in a certain format.)

Anyway, attempting to access newViewController.view caused the SIGABRT on that line, with no clue that the problem was related to filling the tableView cell. Nothing tableView-related was evident in the stack trace, so it took me quite a while to narrow things down. I eventually just guessed "maybe it's the tableview" and disconnected the IBOutlet and delegate/dataSource to see if the crash went away.

...And it did. Which lead me down the path of finding the real problem.

Anyway, that's my story. Hope it's helpful to someone.