For a reference, I have just fixed a very similar crash. This was a Swift-only application, therefore no manual retain/release calls.
It turns out, one of my model classes had a deinit with some cleanup. That cleanup operation used a locking mechanism with a synchronous DispatchQueue. Of course, the block passed to the queue was referencing self strongly, thus calling retain from inside a deinit. When the clean up operation was completed, the self reference was released, thus calling a second deinit.
When you have an error like this, check your deinit first.