I shared some thoughts on this a month ago in another answer.
In summary:
Saving to Core Data itself is reliable from an extension
The extension likely is killed before the sync to CloudKit is scheduled/complete.
This is why you see the behavior of needing to launch your app for syncing to occur.
There is no workaround at this point, as the syncing is done in their internal API, but I'm hoping my conversation with the Apple engineer was enough for them to consider improvements this year.
Topic:
App & System Services
SubTopic:
iCloud & Data
Tags: