The recommended way of handling CoreData+CloudKit errors

What is the recommended way of intercepting and processing errors?

As far as I know, there are 4 main areas:

  • iCloud account status - this can be checked and intercepted via notifications
  • exceptions from fetch/execute/save - it can be a simple do..catch, but what exceptions can we expect here, what should be handled, and how?
  • there could be some asynchronous issues with synchronization. How should we intercept them and how should they be handled?
  • issues with iCloud storage - quota exceeded, etc. How to intercept & handle those?

I'm trying to achieve production-ready implementation, but there are many pitfalls and hidden issues that are not well documented. Could you provide some advice on how to handle properly all these situations?