View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012101 | Taler | wallet (iOS App) | public | 2026-11-11 01:59 | 2026-11-11 01:59 |
| 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 | 0012101: iOS deposit detail does not show which bank account the money goes to -- web does (patch attached) | ||||
| Description | The iOS deposit transaction detail never shows which bank account the money goes to: it shows the bank-account verification part (when pending), the payment service and the amounts, but not the deposit's target account. The web wallet lists the destination (holder, IBAN/BIC or bank and account); Android lacks it as well (filed separately, related). Screenshots (tripwire KUDOS exchange :8445, deposit of KUDOS:1 to payto://x-taler-bank/tripwire.taler.net/wc-kudos-deposit-19c8f2 with holder "Alice Example"; the deposit is waiting for the bank-account verification transfer): - before-web-1.png (reference): web transaction detail: "Destination Alice Example", "Bank tripwire.taler.net", "Account wc-kudos-deposit-19c8f2", "Transfer progress". - before-android-1.png: Android: state text, date, "Wire transfer instructions", "Chosen amount", "Amount sent" -- the account appears nowhere (only in the ⋮ menu as "Copy payto URI"; the title uses only receiver-name). - before-ios-2.png: iOS: verification part, payment service, amounts -- no account. - after-android-1.png / after-ios-2.png: with the respective patch. - before-ios-1.png: the same deposit on a build without the 0012073 fix ("KYC Error / No IBAN"). Note on the builds: on current origin/master the iOS deposit flow is blocked by 0011964. The iOS images were built from origin/master + a reproduction of the 0011964 decode fix + the 0012073 fix (both attached for reference), so that a deposit exists and its detail renders; the after image additionally carries this issue's patch, which touches only TransactionTypeDetail.swift and applies to origin/master on its own. Code (taler-ios origin/master 674b7915, TalerWallet1/): - Views/Transactions/TransactionTypeDetail.swift:132-148: .deposit case = KYC parts + ThreeAmountsSheet - Model/Transaction.swift:494-502: targetPaytoUri (and wireTransferProgress, trackingState) decoded, unused in Views - Views/Settings/Bank/BankSectionView.swift:46-123: how a payto is rendered elsewhere (reused) Patch (attached, ios-deposit-destination.patch): the .deposit case adds a section with BankSectionRow "Account holder:" (receiver-name) and "IBAN:" / "X-TALER-BANK:" / "CYCLOS:" with the account, from the target payto URI. Existing strings. Verification: wc-ios build (Release, iOS 27.2 simulator); after-ios-2.png shows "Account holder: Alice Example" and "X-TALER-BANK: tripwire.taler.net/wc-kudos-deposit-19c8f2" for the same deposit. Assisted by LLM | ||||
| Steps To Reproduce | 1. Fund the wallet, add an x-taler-bank (or IBAN) account, deposit to it. 2. Open the deposit transaction: the destination account is not shown. | ||||
| Tags | No tags attached. | ||||
| Attached Files | ios-deposit-destination.patch (1,665 bytes)
diff --git a/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift b/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
index 75efbdfb..4a8cd6ab 100755
--- a/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
+++ b/TalerWallet1/Views/Transactions/TransactionTypeDetail.swift
@@ -145,6 +145,23 @@ struct TransactionTypeDetail: View {
feeIsNegative: false,
large: true,
summary: nil)
+ // the bank account this deposit goes to
+ let target = depositTransaction.details.targetPaytoUri
+ let targetURL = URL(string: target)
+ let (methodType, account): (String, String?) =
+ if let iban = targetURL?.iban { ("IBAN", iban) }
+ else if let cyclos = targetURL?.cyclos { ("CYCLOS", cyclos) }
+ else { (PaytoType.xTalerBank.rawValue.uppercased(), targetURL?.xTaler) }
+ Section {
+ if let holder = PayTo(target).receiver {
+ BankSectionRow(title: String(localized: "Account holder:"),
+ value: holder)
+ }
+ if let account {
+ BankSectionRow(title: String(localized: "\(methodType):", comment: "methodType:"),
+ value: account)
+ }
+ }.talerFont(.body)
}
case .payment(let paymentTransaction):
ios-base-11964-decode-fix.patch (1,292 bytes)
diff --git a/TalerWallet1/Model/Model+Deposit.swift b/TalerWallet1/Model/Model+Deposit.swift
index aace81a7..ce494e88 100644
--- a/TalerWallet1/Model/Model+Deposit.swift
+++ b/TalerWallet1/Model/Model+Deposit.swift
@@ -141,12 +141,16 @@ extension WalletModel {
}
// MARK: - max Deposit amount
/// Check if initiating a deposit is possible, check fees
-fileprivate struct AmountResponse: Codable {
+fileprivate struct DepositMaximum: Codable {
let effectiveAmount: Amount?
let rawAmount: Amount
}
+fileprivate struct MaxDepositAmountResponse: Codable {
+ let material: DepositMaximum
+ let available: DepositMaximum
+}
fileprivate struct GetMaxDepositAmount: WalletBackendFormattedRequest {
- typealias Response = AmountResponse
+ typealias Response = MaxDepositAmountResponse
var operation: String { "getMaxDepositAmount" }
func args() -> Args { Args(currency: scope.currency, restrictScope: scope) }
@@ -162,7 +166,7 @@ extension WalletModel {
async throws -> Amount {
let request = GetMaxDepositAmount(scope: scope)
let (response, _) = try await sendRequest(request, viewHandles: viewHandles)
- return response.rawAmount
+ return response.available.rawAmount
}
} // getMaxDepositAmount
// MARK: - Deposit
ios-kycauth-non-iban.patch (1,079 bytes)
diff --git a/TalerWallet1/Views/Transactions/KYCauth.swift b/TalerWallet1/Views/Transactions/KYCauth.swift
index c7624100..4dd0704c 100755
--- a/TalerWallet1/Views/Transactions/KYCauth.swift
+++ b/TalerWallet1/Views/Transactions/KYCauth.swift
@@ -27,7 +27,11 @@ struct KYCauth: View {
let kycErr = String(localized: "KYC Error")
if let info = common.kycAuthTransferInfo {
let debitPayTo = PayTo(info.debitPaytoUri)
- if let debitIban = debitPayTo.iban {
+ // the account the auth transfer must come from: an IBAN, or a
+ // regional bank account (x-taler-bank: "host/account", cyclos)
+ // (PayTo.xTaler falls back to a placeholder text, so ask the URL itself)
+ if let debitIban = debitPayTo.iban ?? debitPayTo.cyclos
+ ?? URL(string: info.debitPaytoUri)?.xTaler {
let accountDetails = info.transferOptionsExt
if let validDetails = accountDetails.validDetails {
if let scope: ScopeInfo = common.scopes.first {
| ||||
| related to | 0012100 | new | Android deposit detail does not show which bank account the money goes to -- web does (patch attached) |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-11-11 01:59 | bot-cg | New Issue | |
| 2026-11-11 01:59 | bot-cg | Relationship added | related to 0012100 |
| 2026-11-11 01:59 | bot-cg | File Added: before-web-1.png | |
| 2026-11-11 01:59 | bot-cg | File Added: before-android-1.png | |
| 2026-11-11 01:59 | bot-cg | File Added: before-ios-1.png | |
| 2026-11-11 01:59 | bot-cg | File Added: before-ios-2.png | |
| 2026-11-11 01:59 | bot-cg | File Added: after-ios-2.png | |
| 2026-11-11 01:59 | bot-cg | File Added: ios-deposit-destination.patch | |
| 2026-11-11 01:59 | bot-cg | File Added: ios-base-11964-decode-fix.patch | |
| 2026-11-11 01:59 | bot-cg | File Added: ios-kycauth-non-iban.patch |