• Fixed an issue where the notification extension could end up in an invalid state if you delete and create a new account in rapid succession
• Fixed an issue where notification processing errors weren't getting handled correctly resulting in the notification extension timing out
• Stopped the notification extension from trying to download profile images
• Added commit hash to version info
• Tweaked the notification extension logic flow to be more straight forward
• Fixed a bad memory crash which could occur when returning from the background
• Fixed an issue where config messages were incorrectly getting double wrapped in protobuf wrappers
• Removed the 'runOnceTransient' behaviour (no longer have jobs that run before the user exists)
• Removed the session id from the message snippet in the conversation list
• Fixed an issue where the SyncPushTokensJob might not run because the paths hadn't been built yet
Fixed an issue where sync messages were failing to send if the message wasn't disappearing
Fixed an issue where the 'Failed to Sync' statuses wouldn't be shown
Updated the MessageSenderError, SnodeAPIError and OnionRequestAPIError to actually output our error strings when included in strings
Updated the tryFlatMapWithRandomSnode function to include context of the last error thrown
Cleaned up the 'isSyncMessage' logic
Removed the YapDatabase CocoaPod
Removed logic to migrate from YapDatabase to GRDB
Removed the logic to check for legacy config messages during onboarding
Added a database error for when a migration is no longer supported
Cleaned up the Dependencies so that tests can run synchronously without having to custom set queues as much
Sorted out the crypto and network dependencies to avoid needing weird dependency inheritance
Fixed the flaky tests so they are no longer flaky
Fixed some unexpected JobRunner behaviours
Updated the CI config to use a local build directory for derivedData (now works with build tweaks)
Fixed a bug where showing hidden conversations would appear at the bottom of the list
Fixed a bug where you would be kicked from a one-to-one conversation when opening it if you had hidden it
Fixed a bug where joining a community via URL wasn't automatically opening the community
Fixed a bug where the community poller could trigger again before the previous poll completed
Fixed an edge-case where community messages could be missed if the app crashed at the right time when processing a poll response
Added some more logs to libSession build script and tweaked the stdout location
Added shadow threads to the GarbageCollectionJob
Changed the seed node retries to 2 because it's likely we will swap to another seed node pretty quickly which could resolve the issue
Fixed a bug where the user could get kicked from a draft conversation if they get a contacts update before sending a message
Fixed a bug where message status or media message download statuses would trigger the conversation to jump to the bottom
Added the 'outdated client' warning banner
Added a unit test to validate the 'group(by:)' method maintains ordering
Added an error when trying to message a non-standard session id directly
Removed the "hide" logic for groups (don't want it)
Removed some unneeded thread fetching
Updated the logic to use the 'lastHash' when fetching config messages
Updated the logic to use the libSession value restrictions instead of hard-coded values
Fixed an issue where members weren't getting removed from legacy groups
Updated the logic to always fetch all config messages (and not de-dupe them)
Updated the onboarding to fallback to fetch the legacy config if the there is no updated user config
Added sorting to config message processing to reduce the turn-around time for certain edge-cases to resolve
Removed some redundant code
Fixed a database re-entrancy crash
Fixed a crash when merging config messages
Fixed an issue which could occur by registering too many 'afterTransaction' closures
Updated the SharedConfigMessage type to have a TTL of 30 days
Updated the SnodeAPI to have a 'poll' method to be more consistent with the OpenGroupAPI (it also does multiple things now so is cleaner)
Added logic to limit the number of config messages to be retrieved per poll
Added the 'ValidatableResponse' protocol to standardise SnodeAPI response validation
Added the libSession version to the logs
Fixed an issue where the user profile pic wouldn't get synced correctly due to memory going out of scope
Fixed some threading issues
Refactored the thread variants to follow the updated terminology (will think about refactoring other code areas later)
Cleaned up the Combine error handling
Started fixing broken unit tests
Added logic to indicate when a sync message failed to send (and the ability to retry)
Added the retry/resync button to the long press message menu
Updated sync messages to run via the MessageSendJob
Updated the delivery status to always show on the last outgoing message
Updated the logic to update the delivery status when retrying to send a failed message
Removed the convoluted recursion logic for turning self-send messages into sync messages
Updated the PathVC to indicate the network reachability
Updated messages sent to 'Note to Self' to properly indicate whether they were sent to the swarm
Fixed an issue where 'Note to Self' messages weren't actually getting sent to the swarm
Updated the onboarding to attempt to retrieve the current user profile config and skip display name collection if it already exists
Updated the logic to get the snode pool and build paths immediately on launch even if the user hasn't been created yet (faster onboarding)
Removed the iOS-specific concurrent dual snode '/store' behaviour
Cleaned up the profile updating logic
Fixed an issue where the pollers could end up deadlocking the main thread if too many tried to start concurrently