View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012106 | Taler | wallet (iOS App) | public | 2026-11-11 02:05 | 2026-11-11 02:05 |
| Reporter | bot-cg [agent] | Assigned To | Resolution deadline | ||
| Implementer | Reviewer | ||||
| Release signed by | Deployed by | ||||
| Verifier | Communicator | CM_7 | |||
| Data protection authority notification required | No | ||||
| CSIRT notification required | No | ||||
| Estimated effort (hours) | Actual effort (hours) | 0 | |||
| Fast-track | No | ||||
| Work package | none | ||||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | new | Resolution | open | ||
| Summary | 0012106: iOS: taler://add-exchange link hangs on "Scanning..." for ever (ExchangeListView clears URLSheet's URL binding) | ||||
| Description | Opening a taler://add-exchange/... link leaves the iOS app on the "Loading… / Scanning..." sheet for ever; the exchange is never offered for adding. What the user sees for taler://add-exchange/tripwire.taler.net:8445/ on a fresh wallet: - iOS: "Loading…", spinner, "Scanning...", Cancel; stays there (before-ios-1.png, still the same after 30 s). - WebExtension: "Add exchange / Add https://tripwire.taler.net:8445/ as a wallet exchange." with Continue (before-web-1.png), then the exchange's detail page (before-web-2.png). - Android rejects the URI as unsupported (0011621). Cause (origin/master 674b7915): TalerWallet1/Views/Sheets/URLSheet.swift:56-57 shows ExchangeListView(url: $passedURL) for .addExchange. ExchangeListView's .task (Views/Settings/Exchange/ExchangeListView.swift:76-84) copies the URL into the add alert and then sets url = nil, which clears URLSheet's own passedURL. URLSheet's body (`if let urlCommand, let passedURL`) then falls back to its LoadingView "Scanning..." branch, whose passUrlOnce() has nothing left to pass (urlToOpen was cleared too), so the sheet never recovers. URL parsing itself is fine (Controller.swift command(): "add-exchange" -> .addExchange). Patch (ios-add-exchange-uri-scanning.patch): URLSheet keeps a separate @State exchangeURL for ExchangeListView to consume, so passedURL stays set. Verified with a GNU_Taler Release simulator build: the same link opens Payment Services with the "Add payment service" alert prefilled with the URI (after-ios-1.png); "Add" adds the exchange (after-ios-2.png, "tripwire.taler.net / Status: Ready"). (0011621 notes that add-exchange was said to be fixed on iOS; on current master it hangs as described.) Assisted by LLM | ||||
| Steps To Reproduce | Open taler://add-exchange/tripwire.taler.net:8445/ (e.g. from Safari or `xcrun simctl openurl`) in the app. | ||||
| Tags | No tags attached. | ||||
| Attached Files | ios-add-exchange-uri-scanning.patch (1,590 bytes)
diff --git a/TalerWallet1/Views/Sheets/URLSheet.swift b/TalerWallet1/Views/Sheets/URLSheet.swift
index 634207ec..91c97cba 100644
--- a/TalerWallet1/Views/Sheets/URLSheet.swift
+++ b/TalerWallet1/Views/Sheets/URLSheet.swift
@@ -25,6 +25,7 @@ struct URLSheet: View {
@State private var summary = EMPTYSTRING
@State private var urlCommand: UrlCommand?
@State private var passedURL: URL?
+ @State private var exchangeURL: URL? // consumed (set to nil) by ExchangeListView
init(_ stack: CallStack, selectedBalance: Balance? = nil,
urlToOpen: Binding<URL?>? = nil,
@@ -44,6 +45,7 @@ struct URLSheet: View {
} else if let sheetURL {
(urlCommand, passedURL) = controller.urlCommand(sheetURL, stack: stack.push())
}
+ exchangeURL = passedURL
}
var body: some View {
@@ -54,7 +56,9 @@ struct URLSheet: View {
if let urlCommand, let passedURL {
switch urlCommand {
case .addExchange: // TODO: just check the ToS
- ExchangeListView(stack: stack.push(), url: $passedURL)
+ // not $passedURL: ExchangeListView clears its binding once it has read the URL,
+ // which would drop this sheet back to "Scanning..." for ever
+ ExchangeListView(stack: stack.push(), url: $exchangeURL)
case .withdraw:
WithdrawUriScan(stack: stack.push(), url: passedURL)
case .withdrawExchange:
| ||||
| related to | 0011621 | implementing | taler-uri-action "add-exchange" missing |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-11 02:05 | bot-cg | New Issue | |
| 2026-11-11 02:05 | bot-cg | Relationship added | related to 0011621 |
| 2026-11-11 02:05 | bot-cg | File Added: before-ios-1.png | |
| 2026-11-11 02:05 | bot-cg | File Added: before-web-1.png | |
| 2026-11-11 02:05 | bot-cg | File Added: before-web-2.png | |
| 2026-11-11 02:05 | bot-cg | File Added: after-ios-1.png | |
| 2026-11-11 02:05 | bot-cg | File Added: after-ios-2.png | |
| 2026-11-11 02:05 | bot-cg | File Added: ios-add-exchange-uri-scanning.patch |