Skip to content

Commit 7495265

Browse files
authored
Update the SDK to fix a sync performance regression. (#4324)
1 parent de4f05f commit 7495265

File tree

8 files changed

+69
-68
lines changed

8 files changed

+69
-68
lines changed

ElementX.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8771,7 +8771,7 @@
87718771
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
87728772
requirement = {
87738773
kind = exactVersion;
8774-
version = "25.07.14-2";
8774+
version = 25.07.15;
87758775
};
87768776
};
87778777
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {

ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5108,76 +5108,76 @@ open class ClientSDKMock: MatrixRustSDK.Client, @unchecked Sendable {
51085108

51095109
//MARK: - urlForOidc
51105110

5111-
open var urlForOidcOidcConfigurationPromptLoginHintThrowableError: Error?
5112-
var urlForOidcOidcConfigurationPromptLoginHintUnderlyingCallsCount = 0
5113-
open var urlForOidcOidcConfigurationPromptLoginHintCallsCount: Int {
5111+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdThrowableError: Error?
5112+
var urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingCallsCount = 0
5113+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount: Int {
51145114
get {
51155115
if Thread.isMainThread {
5116-
return urlForOidcOidcConfigurationPromptLoginHintUnderlyingCallsCount
5116+
return urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingCallsCount
51175117
} else {
51185118
var returnValue: Int? = nil
51195119
DispatchQueue.main.sync {
5120-
returnValue = urlForOidcOidcConfigurationPromptLoginHintUnderlyingCallsCount
5120+
returnValue = urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingCallsCount
51215121
}
51225122

51235123
return returnValue!
51245124
}
51255125
}
51265126
set {
51275127
if Thread.isMainThread {
5128-
urlForOidcOidcConfigurationPromptLoginHintUnderlyingCallsCount = newValue
5128+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingCallsCount = newValue
51295129
} else {
51305130
DispatchQueue.main.sync {
5131-
urlForOidcOidcConfigurationPromptLoginHintUnderlyingCallsCount = newValue
5131+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingCallsCount = newValue
51325132
}
51335133
}
51345134
}
51355135
}
5136-
open var urlForOidcOidcConfigurationPromptLoginHintCalled: Bool {
5137-
return urlForOidcOidcConfigurationPromptLoginHintCallsCount > 0
5136+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdCalled: Bool {
5137+
return urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount > 0
51385138
}
5139-
open var urlForOidcOidcConfigurationPromptLoginHintReceivedArguments: (oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?)?
5140-
open var urlForOidcOidcConfigurationPromptLoginHintReceivedInvocations: [(oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?)] = []
5139+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments: (oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?, deviceId: String?)?
5140+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedInvocations: [(oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?, deviceId: String?)] = []
51415141

5142-
var urlForOidcOidcConfigurationPromptLoginHintUnderlyingReturnValue: OAuthAuthorizationData!
5143-
open var urlForOidcOidcConfigurationPromptLoginHintReturnValue: OAuthAuthorizationData! {
5142+
var urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingReturnValue: OAuthAuthorizationData!
5143+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdReturnValue: OAuthAuthorizationData! {
51445144
get {
51455145
if Thread.isMainThread {
5146-
return urlForOidcOidcConfigurationPromptLoginHintUnderlyingReturnValue
5146+
return urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingReturnValue
51475147
} else {
51485148
var returnValue: OAuthAuthorizationData? = nil
51495149
DispatchQueue.main.sync {
5150-
returnValue = urlForOidcOidcConfigurationPromptLoginHintUnderlyingReturnValue
5150+
returnValue = urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingReturnValue
51515151
}
51525152

51535153
return returnValue!
51545154
}
51555155
}
51565156
set {
51575157
if Thread.isMainThread {
5158-
urlForOidcOidcConfigurationPromptLoginHintUnderlyingReturnValue = newValue
5158+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingReturnValue = newValue
51595159
} else {
51605160
DispatchQueue.main.sync {
5161-
urlForOidcOidcConfigurationPromptLoginHintUnderlyingReturnValue = newValue
5161+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdUnderlyingReturnValue = newValue
51625162
}
51635163
}
51645164
}
51655165
}
5166-
open var urlForOidcOidcConfigurationPromptLoginHintClosure: ((OidcConfiguration, OidcPrompt?, String?) async throws -> OAuthAuthorizationData)?
5166+
open var urlForOidcOidcConfigurationPromptLoginHintDeviceIdClosure: ((OidcConfiguration, OidcPrompt?, String?, String?) async throws -> OAuthAuthorizationData)?
51675167

5168-
open override func urlForOidc(oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?) async throws -> OAuthAuthorizationData {
5169-
if let error = urlForOidcOidcConfigurationPromptLoginHintThrowableError {
5168+
open override func urlForOidc(oidcConfiguration: OidcConfiguration, prompt: OidcPrompt?, loginHint: String?, deviceId: String?) async throws -> OAuthAuthorizationData {
5169+
if let error = urlForOidcOidcConfigurationPromptLoginHintDeviceIdThrowableError {
51705170
throw error
51715171
}
5172-
urlForOidcOidcConfigurationPromptLoginHintCallsCount += 1
5173-
urlForOidcOidcConfigurationPromptLoginHintReceivedArguments = (oidcConfiguration: oidcConfiguration, prompt: prompt, loginHint: loginHint)
5172+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount += 1
5173+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments = (oidcConfiguration: oidcConfiguration, prompt: prompt, loginHint: loginHint, deviceId: deviceId)
51745174
DispatchQueue.main.async {
5175-
self.urlForOidcOidcConfigurationPromptLoginHintReceivedInvocations.append((oidcConfiguration: oidcConfiguration, prompt: prompt, loginHint: loginHint))
5175+
self.urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedInvocations.append((oidcConfiguration: oidcConfiguration, prompt: prompt, loginHint: loginHint, deviceId: deviceId))
51765176
}
5177-
if let urlForOidcOidcConfigurationPromptLoginHintClosure = urlForOidcOidcConfigurationPromptLoginHintClosure {
5178-
return try await urlForOidcOidcConfigurationPromptLoginHintClosure(oidcConfiguration, prompt, loginHint)
5177+
if let urlForOidcOidcConfigurationPromptLoginHintDeviceIdClosure = urlForOidcOidcConfigurationPromptLoginHintDeviceIdClosure {
5178+
return try await urlForOidcOidcConfigurationPromptLoginHintDeviceIdClosure(oidcConfiguration, prompt, loginHint, deviceId)
51795179
} else {
5180-
return urlForOidcOidcConfigurationPromptLoginHintReturnValue
5180+
return urlForOidcOidcConfigurationPromptLoginHintDeviceIdReturnValue
51815181
}
51825182
}
51835183

ElementX/Sources/Mocks/SDK/ClientSDKMock.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ extension ClientSDKMock {
4141
slidingSyncVersionReturnValue = configuration.slidingSyncVersion
4242
userIdServerNameThrowableError = MockError.generic
4343
serverReturnValue = "https://\(configuration.serverAddress)"
44-
urlForOidcOidcConfigurationPromptLoginHintReturnValue = OAuthAuthorizationDataSDKMock(configuration: configuration)
44+
urlForOidcOidcConfigurationPromptLoginHintDeviceIdReturnValue = OAuthAuthorizationDataSDKMock(configuration: configuration)
4545
loginUsernamePasswordInitialDeviceNameDeviceIdClosure = { username, password, _, _ in
4646
guard username == configuration.validCredentials.username,
4747
password == configuration.validCredentials.password else {

ElementX/Sources/Services/Authentication/AuthenticationService.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ class AuthenticationService: AuthenticationServiceProtocol {
8989
// let prompt: OidcPrompt = flow == .register ? .create : .consent
9090
let oidcData = try await client.urlForOidc(oidcConfiguration: appSettings.oidcConfiguration.rustValue,
9191
prompt: .consent,
92-
loginHint: loginHint)
92+
loginHint: loginHint,
93+
deviceId: nil)
9394
return .success(OIDCAuthorizationDataProxy(underlyingData: oidcData))
9495
} catch {
9596
MXLog.error("Failed to get URL for OIDC login: \(error)")

UnitTests/Sources/AuthenticationStartScreenViewModelTests.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
3434
// Given a view model that has no provisioning parameters.
3535
setupViewModel()
3636
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
37-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
37+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
3838

3939
// When tapping any of the buttons on the screen
4040
let actions: [(AuthenticationStartScreenViewAction, AuthenticationStartScreenViewModelAction)] = [
@@ -51,7 +51,7 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
5151

5252
// Then the authentication service should not be used yet.
5353
XCTAssertEqual(clientBuilderFactory.makeBuilderSessionDirectoriesPassphraseClientSessionDelegateAppSettingsAppHooksCallsCount, 0)
54-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
54+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
5555
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
5656
}
5757
}
@@ -60,7 +60,7 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
6060
// Given a view model that has been provisioned with a server that supports OIDC.
6161
setupViewModel(provisioningParameters: .init(accountProvider: "company.com", loginHint: "user@company.com"))
6262
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
63-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
63+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
6464

6565
// When tapping the login button the authentication service should be used and the screen
6666
// should request to continue the flow without any server selection needed.
@@ -69,17 +69,17 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
6969
try await deferred.fulfill()
7070

7171
XCTAssertEqual(clientBuilderFactory.makeBuilderSessionDirectoriesPassphraseClientSessionDelegateAppSettingsAppHooksCallsCount, 1)
72-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 1)
73-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintReceivedArguments?.prompt, .consent)
74-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintReceivedArguments?.loginHint, "user@company.com")
72+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 1)
73+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments?.prompt, .consent)
74+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments?.loginHint, "user@company.com")
7575
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .oidc(supportsCreatePrompt: false))
7676
}
7777

7878
func testProvisionedPasswordState() async throws {
7979
// Given a view model that has been provisioned with a server that does not support OIDC.
8080
setupViewModel(provisioningParameters: .init(accountProvider: "company.com", loginHint: "user@company.com"), supportsOIDC: false)
8181
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
82-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
82+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
8383

8484
// When tapping the login button the authentication service should be used and the screen
8585
// should request to continue the flow without any server selection needed.
@@ -97,7 +97,7 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
9797
setAllowedAccountProviders(["company.com"])
9898
setupViewModel()
9999
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
100-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
100+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
101101

102102
// When tapping the login button the authentication service should be used and the screen
103103
// should request to continue the flow without any server selection needed.
@@ -106,9 +106,9 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
106106
try await deferred.fulfill()
107107

108108
XCTAssertEqual(clientBuilderFactory.makeBuilderSessionDirectoriesPassphraseClientSessionDelegateAppSettingsAppHooksCallsCount, 1)
109-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 1)
110-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintReceivedArguments?.prompt, .consent)
111-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintReceivedArguments?.loginHint, nil)
109+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 1)
110+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments?.prompt, .consent)
111+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdReceivedArguments?.loginHint, nil)
112112
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .oidc(supportsCreatePrompt: false))
113113
}
114114

@@ -117,7 +117,7 @@ class AuthenticationStartScreenViewModelTests: XCTestCase {
117117
setAllowedAccountProviders(["company.com"])
118118
setupViewModel(supportsOIDC: false)
119119
XCTAssertEqual(authenticationService.homeserver.value.loginMode, .unknown)
120-
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintCallsCount, 0)
120+
XCTAssertEqual(client.urlForOidcOidcConfigurationPromptLoginHintDeviceIdCallsCount, 0)
121121

122122
// When tapping the login button the authentication service should be used and the screen
123123
// should request to continue the flow without any server selection needed.

0 commit comments

Comments
 (0)