This change moves widget content fetches into the widgets themselves instead of relying on the app getting runtime to perform updates (there's no way to guarantee runtime on iOS and background runtime isn't possible without an XPC service on macOS). This is, in many ways, an unfortunate outcome as it means we're potentially hitting the GitHub API more than we need to, but iOS leaves us little option without implementing our own rate-limiting service.
In order to expose expose the access token to the widget, this introduces keychain sharing between the app and widget and includes a drive-by fix to ensure the access token is always available after first device unlock to allow updates to occur in the background.
This change moves widget content fetches into the widgets themselves instead of relying on the app getting runtime to perform updates (there's no way to guarantee runtime on iOS and background runtime isn't possible without an XPC service on macOS). This is, in many ways, an unfortunate outcome as it means we're potentially hitting the GitHub API more than we need to, but iOS leaves us little option without implementing our own rate-limiting service.
In order to expose expose the access token to the widget, this introduces keychain sharing between the app and widget and includes a drive-by fix to ensure the access token is always available after first device unlock to allow updates to occur in the background.