View Issue Details

IDProjectCategoryView StatusLast Update
0012096Talerwallet (iOS App)public2026-11-11 01:50
Reporterbot-cg [agent] Assigned ToResolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicatorCM_7  
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PrioritynormalSeverityminorReproducibilityhave not tried
Status newResolutionopen 
Summary0012096: iOS: the payment screen does not show that an order is age-restricted (minimumAge decoded but unused); the WebExtension shows "18+" (patch attached)
DescriptionFor an age-restricted order (contract minimum_age), the WebExtension shows a "18+" badge next to the merchant on the payment screen (and "18+ This purchase is age restricted." on the pay-template form). Android and iOS show nothing; it is the only place where the user learns that the purchase is age-restricted before paying.

What the user sees (order with "minimum_age": 18, products wine and corkscrew; origin/master builds of 2026-11-11):
- WebExtension: "18+" pill at the right of the merchant row (before-web-1.png).
- Android: merchant, products, total -- no age information (before-android-1.png).
- iOS: merchant, products, amounts -- no age information (before-ios-1.png).

Reference: web screens/PaymentScreen.tsx:577-581, routes/payment-model.ts:272, screens/PaymentTemplateScreen.tsx:136-141.

iOS (origin/master 674b7915): Model/Model+Payment.swift:237,278 decodes minimumAge (and :522,534 for templates), but no view uses it; Views/Transactions/PaymentTransactionView.swift:13-91 (MerchantHeader) shows logo, name and address.

Patch (ios-minimum-age.patch): MerchantHeader shows "Age-restricted purchase: 18+" under the merchant's address. One new English entry in Localizable.xcstrings.
Verified: GNU_Taler Release builds for the simulator; after-ios-1.png is the same order with the patch.

Related: 0012094 (Android counterpart).

Assisted by LLM
Steps To Reproduce1. Create an order with "minimum_age": 18.
2. Open its taler://pay/ link: the WebExtension shows "18+", Android and iOS do not.
(Automated: wc-stack pay-uri --order-json lib/stack-examples/products-and-age.json.)
TagsNo tags attached.
Attached Files
before-web-1.png (106,404 bytes)   
before-web-1.png (106,404 bytes)   
before-android-1.png (82,461 bytes)   
before-android-1.png (82,461 bytes)   
before-ios-1.png (228,648 bytes)   
before-ios-1.png (228,648 bytes)   
after-ios-1.png (232,905 bytes)   
after-ios-1.png (232,905 bytes)   
ios-minimum-age.patch (1,455 bytes)   
diff --git a/TalerWallet1/Resources/Localizable.xcstrings b/TalerWallet1/Resources/Localizable.xcstrings
index e283ca45..6c119e37 100755
--- a/TalerWallet1/Resources/Localizable.xcstrings
+++ b/TalerWallet1/Resources/Localizable.xcstrings
@@ -2842,6 +2842,9 @@
         }
       }
     },
+    "Age-restricted purchase: %lld+" : {
+      "comment" : "payment: the order has a minimum age (contract terms minimum_age)"
+    },
     "Alias Type:" : {
       "comment" : "Picker title",
       "localizations" : {
diff --git a/TalerWallet1/Views/Transactions/PaymentTransactionView.swift b/TalerWallet1/Views/Transactions/PaymentTransactionView.swift
index 1f23d124..5286b56b 100755
--- a/TalerWallet1/Views/Transactions/PaymentTransactionView.swift
+++ b/TalerWallet1/Views/Transactions/PaymentTransactionView.swift
@@ -73,6 +73,11 @@ struct MerchantHeader: View {
                                 Text(address)
                                     .talerFont(.body)
                             }
+                            if let minimumAge = terms.minimumAge, minimumAge > 0 {
+                                Text("Age-restricted purchase: \(minimumAge)+")
+                                    .talerFont(.body)
+                                    .foregroundColor(WalletColors().errorColor)
+                            }
                         }
                     }   .foregroundStyle(Color.primary)
                         .padding(.bottom)
ios-minimum-age.patch (1,455 bytes)   

Required notifications

Address or linkRemarkAdded byNotifiedActions

Relationships

related to 0012094 new Android: the payment screen does not show that an order is age-restricted (minimum_age not even decoded); the WebExtension shows "18+" (patch attached) 

Activities

Issue History

Date ModifiedUsernameFieldChange
2026-11-11 01:50bot-cgNew Issue
2026-11-11 01:50bot-cgRelationship addedrelated to 0012094
2026-11-11 01:50bot-cgFile Added: before-web-1.png
2026-11-11 01:50bot-cgFile Added: before-android-1.png
2026-11-11 01:50bot-cgFile Added: before-ios-1.png
2026-11-11 01:50bot-cgFile Added: after-ios-1.png
2026-11-11 01:50bot-cgFile Added: ios-minimum-age.patch