I think it depends on what paradigm you want to approach.
1- My app never crashes.
2- "Let it crash" for fatal exceptions.
If you are fine with your app crashing when the "unknown" happens then go with 2. Number 1 can show a generic error dialog when the "unknown" happens.
No matter which paradigm you approach you should log all the exceptions caught/uncaught to a remote service where you can see the stats of your app.
Now as Anton mentioned,
properly model the errors/exceptions
and propagate them up to clients should be a "must" no matter which paradigm you approach.