diff --git a/ElementX/Sources/Application/Application.swift b/ElementX/Sources/Application/Application.swift index cc6c52ba79..69a576ec99 100644 --- a/ElementX/Sources/Application/Application.swift +++ b/ElementX/Sources/Application/Application.swift @@ -45,7 +45,7 @@ struct Application: App { }) .onOpenURL { if !appCoordinator.handleDeepLink($0) { - openURL($0) + openURLInSystemBrowser($0) } } .introspect(.window, on: .supportedVersions) { window in @@ -57,8 +57,32 @@ struct Application: App { } } } + + // MARK: - Private + /// Hide the status bar so it doesn't interfere with the screenshot tests private var shouldHideStatusBar: Bool { ProcessInfo.isRunningUITests } + + /// https://github.com/vector-im/element-x-ios/issues/1824 + /// Avoid opening universal links in other app variants and infinite loops between them + private func openURLInSystemBrowser(_ originalURL: URL) { + guard var urlComponents = URLComponents(url: originalURL, resolvingAgainstBaseURL: true) else { + openURL(originalURL) + return + } + + var queryItems = urlComponents.queryItems ?? [] + queryItems.append(.init(name: "no_universal_links", value: "true")) + + urlComponents.queryItems = queryItems + + guard let url = urlComponents.url else { + openURL(originalURL) + return + } + + openURL(url) + } } diff --git a/ElementX/SupportingFiles/ElementX.entitlements b/ElementX/SupportingFiles/ElementX.entitlements index 892e31c515..9c14dc28b8 100644 --- a/ElementX/SupportingFiles/ElementX.entitlements +++ b/ElementX/SupportingFiles/ElementX.entitlements @@ -12,6 +12,7 @@ applinks:develop.element.io applinks:mobile.element.io applinks:call.element.io + applinks:call.element.dev webcredentials:*.element.io com.apple.developer.usernotifications.communication diff --git a/changelog.d/1824.bugfix b/changelog.d/1824.bugfix new file mode 100644 index 0000000000..d57c2004d6 --- /dev/null +++ b/changelog.d/1824.bugfix @@ -0,0 +1 @@ +Redirect universal links directly to the browser if they're not supported \ No newline at end of file