* use observation in unit and preview tests instead of the async stream
* use a parsing approach that is independent of the sourcery annotation
* Fix observation deferred fulfillments not receiving the initial value
Observation's observe only emits transitions, not the value present at subscription time. Drop the leading initial value from the affected transitionValues sequences and assert it directly with #expect instead.
* improved docs
* Enable Swift 6.2 with default main actor isolation for the app target
Turn on SWIFT_VERSION 6.2, SWIFT_APPROACHABLE_CONCURRENCY and SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor for the ElementX target, matching the NSE and Share Extension (which already use 6.2 without the main actor default).
# Conflicts:
# ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
* Update the code generation templates for Swift 6
Emit nonisolated/@unchecked Sendable mocks and nonisolated string enums, and mark async mock methods @concurrent so they keep suspending like the real implementations (otherwise intermediate states are unobservable in tests). Includes the regenerated mocks and strings.
# Conflicts:
# ElementX/Sources/Mocks/Generated/GeneratedMocks.swift
* Make the data layer and services nonisolated and Sendable
Annotate the value-type models, Rust SDK proxy wrappers, timeline item graph, settings, logging and NSE-shared types as nonisolated, and conform the service protocols to Sendable so their existentials can cross isolation boundaries. These types run off the main actor and no longer inherit the target's default main actor isolation.
* Adopt the new isolation across call sites, mocks and signatures
Update call sites, closure signatures and mock configuration helpers to match the nonisolated/Sendable data layer, including the main actor isolated mock inits and the @Sendable filter on recentlyVisitedRooms.
^ Conflicts:
^ ElementX/Sources/Services/SecureBackup/SecureBackupController.swift
* Remove redundant @MainActor annotations
With the app target defaulting to main actor isolation, the explicit @MainActor on view models, coordinators, views and their protocols is no longer required.
* Fix concurrency hotspots surfaced by the migration
Resolve the room summary main-thread deadlock by moving diff processing onto AsyncStreams, add the SDKListener.onMainActor FIFO bridge for SDK callbacks, hop KVO/timer/UIKit callbacks to the main actor via assumeIsolated, add isolated deinits, and apply the few justified nonisolated(unsafe) escapes for queue-confined Apple APIs.
* Fix the unit tests for Swift 6 concurrency
Hop the waitForConfirmation body onto the caller's actor (Swift Testing runs confirmation closures off-actor), and adjust the affected suites and async signatures.
* offload diffs on concurrent threads instead of main actor
* make room info protocols sendable
* use a task group for fetching data so that everything runs concurrently in the TextRoomTimelineView when getting the preview.
* use the generic onMainActor implementation, which already makes a stream and send the continuation on the main actor.
* small pr comments issues being addressed
* update enterprise
* Update StaticCode to 1.1.0 and specify the required Swift isolation.
* fix ElementCallServiceTests
* update enterprise
* re-generate mocks
* update enterprise
* enterprise new code conformed to swift 6
---------
Co-authored-by: Doug <douglase@element.io>
update generateRecoveryKey to take a passphrase option
Wire up AppHooks with recovery key hook
Update xcodeproj
Review fixups
Review fixups
Make the `SecureBackupRecoveryState.viewMode` extension private
Bump the enterprise submodule
* replace NavigationStack with ElementNavigationStack to allow the content to be rendered without a NavigationStack in a11y tests
* fix a11y tests
* update xcodeproject
* swiftformat fix
* use iOS 26.1 for CI
* use a wrapper to solve the issue for a11y tests
* ElementNavigationStack only uses the trick in DEBUG mode, and added a swiftlint rule to prevent the usage of NavigationStack
* Remove `eraseToStream` now that `any AsyncSequence` is available to us.
* Remove the now unnecessary backport of Mutex.
* Silence a couple more deprecation warnings.
* Move the AuthenticationStartScreen into the Authentication directory.
* Commit the updated Sentry license.
No idea why they dropped the 2024 🤷♂️
* Use StateStoreViewModelV2 in BugReportScreen.
* Use StateStoreViewModelV2 in UserDetailsEditScreen.
* Use StateStoreViewModelV2 in NotificationSettingsScreen.
* Use StateStoreViewModelV2 in NotificationSettingsEditScreen.
* Use StateStoreViewModelV2 in LegalInformationScreen.
* Use StateStoreViewModelV2 in LogViewerScreen.
* Use StateStoreViewModelV2 in AnalyticsSettingsScreen.
* Rename AdvancedSettingsScreen directory.
* Use StateStoreViewModelV2 in EncryptionResetScreen.
* Use StateStoreViewModelV2 in EncryptionResetPasswordScreen.
* Use StateStoreViewModelV2 in SecureBackup…Screens.
* Use StateStoreViewModelV2 in LoginScreen.
Seems this one was ignored waiting on the fulfillment transitionValues implementation.
* Use StateStoreViewModelV2 in DeactivateAccountScreen.
* Move DeactivateAccountScreen into the Settings directory.
* Retrofit `deferFulfillment` onto snapshot tests.
* Convert a bunch of preview tests to the new fulfillment publisher
* Convert more tests
* Remove unneeded delays from the remaining tests
* Remove snapshotting delay option.
* added the address section
* updated code and strings
* syncing name and address
* improved code
* added a way to reset the state
* better documentation
* update strings
* handling the alias
* alias error state
* update strings
* error handling
* improved the error handling
* new preview tests, even if they do not work well
* improved tests
* unit tests
* pr comments and using the correct value
* fix
* pr comments
* to improve safety and control of the FF
* fixed a test
* updated tests
* update SDK
* Manage the secure backup screens with flow coordinators.
* Add UI tests for the EncryptionSettingsFlowCoordinator.
* Realise that the settings flow can't reset anymore and remove the sub-flow 🤦♂️
* Add UI tests for the EncryptionResetFlowCoordinator.
* Update the banner strings for out of sync key storage.
* Update string on SecureBackupScreen.
* Update snapshots
* Update an alert string we weren't using on iOS, and use it at the same place as Android.
* Add EncryptionReset password entry screen
* Expose client proxy identity reset method
* Update the IdentityConfirmationScreen to the latest designs
* Replace the old recovery key reset screen with a new EncryptionReset one
* Fixes#3102 - Add support for resetting the user's whole crypto identity
* Address review comments
* Bump the SDK to v1.0.30
* Show recovery instead of verification if this is the last session and recovery is set up
* Rename `recoveryKeyState` to `recoveryState`
* Remove duplicates on session security state changes.
* Fix missing "Save recovery key" button
* Fix unit tests
* Rename `isLastDevice` to `isOnlyDeviceLeft`
* Address PR comments
* Update compound and fix breaking changes.
* Replace a lot of temporary icon assets with Compound versions.
* Replace temporary composer icon assets with Compound versions.
* Remove old icon asset from EI.
* Use Compound icons where possible for hero images.
* Snapshots
* Show a loading indicator when confirming the recovery key
* Hide the passphrase characters when confirming the recovery key
* Don't show the settings security section until session verification state is retrieved (async)
* Fix preview screenshots
* Fix logout alert title and message
* Disable auto correction and capitalization on the recovery confirmation screen
* Allow scrolling in the key verification screen for when the key needs to be confirmed and the keyboard is up.
* Address PR comments
* Converge on UserSessionFlowCoordinator logout confirmation
* Add logout confirmation screen strings to untranslated.
* Fix chat backup learn more URl fragment.
* Implement logout flows that check recovery and key backup for the last session
* Move logout confirmation screen strings to localazy
* Change encrypted timeline item copy to "Waiting for decryption key"
* Use different encrypted history banner based on key backup states
* Introduce a SettingsFlowCoordinator and implement navigation directly to the secure backup screen from the logout flows.
* Fix **mocked** secure backup controller flows
* Simplify encrypted history banner logic
* Address PR comments