gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-ios] branch master updated (735c721 -> 7d32de8)


From: gnunet
Subject: [taler-taler-ios] branch master updated (735c721 -> 7d32de8)
Date: Sat, 02 Sep 2023 22:01:01 +0200

This is an automated email from the git hooks/post-receive script.

marc-stibane pushed a change to branch master
in repository taler-ios.

    from 735c721  UI improvements
     new 8646727  Patch for CCCamp, removed extra, bump version to 0.9.3 (18)
     new 5661536  Changed "Invoice" to "Request" (private mode - "Invoice" will 
be used in business mode post 1.0), roundedBorder for input fields
     new 6c25aed  Use sqlite3
     new 8c2b7c0  Rename
     new 045242d  Comment
     new 5ed6289  Rename
     new 567770c  secret-token:secret
     new 2dd7100  IntegrationTest on test
     new 8459372  Accessibility String for Payment Sounds
     new f13f823  Comment
     new c521342  Settings: Font: AtkinsonHyperlegible
     new 459811c  CachePath for data not to be backed up
     new a747968  ScopedCurrencyInfo, SuperScriptDigit
     new 625b0a5  CurrencyFormatter
     new 8fa083a  group
     new 22a6192  Rename, fix
     new d28f26e  GNU Taler, Taler Wallet
     new e9e27e9  Nunito Font
     new 7d32de8  Font Settings

The 19 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 Info.plist => GNU_Taler Info.plist                 |   8 +-
 GNU Taler.entitlements => GNU_Taler.entitlements   |   0
 TalerWallet.xcodeproj/project.pbxproj              | 506 +++++++++++++++++++--
 TalerWallet1/Backend/Transaction.swift             |   8 +-
 TalerWallet1/Controllers/Controller.swift          |  11 +-
 TalerWallet1/Controllers/DebugViewC.swift          |  24 +-
 TalerWallet1/Controllers/TalerWallet1App.swift     |   3 +-
 .../Atkinson-Hyperlegible-Bold-102.otf             | Bin
 .../Atkinson-Hyperlegible-BoldItalic-102.otf       | Bin
 ...tkinson-Hyperlegible-Font-License-2020-1104.pdf | Bin
 .../Atkinson-Hyperlegible-Italic-102.otf           | Bin
 .../Atkinson-Hyperlegible-Regular-102.otf          | Bin
 TalerWallet1/Fonts/Nunito/Nunito-Bold.ttf          | Bin 0 -> 131672 bytes
 TalerWallet1/Fonts/Nunito/Nunito-BoldItalic.ttf    | Bin 0 -> 134540 bytes
 TalerWallet1/Fonts/Nunito/Nunito-Italic.ttf        | Bin 0 -> 134664 bytes
 TalerWallet1/Fonts/Nunito/Nunito-Regular.ttf       | Bin 0 -> 131736 bytes
 TalerWallet1/Fonts/Nunito/OFL.txt                  |  93 ++++
 ...{playSound.swift => Controller+playSound.swift} |   1 +
 TalerWallet1/Helper/CurrencyFormatter.swift        |  23 +-
 TalerWallet1/Helper/Font+Taler.swift               | 117 +++++
 TalerWallet1/Model/Model+Exchange.swift            |   6 -
 TalerWallet1/Model/Model+P2P.swift                 |   8 +-
 TalerWallet1/Model/Model+Payment.swift             |   4 +-
 TalerWallet1/Model/Model+Settings.swift            |   3 +-
 TalerWallet1/Model/WalletModel.swift               |  40 +-
 .../Views/Balances/BalancesSectionView.swift       |  14 +-
 TalerWallet1/Views/HelperViews/AmountView.swift    |   4 +-
 TalerWallet1/Views/HelperViews/CurrencyField.swift |   3 +-
 .../Views/HelperViews/CurrencyInputView.swift      |   6 +-
 TalerWallet1/Views/Payment/PaymentView.swift       |   4 +-
 TalerWallet1/Views/Peer2peer/PaymentPurpose.swift  |   8 +-
 TalerWallet1/Views/Peer2peer/RequestPayment.swift  |   9 +-
 TalerWallet1/Views/Peer2peer/SendDone.swift        |   2 +-
 TalerWallet1/Views/Peer2peer/SendPurpose.swift     |   7 +-
 TalerWallet1/Views/Settings/SettingsItem.swift     |  77 +++-
 TalerWallet1/Views/Settings/SettingsView.swift     |  35 +-
 .../Views/Sheets/P2P_Sheets/P2pAcceptDone.swift    |   2 +-
 .../Views/Sheets/P2P_Sheets/P2pPayURIView.swift    |   6 +-
 .../WithdrawBankIntegrated/WithdrawURIView.swift   |   6 +-
 Info.plist => Taler_Wallet Info.plist              |   8 +-
 ...Taler.entitlements => Taler_Wallet.entitlements |   0
 TestFlight/WhatToTest.en-US.txt                    |   5 +
 taler-swift/Sources/taler-swift/Amount.swift       |  32 +-
 43 files changed, 930 insertions(+), 153 deletions(-)
 copy Info.plist => GNU_Taler Info.plist (84%)
 copy GNU Taler.entitlements => GNU_Taler.entitlements (100%)
 rename {Atkinson-Hyperlegible => 
TalerWallet1/Fonts/Atkinson-Hyperlegible}/Atkinson-Hyperlegible-Bold-102.otf 
(100%)
 rename {Atkinson-Hyperlegible => 
TalerWallet1/Fonts/Atkinson-Hyperlegible}/Atkinson-Hyperlegible-BoldItalic-102.otf
 (100%)
 rename {Atkinson-Hyperlegible => 
TalerWallet1/Fonts/Atkinson-Hyperlegible}/Atkinson-Hyperlegible-Font-License-2020-1104.pdf
 (100%)
 rename {Atkinson-Hyperlegible => 
TalerWallet1/Fonts/Atkinson-Hyperlegible}/Atkinson-Hyperlegible-Italic-102.otf 
(100%)
 rename {Atkinson-Hyperlegible => 
TalerWallet1/Fonts/Atkinson-Hyperlegible}/Atkinson-Hyperlegible-Regular-102.otf 
(100%)
 create mode 100644 TalerWallet1/Fonts/Nunito/Nunito-Bold.ttf
 create mode 100644 TalerWallet1/Fonts/Nunito/Nunito-BoldItalic.ttf
 create mode 100644 TalerWallet1/Fonts/Nunito/Nunito-Italic.ttf
 create mode 100644 TalerWallet1/Fonts/Nunito/Nunito-Regular.ttf
 create mode 100644 TalerWallet1/Fonts/Nunito/OFL.txt
 rename TalerWallet1/Helper/{playSound.swift => Controller+playSound.swift} 
(96%)
 create mode 100644 TalerWallet1/Helper/Font+Taler.swift
 rename Info.plist => Taler_Wallet Info.plist (84%)
 rename GNU Taler.entitlements => Taler_Wallet.entitlements (100%)

diff --git a/Info.plist b/GNU_Taler Info.plist
similarity index 84%
copy from Info.plist
copy to GNU_Taler Info.plist
index 6cbe85d..5c6173c 100644
--- a/Info.plist
+++ b/GNU_Taler Info.plist      
@@ -12,7 +12,7 @@
                        <key>CFBundleTypeRole</key>
                        <string>Viewer</string>
                        <key>CFBundleURLName</key>
-                       <string>com.taler-systems.gnutalerwallet09</string>
+                       <string>com.taler-systems.talerwallet-1</string>
                        <key>CFBundleURLSchemes</key>
                        <array>
                                <string>taler</string>
@@ -27,9 +27,13 @@
        <key>UIAppFonts</key>
        <array>
                <string>Atkinson-Hyperlegible-Regular-102.otf</string>
-               <string>Atkinson-Hyperlegible-Italic-102.otf</string>
                <string>Atkinson-Hyperlegible-Bold-102.otf</string>
                <string>Atkinson-Hyperlegible-BoldItalic-102.otf</string>
+               <string>Atkinson-Hyperlegible-Italic-102.otf</string>
+               <string>Nunito-Regular.ttf</string>
+               <string>Nunito-Bold.ttf</string>
+               <string>Nunito-BoldItalic.ttf</string>
+               <string>Nunito-Italic.ttf</string>
        </array>
        <key>UIBackgroundModes</key>
        <array>
diff --git a/GNU Taler.entitlements b/GNU_Taler.entitlements
similarity index 100%
copy from GNU Taler.entitlements
copy to GNU_Taler.entitlements
diff --git a/TalerWallet.xcodeproj/project.pbxproj 
b/TalerWallet.xcodeproj/project.pbxproj
index 14555ba..aa9e2a0 100644
--- a/TalerWallet.xcodeproj/project.pbxproj
+++ b/TalerWallet.xcodeproj/project.pbxproj
@@ -19,10 +19,121 @@
                4E3B4BC52A428AF700CC88B8 /* Model+Balances.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3B4BC42A428AF700CC88B8 /* 
Model+Balances.swift */; };
                4E3B4BC72A429F2A00CC88B8 /* View+Notification.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E3B4BC62A429F2A00CC88B8 /* 
View+Notification.swift */; };
                4E3B4BC92A42BC4800CC88B8 /* Model+Exchange.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3B4BC82A42BC4800CC88B8 /* 
Model+Exchange.swift */; };
+               4E3EAE1D2A990778009F1BE8 /* SelectDays.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4ECB62812A0BB01D004ABBB7 /* SelectDays.swift */; 
};
+               4E3EAE1E2A990778009F1BE8 /* AgePicker.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E97968F2A3765ED006F73BC /* AgePicker.swift */; 
};
+               4E3EAE1F2A990778009F1BE8 /* Controller.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095012989C9BC0043A8A1 /* Controller.swift */; 
};
+               4E3EAE202A990778009F1BE8 /* MainView.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB095442989CBFE0043A8A1 /* MainView.swift */; };
+               4E3EAE212A990778009F1BE8 /* Buttons.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB095472989CBFE0043A8A1 /* Buttons.swift */; };
+               4E3EAE222A990778009F1BE8 /* TransactionButton.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EBA82AA2A3EB2CA00E5F39A /* 
TransactionButton.swift */; };
+               4E3EAE232A990778009F1BE8 /* BalancesSectionView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB0953A2989CBFE0043A8A1 /* 
BalancesSectionView.swift */; };
+               4E3EAE242A990778009F1BE8 /* QRGeneratorView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EEC157229F8242800D46A03 /* 
QRGeneratorView.swift */; };
+               4E3EAE252A990778009F1BE8 /* WithdrawAcceptDone.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E5A88F62A3B9E5B00072618 /* 
WithdrawAcceptDone.swift */; };
+               4E3EAE262A990778009F1BE8 /* Transaction.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0951E2989CBCB0043A8A1 /* Transaction.swift 
*/; };
+               4E3EAE272A990778009F1BE8 /* WalletColors.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E9320422A14F6EA00A87B0E /* WalletColors.swift 
*/; };
+               4E3EAE282A990778009F1BE8 /* BalancesListView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB095372989CBFE0043A8A1 /* 
BalancesListView.swift */; };
+               4E3EAE292A990778009F1BE8 /* WalletBackendError.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB0951D2989CBCB0043A8A1 /* 
WalletBackendError.swift */; };
+               4E3EAE2A2A990778009F1BE8 /* PendingRowView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095382989CBFE0043A8A1 /* 
PendingRowView.swift */; };
+               4E3EAE2B2A990778009F1BE8 /* LoadingView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0954A2989CBFE0043A8A1 /* LoadingView.swift 
*/; };
+               4E3EAE2C2A990778009F1BE8 /* ManualWithdraw.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E50B34F2A1BEE8000F9F01C /* 
ManualWithdraw.swift */; };
+               4E3EAE2D2A990778009F1BE8 /* Model+Exchange.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3B4BC82A42BC4800CC88B8 /* 
Model+Exchange.swift */; };
+               4E3EAE2E2A990778009F1BE8 /* QRCodeDetailView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E5A88F42A38A4FD00072618 /* 
QRCodeDetailView.swift */; };
+               4E3EAE2F2A990778009F1BE8 /* TransactionsEmptyView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E87C8722A31CB7F001C6406 /* 
TransactionsEmptyView.swift */; };
+               4E3EAE302A990778009F1BE8 /* UncompletedRowView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E87C8742A34B411001C6406 /* 
UncompletedRowView.swift */; };
+               4E3EAE312A990778009F1BE8 /* SendAmount.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E40E0BD29F25ABB00B85369 /* SendAmount.swift */; 
};
+               4E3EAE332A990778009F1BE8 /* EqualIconWidthDomain.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E8E25322A1CD39700A27BFA /* 
EqualIconWidthDomain.swift */; };
+               4E3EAE342A990778009F1BE8 /* SuperScriptDigits.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EBA563E2A7FD9390084948B /* 
SuperScriptDigits.swift */; };
+               4E3EAE352A990778009F1BE8 /* P2pPayURIView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E578E932A4822D500F21F1C /* P2pPayURIView.swift 
*/; };
+               4E3EAE362A990778009F1BE8 /* Model+Payment.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0952C2989CBFE0043A8A1 /* Model+Payment.swift 
*/; };
+               4E3EAE372A990778009F1BE8 /* SettingsView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095252989CBFE0043A8A1 /* SettingsView.swift 
*/; };
+               4E3EAE382A990778009F1BE8 /* PaymentView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0952D2989CBFE0043A8A1 /* PaymentView.swift 
*/; };
+               4E3EAE392A990778009F1BE8 /* WithdrawURIView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB0953C2989CBFE0043A8A1 /* 
WithdrawURIView.swift */; };
+               4E3EAE3A2A990778009F1BE8 /* CopyShare.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EF840A62A0B85F400EE0D47 /* CopyShare.swift */; 
};
+               4E3EAE3B2A990778009F1BE8 /* TalerWallet1App.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB094EC298979620043A8A1 /* 
TalerWallet1App.swift */; };
+               4E3EAE3C2A990778009F1BE8 /* WithdrawTOSView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095402989CBFE0043A8A1 /* 
WithdrawTOSView.swift */; };
+               4E3EAE3D2A990778009F1BE8 /* Sheet.swift in Sources */ = {isa = 
PBXBuildFile; fileRef = 4EEC157729F9032900D46A03 /* Sheet.swift */; };
+               4E3EAE3E2A990778009F1BE8 /* ManualDetails.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E6EDD842A3615BE0031D520 /* ManualDetails.swift 
*/; };
+               4E3EAE3F2A990778009F1BE8 /* View+dismissTop.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095082989CB7C0043A8A1 /* 
View+dismissTop.swift */; };
+               4E3EAE402A990778009F1BE8 /* TransactionsListView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB0952F2989CBFE0043A8A1 /* 
TransactionsListView.swift */; };
+               4E3EAE412A990778009F1BE8 /* WalletBackendRequest.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB0951B2989CBCB0043A8A1 /* 
WalletBackendRequest.swift */; };
+               4E3EAE422A990778009F1BE8 /* KeyboardResponder.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EAD117529F672FA008EDD0B /* 
KeyboardResponder.swift */; };
+               4E3EAE432A990778009F1BE8 /* TransactionRowView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB095302989CBFE0043A8A1 /* 
TransactionRowView.swift */; };
+               4E3EAE442A990778009F1BE8 /* PublicConstants.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EA1ABBD29A3833A008821EA /* 
PublicConstants.swift */; };
+               4E3EAE452A990778009F1BE8 /* SendDone.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB3136029FEE79B007D68BC /* SendDone.swift */; };
+               4E3EAE462A990778009F1BE8 /* TextFieldAlert.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095482989CBFE0043A8A1 /* 
TextFieldAlert.swift */; };
+               4E3EAE472A990778009F1BE8 /* QuiteSomeCoins.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EBA82AC2A3F580500E5F39A /* 
QuiteSomeCoins.swift */; };
+               4E3EAE482A990778009F1BE8 /* PayTemplateView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EBA56402A7FF5200084948B /* 
PayTemplateView.swift */; };
+               4E3EAE492A990778009F1BE8 /* ManualWithdrawDone.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB431662A1E55C700C5690E /* 
ManualWithdrawDone.swift */; };
+               4E3EAE4A2A990778009F1BE8 /* PaymentPurpose.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E9320462A164BC700A87B0E /* 
PaymentPurpose.swift */; };
+               4E3EAE4B2A990778009F1BE8 /* ShareSheet.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E753A072A0B6A5F002D9328 /* ShareSheet.swift */; 
};
+               4E3EAE4C2A990778009F1BE8 /* AmountView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095492989CBFE0043A8A1 /* AmountView.swift */; 
};
+               4E3EAE4D2A990778009F1BE8 /* P2pAcceptDone.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E3B4BC22A42252300CC88B8 /* P2pAcceptDone.swift 
*/; };
+               4E3EAE4E2A990778009F1BE8 /* AnyTransition+backslide.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E363CBD2A23CB2100D7E98C /* 
AnyTransition+backslide.swift */; };
+               4E3EAE4F2A990778009F1BE8 /* BalanceRowButtons.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB065432A4CD1A80039B91D /* 
BalanceRowButtons.swift */; };
+               4E3EAE502A990778009F1BE8 /* Model+Transactions.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB095322989CBFE0043A8A1 /* 
Model+Transactions.swift */; };
+               4E3EAE512A990778009F1BE8 /* Controller+playSound.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E578E912A481D8600F21F1C /* 
Controller+playSound.swift */; };
+               4E3EAE522A990778009F1BE8 /* WalletEmptyView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095392989CBFE0043A8A1 /* 
WalletEmptyView.swift */; };
+               4E3EAE532A990778009F1BE8 /* CurrencyFormatter.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E16E12229F3BB99008B9C86 /* 
CurrencyFormatter.swift */; };
+               4E3EAE542A990778009F1BE8 /* TalerDater.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095062989CB7C0043A8A1 /* TalerDater.swift */; 
};
+               4E3EAE552A990778009F1BE8 /* Model+Balances.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E3B4BC42A428AF700CC88B8 /* 
Model+Balances.swift */; };
+               4E3EAE562A990778009F1BE8 /* LocalizedAlertError.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E363CC12A2621C200D7E98C /* 
LocalizedAlertError.swift */; };
+               4E3EAE572A990778009F1BE8 /* quickjs.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB0950D2989CB9A0043A8A1 /* quickjs.swift */; };
+               4E3EAE582A990778009F1BE8 /* CurrencyField.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E53A33629F50B7B00830EC2 /* CurrencyField.swift 
*/; };
+               4E3EAE592A990778009F1BE8 /* Model+Settings.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095102989CBB00043A8A1 /* 
Model+Settings.swift */; };
+               4E3EAE5A2A990778009F1BE8 /* ErrorView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095452989CBFE0043A8A1 /* ErrorView.swift */; 
};
+               4E3EAE5B2A990778009F1BE8 /* View+Notification.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E3B4BC62A429F2A00CC88B8 /* 
View+Notification.swift */; };
+               4E3EAE5C2A990778009F1BE8 /* Model+Pending.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0954C2989CBFE0043A8A1 /* Model+Pending.swift 
*/; };
+               4E3EAE5D2A990778009F1BE8 /* ExchangeListView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB095292989CBFE0043A8A1 /* 
ExchangeListView.swift */; };
+               4E3EAE5E2A990778009F1BE8 /* WithdrawProgressView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB0953F2989CBFE0043A8A1 /* 
WithdrawProgressView.swift */; };
+               4E3EAE5F2A990778009F1BE8 /* QRSheet.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EEC157929F9427F00D46A03 /* QRSheet.swift */; };
+               4E3EAE602A990778009F1BE8 /* P2pReceiveURIView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E3B4BC02A41E6C200CC88B8 /* 
P2pReceiveURIView.swift */; };
+               4E3EAE612A990778009F1BE8 /* ListStyle.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E6EDD862A363D8D0031D520 /* ListStyle.swift */; 
};
+               4E3EAE622A990778009F1BE8 /* TransactionDetailView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB095312989CBFE0043A8A1 /* 
TransactionDetailView.swift */; };
+               4E3EAE632A990778009F1BE8 /* WalletCore.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0951C2989CBCB0043A8A1 /* WalletCore.swift */; 
};
+               4E3EAE642A990778009F1BE8 /* LaunchAnimationView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EB095432989CBFE0043A8A1 /* 
LaunchAnimationView.swift */; };
+               4E3EAE652A990778009F1BE8 /* SideBarView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095422989CBFE0043A8A1 /* SideBarView.swift 
*/; };
+               4E3EAE662A990778009F1BE8 /* PendingOpView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB0954D2989CBFE0043A8A1 /* PendingOpView.swift 
*/; };
+               4E3EAE672A990778009F1BE8 /* PendingOpsListView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EB0954E2989CBFE0043A8A1 /* 
PendingOpsListView.swift */; };
+               4E3EAE682A990778009F1BE8 /* WalletModel.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095112989CBB00043A8A1 /* WalletModel.swift 
*/; };
+               4E3EAE692A990778009F1BE8 /* URLSheet.swift in Sources */ = {isa 
= PBXBuildFile; fileRef = 4EB095332989CBFE0043A8A1 /* URLSheet.swift */; };
+               4E3EAE6A2A990778009F1BE8 /* ThreeAmounts.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4ED2F94A2A278F5100453B40 /* ThreeAmounts.swift 
*/; };
+               4E3EAE6B2A990778009F1BE8 /* Model+Withdraw.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB0953D2989CBFE0043A8A1 /* 
Model+Withdraw.swift */; };
+               4E3EAE6C2A990778009F1BE8 /* ExchangeSectionView.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4EC90C772A1B528B0071DC58 /* 
ExchangeSectionView.swift */; };
+               4E3EAE6D2A990778009F1BE8 /* SendPurpose.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E7940DD29FC307C00A9AEA1 /* SendPurpose.swift 
*/; };
+               4E3EAE6E2A990778009F1BE8 /* Model+P2P.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4ECB627F2A0BA6DF004ABBB7 /* Model+P2P.swift */; 
};
+               4E3EAE6F2A990778009F1BE8 /* TalerStrings.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095072989CB7C0043A8A1 /* TalerStrings.swift 
*/; };
+               4E3EAE702A990778009F1BE8 /* CurrencyInputView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4EA551242A2C923600FEC9A8 /* 
CurrencyInputView.swift */; };
+               4E3EAE712A990778009F1BE8 /* URL+id+iban.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E363CBB2A237E0900D7E98C /* URL+id+iban.swift 
*/; };
+               4E3EAE722A990778009F1BE8 /* RequestPayment.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E9320442A1645B600A87B0E /* 
RequestPayment.swift */; };
+               4E3EAE732A990778009F1BE8 /* SettingsItem.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4EB095262989CBFE0043A8A1 /* SettingsItem.swift 
*/; };
+               4E3EAE742A990778009F1BE8 /* BalanceRowView.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4EB095362989CBFE0043A8A1 /* 
BalanceRowView.swift */; };
+               4E3EAE752A990778009F1BE8 /* DebugViewC.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E753A052A0952F7002D9328 /* DebugViewC.swift */; 
};
+               4E3EAE772A990778009F1BE8 /* AnyCodable in Frameworks */ = {isa 
= PBXBuildFile; productRef = 4E3EAE162A990778009F1BE8 /* AnyCodable */; };
+               4E3EAE782A990778009F1BE8 /* SymLog in Frameworks */ = {isa = 
PBXBuildFile; productRef = 4E3EAE182A990778009F1BE8 /* SymLog */; };
+               4E3EAE792A990778009F1BE8 /* FTalerWalletcore.framework in 
Frameworks */ = {isa = PBXBuildFile; fileRef = 4EB094F729897CA20043A8A1 /* 
FTalerWalletcore.framework */; };
+               4E3EAE7A2A990778009F1BE8 /* taler-swift in Frameworks */ = {isa 
= PBXBuildFile; productRef = 4E3EAE152A990778009F1BE8 /* taler-swift */; };
+               4E3EAE7B2A990778009F1BE8 /* CodeScanner in Frameworks */ = {isa 
= PBXBuildFile; productRef = 4E3EAE1A2A990778009F1BE8 /* CodeScanner */; };
+               4E3EAE7E2A990778009F1BE8 /* Settings.bundle in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E363CBF2A24754200D7E98C /* Settings.bundle */; 
};
+               4E3EAE7F2A990778009F1BE8 /* 
Atkinson-Hyperlegible-Regular-102.otf in Resources */ = {isa = PBXBuildFile; 
fileRef = 4E8C171C2A6509BB005B2392 /* Atkinson-Hyperlegible-Regular-102.otf */; 
};
+               4E3EAE802A990778009F1BE8 /* Atkinson-Hyperlegible-Bold-102.otf 
in Resources */ = {isa = PBXBuildFile; fileRef = 4E8C171E2A6509BB005B2392 /* 
Atkinson-Hyperlegible-Bold-102.otf */; };
+               4E3EAE812A990778009F1BE8 /* 
Atkinson-Hyperlegible-BoldItalic-102.otf in Resources */ = {isa = PBXBuildFile; 
fileRef = 4E8C171F2A6509BB005B2392 /* Atkinson-Hyperlegible-BoldItalic-102.otf 
*/; };
+               4E3EAE822A990778009F1BE8 /* payment_received.m4a in Resources 
*/ = {isa = PBXBuildFile; fileRef = 4E2254952A822B8100E41D29 /* 
payment_received.m4a */; };
+               4E3EAE832A990778009F1BE8 /* 
Atkinson-Hyperlegible-Italic-102.otf in Resources */ = {isa = PBXBuildFile; 
fileRef = 4E8C171D2A6509BB005B2392 /* Atkinson-Hyperlegible-Italic-102.otf */; 
};
+               4E3EAE842A990778009F1BE8 /* Assets.xcassets in Resources */ = 
{isa = PBXBuildFile; fileRef = 4EB094EF298979D30043A8A1 /* Assets.xcassets */; 
};
+               4E3EAE852A990778009F1BE8 /* payment_sent.m4a in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E2254962A822B8100E41D29 /* payment_sent.m4a */; 
};
+               4E3EAE8C2AA0933C009F1BE8 /* Font+Taler.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAE8B2AA0933C009F1BE8 /* Font+Taler.swift */; 
};
+               4E3EAE8D2AA0933C009F1BE8 /* Font+Taler.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAE8B2AA0933C009F1BE8 /* Font+Taler.swift */; 
};
+               4E3EAE9C2AA12467009F1BE8 /* Nunito-Regular.ttf in Resources */ 
= {isa = PBXBuildFile; fileRef = 4E3EAE9A2AA12467009F1BE8 /* Nunito-Regular.ttf 
*/; };
+               4E3EAE9D2AA12467009F1BE8 /* Nunito-Regular.ttf in Resources */ 
= {isa = PBXBuildFile; fileRef = 4E3EAE9A2AA12467009F1BE8 /* Nunito-Regular.ttf 
*/; };
+               4E3EAE9E2AA12467009F1BE8 /* Nunito-Bold.ttf in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAE9B2AA12467009F1BE8 /* Nunito-Bold.ttf */; 
};
+               4E3EAE9F2AA12467009F1BE8 /* Nunito-Bold.ttf in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAE9B2AA12467009F1BE8 /* Nunito-Bold.ttf */; 
};
+               4E3EAEA22AA12582009F1BE8 /* Nunito-Italic.ttf in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAEA02AA12582009F1BE8 /* Nunito-Italic.ttf 
*/; };
+               4E3EAEA32AA12582009F1BE8 /* Nunito-Italic.ttf in Resources */ = 
{isa = PBXBuildFile; fileRef = 4E3EAEA02AA12582009F1BE8 /* Nunito-Italic.ttf 
*/; };
+               4E3EAEA42AA12582009F1BE8 /* Nunito-BoldItalic.ttf in Resources 
*/ = {isa = PBXBuildFile; fileRef = 4E3EAEA12AA12582009F1BE8 /* 
Nunito-BoldItalic.ttf */; };
+               4E3EAEA52AA12582009F1BE8 /* Nunito-BoldItalic.ttf in Resources 
*/ = {isa = PBXBuildFile; fileRef = 4E3EAEA12AA12582009F1BE8 /* 
Nunito-BoldItalic.ttf */; };
                4E40E0BE29F25ABB00B85369 /* SendAmount.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E40E0BD29F25ABB00B85369 /* SendAmount.swift */; 
};
                4E50B3502A1BEE8000F9F01C /* ManualWithdraw.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 4E50B34F2A1BEE8000F9F01C /* 
ManualWithdraw.swift */; };
                4E53A33729F50B7B00830EC2 /* CurrencyField.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E53A33629F50B7B00830EC2 /* CurrencyField.swift 
*/; };
-               4E578E922A481D8600F21F1C /* playSound.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E578E912A481D8600F21F1C /* playSound.swift */; 
};
+               4E578E922A481D8600F21F1C /* Controller+playSound.swift in 
Sources */ = {isa = PBXBuildFile; fileRef = 4E578E912A481D8600F21F1C /* 
Controller+playSound.swift */; };
                4E578E942A4822D500F21F1C /* P2pPayURIView.swift in Sources */ = 
{isa = PBXBuildFile; fileRef = 4E578E932A4822D500F21F1C /* P2pPayURIView.swift 
*/; };
                4E5A88F52A38A4FD00072618 /* QRCodeDetailView.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E5A88F42A38A4FD00072618 /* 
QRCodeDetailView.swift */; };
                4E5A88F72A3B9E5B00072618 /* WithdrawAcceptDone.swift in Sources 
*/ = {isa = PBXBuildFile; fileRef = 4E5A88F62A3B9E5B00072618 /* 
WithdrawAcceptDone.swift */; };
@@ -133,6 +244,15 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
+               4E3EAE7C2A990778009F1BE8 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 12;
+                       dstPath = "";
+                       dstSubfolderSpec = 7;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                D11250FA26B12D4400D02E00 /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 12;
@@ -152,16 +272,21 @@
                4E363CBD2A23CB2100D7E98C /* AnyTransition+backslide.swift */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.swift; path = "AnyTransition+backslide.swift"; sourceTree = 
"<group>"; };
                4E363CBF2A24754200D7E98C /* Settings.bundle */ = {isa = 
PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = 
Settings.bundle; sourceTree = "<group>"; };
                4E363CC12A2621C200D7E98C /* LocalizedAlertError.swift */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; 
path = LocalizedAlertError.swift; sourceTree = "<group>"; };
-               4E3AE7EF29A7E8F40070BEC4 /* Taler Wallet.entitlements */ = {isa 
= PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Taler 
Wallet.entitlements"; sourceTree = "<group>"; };
                4E3B4BC02A41E6C200CC88B8 /* P2pReceiveURIView.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= P2pReceiveURIView.swift; sourceTree = "<group>"; };
                4E3B4BC22A42252300CC88B8 /* P2pAcceptDone.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= P2pAcceptDone.swift; sourceTree = "<group>"; };
                4E3B4BC42A428AF700CC88B8 /* Model+Balances.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "Model+Balances.swift"; sourceTree = "<group>"; };
                4E3B4BC62A429F2A00CC88B8 /* View+Notification.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "View+Notification.swift"; sourceTree = "<group>"; };
                4E3B4BC82A42BC4800CC88B8 /* Model+Exchange.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "Model+Exchange.swift"; sourceTree = "<group>"; };
-               4E40E0BD29F25ABB00B85369 /* SendAmount.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name 
= SendAmount.swift; path = TalerWallet1/Views/Peer2peer/SendAmount.swift; 
sourceTree = SOURCE_ROOT; };
+               4E3EAE892A990778009F1BE8 /* GNU_Taler.app */ = {isa = 
PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; 
path = GNU_Taler.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               4E3EAE8B2AA0933C009F1BE8 /* Font+Taler.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= "Font+Taler.swift"; sourceTree = "<group>"; };
+               4E3EAE9A2AA12467009F1BE8 /* Nunito-Regular.ttf */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = "Nunito-Regular.ttf"; 
sourceTree = "<group>"; };
+               4E3EAE9B2AA12467009F1BE8 /* Nunito-Bold.ttf */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = "Nunito-Bold.ttf"; 
sourceTree = "<group>"; };
+               4E3EAEA02AA12582009F1BE8 /* Nunito-Italic.ttf */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = "Nunito-Italic.ttf"; 
sourceTree = "<group>"; };
+               4E3EAEA12AA12582009F1BE8 /* Nunito-BoldItalic.ttf */ = {isa = 
PBXFileReference; lastKnownFileType = file; path = "Nunito-BoldItalic.ttf"; 
sourceTree = "<group>"; };
+               4E40E0BD29F25ABB00B85369 /* SendAmount.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= SendAmount.swift; sourceTree = "<group>"; };
                4E50B34F2A1BEE8000F9F01C /* ManualWithdraw.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= ManualWithdraw.swift; sourceTree = "<group>"; };
                4E53A33629F50B7B00830EC2 /* CurrencyField.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= CurrencyField.swift; sourceTree = "<group>"; };
-               4E578E912A481D8600F21F1C /* playSound.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = playSound.swift; 
sourceTree = "<group>"; };
+               4E578E912A481D8600F21F1C /* Controller+playSound.swift */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = 
"Controller+playSound.swift"; sourceTree = "<group>"; };
                4E578E932A4822D500F21F1C /* P2pPayURIView.swift */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.swift; path = 
P2pPayURIView.swift; sourceTree = "<group>"; };
                4E5A88F42A38A4FD00072618 /* QRCodeDetailView.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= QRCodeDetailView.swift; sourceTree = "<group>"; };
                4E5A88F62A3B9E5B00072618 /* WithdrawAcceptDone.swift */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; 
path = WithdrawAcceptDone.swift; sourceTree = "<group>"; };
@@ -192,7 +317,6 @@
                4EB094D929896D030043A8A1 /* TalerWalletUITestsLaunchTests.swift 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.swift; path = TalerWalletUITestsLaunchTests.swift; sourceTree = 
"<group>"; };
                4EB094DA29896D030043A8A1 /* TalerUITests.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= TalerUITests.swift; sourceTree = "<group>"; };
                4EB094DB29896D030043A8A1 /* TalerWalletUITests.swift */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; 
path = TalerWalletUITests.swift; sourceTree = "<group>"; };
-               4EB094E129896FED0043A8A1 /* Info.plist */ = {isa = 
PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 
sourceTree = "<group>"; };
                4EB094EC298979620043A8A1 /* TalerWallet1App.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= TalerWallet1App.swift; sourceTree = "<group>"; };
                4EB094EF298979D30043A8A1 /* Assets.xcassets */ = {isa = 
PBXFileReference; lastKnownFileType = folder.assetcatalog; path = 
Assets.xcassets; sourceTree = "<group>"; };
                4EB094F329897A510043A8A1 /* Preview Assets.xcassets */ = {isa = 
PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview 
Assets.xcassets"; sourceTree = "<group>"; };
@@ -253,12 +377,24 @@
                4EEC157929F9427F00D46A03 /* QRSheet.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= QRSheet.swift; sourceTree = "<group>"; };
                4EF840A62A0B85F400EE0D47 /* CopyShare.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= CopyShare.swift; sourceTree = "<group>"; };
                AB710490285995B6008B04F0 /* taler-swift */ = {isa = 
PBXFileReference; lastKnownFileType = text; path = "taler-swift"; sourceTree = 
SOURCE_ROOT; };
-               D14AFD1D24D232B300C51073 /* GNU Taler.app */ = {isa = 
PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; 
path = "GNU Taler.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+               D14AFD1D24D232B300C51073 /* Taler_Wallet.app */ = {isa = 
PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; 
path = Taler_Wallet.app; sourceTree = BUILT_PRODUCTS_DIR; };
                D14AFD3324D232B500C51073 /* TalerTests.xctest */ = {isa = 
PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path 
= TalerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
                D14AFD3E24D232B500C51073 /* TalerUITests.xctest */ = {isa = 
PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path 
= TalerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+               4E3EAE762A990778009F1BE8 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               4E3EAE772A990778009F1BE8 /* AnyCodable in 
Frameworks */,
+                               4E3EAE782A990778009F1BE8 /* SymLog in 
Frameworks */,
+                               4E3EAE792A990778009F1BE8 /* 
FTalerWalletcore.framework in Frameworks */,
+                               4E3EAE7A2A990778009F1BE8 /* taler-swift in 
Frameworks */,
+                               4E3EAE7B2A990778009F1BE8 /* CodeScanner in 
Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                D14AFD1A24D232B300C51073 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
@@ -307,6 +443,26 @@
                        path = P2P_Sheets;
                        sourceTree = "<group>";
                };
+               4E3EAE992AA12467009F1BE8 /* Nunito */ = {
+                       isa = PBXGroup;
+                       children = (
+                               4E3EAE9A2AA12467009F1BE8 /* Nunito-Regular.ttf 
*/,
+                               4E3EAE9B2AA12467009F1BE8 /* Nunito-Bold.ttf */,
+                               4E3EAEA12AA12582009F1BE8 /* 
Nunito-BoldItalic.ttf */,
+                               4E3EAEA02AA12582009F1BE8 /* Nunito-Italic.ttf 
*/,
+                       );
+                       path = Nunito;
+                       sourceTree = "<group>";
+               };
+               4E3EAEA62AA12750009F1BE8 /* Fonts */ = {
+                       isa = PBXGroup;
+                       children = (
+                               4E8C171B2A6509BB005B2392 /* 
Atkinson-Hyperlegible */,
+                               4E3EAE992AA12467009F1BE8 /* Nunito */,
+                       );
+                       path = Fonts;
+                       sourceTree = "<group>";
+               };
                4E7CFD362A532C7A00CBAFF3 /* TestFlight */ = {
                        isa = PBXGroup;
                        children = (
@@ -319,12 +475,12 @@
                        isa = PBXGroup;
                        children = (
                                4E8C171C2A6509BB005B2392 /* 
Atkinson-Hyperlegible-Regular-102.otf */,
-                               4E8C171D2A6509BB005B2392 /* 
Atkinson-Hyperlegible-Italic-102.otf */,
                                4E8C171E2A6509BB005B2392 /* 
Atkinson-Hyperlegible-Bold-102.otf */,
                                4E8C171F2A6509BB005B2392 /* 
Atkinson-Hyperlegible-BoldItalic-102.otf */,
+                               4E8C171D2A6509BB005B2392 /* 
Atkinson-Hyperlegible-Italic-102.otf */,
                        );
                        path = "Atkinson-Hyperlegible";
-                       sourceTree = SOURCE_ROOT;
+                       sourceTree = "<group>";
                };
                4EB094EE298979840043A8A1 /* TalerWallet1 */ = {
                        isa = PBXGroup;
@@ -337,7 +493,7 @@
                                4EB0950C2989CB9A0043A8A1 /* Quickjs */,
                                4EB094EF298979D30043A8A1 /* Assets.xcassets */,
                                4E2254942A822B8100E41D29 /* Sounds */,
-                               4E8C171B2A6509BB005B2392 /* 
Atkinson-Hyperlegible */,
+                               4E3EAEA62AA12750009F1BE8 /* Fonts */,
                                4E363CBF2A24754200D7E98C /* Settings.bundle */,
                                4EB094F529897A9A0043A8A1 /* Preview Content */,
                        );
@@ -380,9 +536,10 @@
                                4E16E12229F3BB99008B9C86 /* 
CurrencyFormatter.swift */,
                                4EAD117529F672FA008EDD0B /* 
KeyboardResponder.swift */,
                                4E363CC12A2621C200D7E98C /* 
LocalizedAlertError.swift */,
-                               4E578E912A481D8600F21F1C /* playSound.swift */,
+                               4E578E912A481D8600F21F1C /* 
Controller+playSound.swift */,
                                4EB095062989CB7C0043A8A1 /* TalerDater.swift */,
                                4EB095072989CB7C0043A8A1 /* TalerStrings.swift 
*/,
+                               4E3EAE8B2AA0933C009F1BE8 /* Font+Taler.swift */,
                                4EB095082989CB7C0043A8A1 /* 
View+dismissTop.swift */,
                                4E3B4BC62A429F2A00CC88B8 /* 
View+Notification.swift */,
                                4E363CBB2A237E0900D7E98C /* URL+id+iban.swift 
*/,
@@ -582,8 +739,6 @@
                        children = (
                                4E7CFD362A532C7A00CBAFF3 /* TestFlight */,
                                4EB094EE298979840043A8A1 /* TalerWallet1 */,
-                               4EB094E129896FED0043A8A1 /* Info.plist */,
-                               4E3AE7EF29A7E8F40070BEC4 /* Taler 
Wallet.entitlements */,
                                AB710490285995B6008B04F0 /* taler-swift */,
                                D14AFD3624D232B500C51073 /* TalerTests */,
                                D14AFD4124D232B500C51073 /* TalerUITests */,
@@ -595,7 +750,8 @@
                D14AFD1E24D232B300C51073 /* Products */ = {
                        isa = PBXGroup;
                        children = (
-                               D14AFD1D24D232B300C51073 /* GNU Taler.app */,
+                4E3EAE892A990778009F1BE8 /* GNU_Taler.app */,
+                               D14AFD1D24D232B300C51073 /* Taler_Wallet.app */,
                                D14AFD3324D232B500C51073 /* TalerTests.xctest 
*/,
                                D14AFD3E24D232B500C51073 /* TalerUITests.xctest 
*/,
                        );
@@ -624,6 +780,30 @@
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
+               4E3EAE142A990778009F1BE8 /* GNU_Taler */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 4E3EAE862A990778009F1BE8 /* 
Build configuration list for PBXNativeTarget "GNU_Taler" */;
+                       buildPhases = (
+                               4E3EAE1C2A990778009F1BE8 /* Sources */,
+                               4E3EAE762A990778009F1BE8 /* Frameworks */,
+                               4E3EAE7C2A990778009F1BE8 /* CopyFiles */,
+                               4E3EAE7D2A990778009F1BE8 /* Resources */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = GNU_Taler;
+                       packageProductDependencies = (
+                               4E3EAE152A990778009F1BE8 /* taler-swift */,
+                               4E3EAE162A990778009F1BE8 /* AnyCodable */,
+                               4E3EAE182A990778009F1BE8 /* SymLog */,
+                               4E3EAE1A2A990778009F1BE8 /* CodeScanner */,
+                       );
+                       productName = Taler;
+                       productReference = 4E3EAE892A990778009F1BE8 /* 
GNU_Taler.app */;
+                       productType = "com.apple.product-type.application";
+               };
                D14AFD1C24D232B300C51073 /* Taler_Wallet */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = D14AFD4724D232B500C51073 /* 
Build configuration list for PBXNativeTarget "Taler_Wallet" */;
@@ -645,7 +825,7 @@
                                4EEC157529F8ECBF00D46A03 /* CodeScanner */,
                        );
                        productName = Taler;
-                       productReference = D14AFD1D24D232B300C51073 /* GNU 
Taler.app */;
+                       productReference = D14AFD1D24D232B300C51073 /* 
Taler_Wallet.app */;
                        productType = "com.apple.product-type.application";
                };
                D14AFD3224D232B500C51073 /* TalerTests */ = {
@@ -728,6 +908,7 @@
                        projectDirPath = "";
                        projectRoot = "";
                        targets = (
+                               4E3EAE142A990778009F1BE8 /* GNU_Taler */,
                                D14AFD1C24D232B300C51073 /* Taler_Wallet */,
                                D14AFD3224D232B500C51073 /* TalerTests */,
                                D14AFD3D24D232B500C51073 /* TalerUITests */,
@@ -736,17 +917,40 @@
 /* End PBXProject section */
 
 /* Begin PBXResourcesBuildPhase section */
+               4E3EAE7D2A990778009F1BE8 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               4E3EAE7E2A990778009F1BE8 /* Settings.bundle in 
Resources */,
+                               4E3EAE842A990778009F1BE8 /* Assets.xcassets in 
Resources */,
+                               4E3EAE7F2A990778009F1BE8 /* 
Atkinson-Hyperlegible-Regular-102.otf in Resources */,
+                               4E3EAE802A990778009F1BE8 /* 
Atkinson-Hyperlegible-Bold-102.otf in Resources */,
+                               4E3EAE812A990778009F1BE8 /* 
Atkinson-Hyperlegible-BoldItalic-102.otf in Resources */,
+                               4E3EAE832A990778009F1BE8 /* 
Atkinson-Hyperlegible-Italic-102.otf in Resources */,
+                               4E3EAE9C2AA12467009F1BE8 /* Nunito-Regular.ttf 
in Resources */,
+                               4E3EAE9E2AA12467009F1BE8 /* Nunito-Bold.ttf in 
Resources */,
+                               4E3EAEA42AA12582009F1BE8 /* 
Nunito-BoldItalic.ttf in Resources */,
+                               4E3EAEA22AA12582009F1BE8 /* Nunito-Italic.ttf 
in Resources */,
+                               4E3EAE822A990778009F1BE8 /* 
payment_received.m4a in Resources */,
+                               4E3EAE852A990778009F1BE8 /* payment_sent.m4a in 
Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                D14AFD1B24D232B300C51073 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
                                4E363CC02A24754200D7E98C /* Settings.bundle in 
Resources */,
+                               4EB094F0298979D30043A8A1 /* Assets.xcassets in 
Resources */,
                                4E8C17202A6509BB005B2392 /* 
Atkinson-Hyperlegible-Regular-102.otf in Resources */,
                                4E8C17222A6509BB005B2392 /* 
Atkinson-Hyperlegible-Bold-102.otf in Resources */,
                                4E8C17232A6509BB005B2392 /* 
Atkinson-Hyperlegible-BoldItalic-102.otf in Resources */,
-                               4E2254972A822B8100E41D29 /* 
payment_received.m4a in Resources */,
                                4E8C17212A6509BB005B2392 /* 
Atkinson-Hyperlegible-Italic-102.otf in Resources */,
-                               4EB094F0298979D30043A8A1 /* Assets.xcassets in 
Resources */,
+                               4E3EAE9D2AA12467009F1BE8 /* Nunito-Regular.ttf 
in Resources */,
+                               4E3EAE9F2AA12467009F1BE8 /* Nunito-Bold.ttf in 
Resources */,
+                               4E3EAEA52AA12582009F1BE8 /* 
Nunito-BoldItalic.ttf in Resources */,
+                               4E3EAEA32AA12582009F1BE8 /* Nunito-Italic.ttf 
in Resources */,
+                               4E2254972A822B8100E41D29 /* 
payment_received.m4a in Resources */,
                                4E2254982A822B8100E41D29 /* payment_sent.m4a in 
Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
@@ -768,6 +972,102 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
+               4E3EAE1C2A990778009F1BE8 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               4E3EAE1D2A990778009F1BE8 /* SelectDays.swift in 
Sources */,
+                               4E3EAE1E2A990778009F1BE8 /* AgePicker.swift in 
Sources */,
+                               4E3EAE1F2A990778009F1BE8 /* Controller.swift in 
Sources */,
+                               4E3EAE202A990778009F1BE8 /* MainView.swift in 
Sources */,
+                               4E3EAE212A990778009F1BE8 /* Buttons.swift in 
Sources */,
+                               4E3EAE222A990778009F1BE8 /* 
TransactionButton.swift in Sources */,
+                               4E3EAE232A990778009F1BE8 /* 
BalancesSectionView.swift in Sources */,
+                               4E3EAE242A990778009F1BE8 /* 
QRGeneratorView.swift in Sources */,
+                               4E3EAE252A990778009F1BE8 /* 
WithdrawAcceptDone.swift in Sources */,
+                               4E3EAE262A990778009F1BE8 /* Transaction.swift 
in Sources */,
+                               4E3EAE272A990778009F1BE8 /* WalletColors.swift 
in Sources */,
+                               4E3EAE282A990778009F1BE8 /* 
BalancesListView.swift in Sources */,
+                               4E3EAE292A990778009F1BE8 /* 
WalletBackendError.swift in Sources */,
+                               4E3EAE2A2A990778009F1BE8 /* 
PendingRowView.swift in Sources */,
+                               4E3EAE2B2A990778009F1BE8 /* LoadingView.swift 
in Sources */,
+                               4E3EAE8C2AA0933C009F1BE8 /* Font+Taler.swift in 
Sources */,
+                               4E3EAE2C2A990778009F1BE8 /* 
ManualWithdraw.swift in Sources */,
+                               4E3EAE2D2A990778009F1BE8 /* 
Model+Exchange.swift in Sources */,
+                               4E3EAE2E2A990778009F1BE8 /* 
QRCodeDetailView.swift in Sources */,
+                               4E3EAE2F2A990778009F1BE8 /* 
TransactionsEmptyView.swift in Sources */,
+                               4E3EAE302A990778009F1BE8 /* 
UncompletedRowView.swift in Sources */,
+                               4E3EAE312A990778009F1BE8 /* SendAmount.swift in 
Sources */,
+                               4E3EAE332A990778009F1BE8 /* 
EqualIconWidthDomain.swift in Sources */,
+                               4E3EAE342A990778009F1BE8 /* 
SuperScriptDigits.swift in Sources */,
+                               4E3EAE352A990778009F1BE8 /* P2pPayURIView.swift 
in Sources */,
+                               4E3EAE362A990778009F1BE8 /* Model+Payment.swift 
in Sources */,
+                               4E3EAE372A990778009F1BE8 /* SettingsView.swift 
in Sources */,
+                               4E3EAE382A990778009F1BE8 /* PaymentView.swift 
in Sources */,
+                               4E3EAE392A990778009F1BE8 /* 
WithdrawURIView.swift in Sources */,
+                               4E3EAE3A2A990778009F1BE8 /* CopyShare.swift in 
Sources */,
+                               4E3EAE3B2A990778009F1BE8 /* 
TalerWallet1App.swift in Sources */,
+                               4E3EAE3C2A990778009F1BE8 /* 
WithdrawTOSView.swift in Sources */,
+                               4E3EAE3D2A990778009F1BE8 /* Sheet.swift in 
Sources */,
+                               4E3EAE3E2A990778009F1BE8 /* ManualDetails.swift 
in Sources */,
+                               4E3EAE3F2A990778009F1BE8 /* 
View+dismissTop.swift in Sources */,
+                               4E3EAE402A990778009F1BE8 /* 
TransactionsListView.swift in Sources */,
+                               4E3EAE412A990778009F1BE8 /* 
WalletBackendRequest.swift in Sources */,
+                               4E3EAE422A990778009F1BE8 /* 
KeyboardResponder.swift in Sources */,
+                               4E3EAE432A990778009F1BE8 /* 
TransactionRowView.swift in Sources */,
+                               4E3EAE442A990778009F1BE8 /* 
PublicConstants.swift in Sources */,
+                               4E3EAE452A990778009F1BE8 /* SendDone.swift in 
Sources */,
+                               4E3EAE462A990778009F1BE8 /* 
TextFieldAlert.swift in Sources */,
+                               4E3EAE472A990778009F1BE8 /* 
QuiteSomeCoins.swift in Sources */,
+                               4E3EAE482A990778009F1BE8 /* 
PayTemplateView.swift in Sources */,
+                               4E3EAE492A990778009F1BE8 /* 
ManualWithdrawDone.swift in Sources */,
+                               4E3EAE4A2A990778009F1BE8 /* 
PaymentPurpose.swift in Sources */,
+                               4E3EAE4B2A990778009F1BE8 /* ShareSheet.swift in 
Sources */,
+                               4E3EAE4C2A990778009F1BE8 /* AmountView.swift in 
Sources */,
+                               4E3EAE4D2A990778009F1BE8 /* P2pAcceptDone.swift 
in Sources */,
+                               4E3EAE4E2A990778009F1BE8 /* 
AnyTransition+backslide.swift in Sources */,
+                               4E3EAE4F2A990778009F1BE8 /* 
BalanceRowButtons.swift in Sources */,
+                               4E3EAE502A990778009F1BE8 /* 
Model+Transactions.swift in Sources */,
+                               4E3EAE512A990778009F1BE8 /* 
Controller+playSound.swift in Sources */,
+                               4E3EAE522A990778009F1BE8 /* 
WalletEmptyView.swift in Sources */,
+                               4E3EAE532A990778009F1BE8 /* 
CurrencyFormatter.swift in Sources */,
+                               4E3EAE542A990778009F1BE8 /* TalerDater.swift in 
Sources */,
+                               4E3EAE552A990778009F1BE8 /* 
Model+Balances.swift in Sources */,
+                               4E3EAE562A990778009F1BE8 /* 
LocalizedAlertError.swift in Sources */,
+                               4E3EAE572A990778009F1BE8 /* quickjs.swift in 
Sources */,
+                               4E3EAE582A990778009F1BE8 /* CurrencyField.swift 
in Sources */,
+                               4E3EAE592A990778009F1BE8 /* 
Model+Settings.swift in Sources */,
+                               4E3EAE5A2A990778009F1BE8 /* ErrorView.swift in 
Sources */,
+                               4E3EAE5B2A990778009F1BE8 /* 
View+Notification.swift in Sources */,
+                               4E3EAE5C2A990778009F1BE8 /* Model+Pending.swift 
in Sources */,
+                               4E3EAE5D2A990778009F1BE8 /* 
ExchangeListView.swift in Sources */,
+                               4E3EAE5E2A990778009F1BE8 /* 
WithdrawProgressView.swift in Sources */,
+                               4E3EAE5F2A990778009F1BE8 /* QRSheet.swift in 
Sources */,
+                               4E3EAE602A990778009F1BE8 /* 
P2pReceiveURIView.swift in Sources */,
+                               4E3EAE612A990778009F1BE8 /* ListStyle.swift in 
Sources */,
+                               4E3EAE622A990778009F1BE8 /* 
TransactionDetailView.swift in Sources */,
+                               4E3EAE632A990778009F1BE8 /* WalletCore.swift in 
Sources */,
+                               4E3EAE642A990778009F1BE8 /* 
LaunchAnimationView.swift in Sources */,
+                               4E3EAE652A990778009F1BE8 /* SideBarView.swift 
in Sources */,
+                               4E3EAE662A990778009F1BE8 /* PendingOpView.swift 
in Sources */,
+                               4E3EAE672A990778009F1BE8 /* 
PendingOpsListView.swift in Sources */,
+                               4E3EAE682A990778009F1BE8 /* WalletModel.swift 
in Sources */,
+                               4E3EAE692A990778009F1BE8 /* URLSheet.swift in 
Sources */,
+                               4E3EAE6A2A990778009F1BE8 /* ThreeAmounts.swift 
in Sources */,
+                               4E3EAE6B2A990778009F1BE8 /* 
Model+Withdraw.swift in Sources */,
+                               4E3EAE6C2A990778009F1BE8 /* 
ExchangeSectionView.swift in Sources */,
+                               4E3EAE6D2A990778009F1BE8 /* SendPurpose.swift 
in Sources */,
+                               4E3EAE6E2A990778009F1BE8 /* Model+P2P.swift in 
Sources */,
+                               4E3EAE6F2A990778009F1BE8 /* TalerStrings.swift 
in Sources */,
+                               4E3EAE702A990778009F1BE8 /* 
CurrencyInputView.swift in Sources */,
+                               4E3EAE712A990778009F1BE8 /* URL+id+iban.swift 
in Sources */,
+                               4E3EAE722A990778009F1BE8 /* 
RequestPayment.swift in Sources */,
+                               4E3EAE732A990778009F1BE8 /* SettingsItem.swift 
in Sources */,
+                               4E3EAE742A990778009F1BE8 /* 
BalanceRowView.swift in Sources */,
+                               4E3EAE752A990778009F1BE8 /* DebugViewC.swift in 
Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                D14AFD1924D232B300C51073 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
@@ -787,6 +1087,7 @@
                                4EB095212989CBCB0043A8A1 /* 
WalletBackendError.swift in Sources */,
                                4EB0955E2989CBFE0043A8A1 /* 
PendingRowView.swift in Sources */,
                                4EB0956D2989CBFE0043A8A1 /* LoadingView.swift 
in Sources */,
+                               4E3EAE8D2AA0933C009F1BE8 /* Font+Taler.swift in 
Sources */,
                                4E50B3502A1BEE8000F9F01C /* 
ManualWithdraw.swift in Sources */,
                                4E3B4BC92A42BC4800CC88B8 /* 
Model+Exchange.swift in Sources */,
                                4E5A88F52A38A4FD00072618 /* 
QRCodeDetailView.swift in Sources */,
@@ -823,7 +1124,7 @@
                                4E363CBE2A23CB2100D7E98C /* 
AnyTransition+backslide.swift in Sources */,
                                4EB065442A4CD1A80039B91D /* 
BalanceRowButtons.swift in Sources */,
                                4EB095592989CBFE0043A8A1 /* 
Model+Transactions.swift in Sources */,
-                               4E578E922A481D8600F21F1C /* playSound.swift in 
Sources */,
+                               4E578E922A481D8600F21F1C /* 
Controller+playSound.swift in Sources */,
                                4EB0955F2989CBFE0043A8A1 /* 
WalletEmptyView.swift in Sources */,
                                4E16E12329F3BB99008B9C86 /* 
CurrencyFormatter.swift in Sources */,
                                4EB095092989CB7C0043A8A1 /* TalerDater.swift in 
Sources */,
@@ -898,6 +1199,85 @@
 /* End PBXTargetDependency section */
 
 /* Begin XCBuildConfiguration section */
+               4E3EAE872A990778009F1BE8 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               CLANG_ENABLE_MODULES = YES;
+                               CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 18;
+                               DEVELOPMENT_TEAM = GUDDQ9428Y;
+                               ENABLE_PREVIEWS = YES;
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_FILE = "$(TARGET_NAME) Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = "GNU Taler";
+                               INFOPLIST_KEY_LSApplicationCategoryType = 
"public.app-category.finance";
+                               INFOPLIST_KEY_NSCameraUsageDescription = "Scan 
QR Codes";
+                               INFOPLIST_KEY_NSHumanReadableCopyright = "© 
Taler-Systems.com";
+                               
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+                               INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+                               INFOPLIST_KEY_UISupportedInterfaceOrientations 
= UIInterfaceOrientationPortrait;
+                               
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = 
"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
+                               IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                               );
+                               MARKETING_VERSION = 0.9.3;
+                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-1";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE_SPECIFIER = "";
+                               SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
+                               SUPPORTS_MACCATALYST = NO;
+                               SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               TARGETED_DEVICE_FAMILY = 1;
+                               VALIDATE_WORKSPACE = YES;
+                       };
+                       name = Debug;
+               };
+               4E3EAE882A990778009F1BE8 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME 
= AccentColor;
+                               CLANG_ENABLE_MODULES = YES;
+                               CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 18;
+                               DEVELOPMENT_TEAM = GUDDQ9428Y;
+                               ENABLE_PREVIEWS = YES;
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_FILE = "$(TARGET_NAME) Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = "GNU Taler";
+                               INFOPLIST_KEY_LSApplicationCategoryType = 
"public.app-category.finance";
+                               INFOPLIST_KEY_NSCameraUsageDescription = "Scan 
QR Codes";
+                               INFOPLIST_KEY_NSHumanReadableCopyright = "© 
Taler-Systems.com";
+                               
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+                               INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+                               INFOPLIST_KEY_UISupportedInterfaceOrientations 
= UIInterfaceOrientationPortrait;
+                               
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = 
"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
+                               IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                               );
+                               MARKETING_VERSION = 0.9.3;
+                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-1";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE_SPECIFIER = "";
+                               SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
+                               SUPPORTS_MACCATALYST = NO;
+                               SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               TARGETED_DEVICE_FAMILY = 1;
+                               VALIDATE_WORKSPACE = YES;
+                       };
+                       name = Release;
+               };
                D14AFD4524D232B500C51073 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
@@ -1018,16 +1398,15 @@
                        buildSettings = {
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                                CLANG_ENABLE_MODULES = YES;
-                               CODE_SIGN_ENTITLEMENTS = "GNU 
Taler.entitlements";
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone 
Developer";
-                               CODE_SIGN_STYLE = Manual;
-                               CURRENT_PROJECT_VERSION = 17;
-                               DEVELOPMENT_TEAM = "";
-                               "DEVELOPMENT_TEAM[sdk=iphoneos*]" = GUDDQ9428Y;
+                               CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 18;
+                               DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
-                               INFOPLIST_FILE = Info.plist;
-                               INFOPLIST_KEY_CFBundleDisplayName = "GNU Taler";
+                               INFOPLIST_FILE = "$(TARGET_NAME) Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = "Taler 
Wallet";
                                INFOPLIST_KEY_LSApplicationCategoryType = 
"public.app-category.finance";
                                INFOPLIST_KEY_NSCameraUsageDescription = "Scan 
QR Codes";
                                INFOPLIST_KEY_NSHumanReadableCopyright = "© 
Taler-Systems.com";
@@ -1041,10 +1420,9 @@
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 0.9.3;
-                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-1";
-                               PRODUCT_NAME = "GNU Taler";
+                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-2";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
                                PROVISIONING_PROFILE_SPECIFIER = "";
-                               "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" 
= 230701iOS;
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1060,16 +1438,15 @@
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME 
= AccentColor;
                                CLANG_ENABLE_MODULES = YES;
-                               CODE_SIGN_ENTITLEMENTS = "GNU 
Taler.entitlements";
-                               "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone 
Distribution";
-                               CODE_SIGN_STYLE = Manual;
-                               CURRENT_PROJECT_VERSION = 17;
-                               DEVELOPMENT_TEAM = "";
-                               "DEVELOPMENT_TEAM[sdk=iphoneos*]" = GUDDQ9428Y;
+                               CODE_SIGN_ENTITLEMENTS = 
"$(TARGET_NAME).entitlements";
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 18;
+                               DEVELOPMENT_TEAM = GUDDQ9428Y;
                                ENABLE_PREVIEWS = YES;
                                GENERATE_INFOPLIST_FILE = YES;
-                               INFOPLIST_FILE = Info.plist;
-                               INFOPLIST_KEY_CFBundleDisplayName = "GNU Taler";
+                               INFOPLIST_FILE = "$(TARGET_NAME) Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = "Taler 
Wallet";
                                INFOPLIST_KEY_LSApplicationCategoryType = 
"public.app-category.finance";
                                INFOPLIST_KEY_NSCameraUsageDescription = "Scan 
QR Codes";
                                INFOPLIST_KEY_NSHumanReadableCopyright = "© 
Taler-Systems.com";
@@ -1083,10 +1460,9 @@
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 0.9.3;
-                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-1";
-                               PRODUCT_NAME = "GNU Taler";
+                               PRODUCT_BUNDLE_IDENTIFIER = 
"com.taler-systems.talerwallet-2";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
                                PROVISIONING_PROFILE_SPECIFIER = "";
-                               "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" 
= iOS_Distribution_230606;
                                SUPPORTED_PLATFORMS = "iphoneos 
iphonesimulator";
                                SUPPORTS_MACCATALYST = NO;
                                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1192,6 +1568,15 @@
 /* End XCBuildConfiguration section */
 
 /* Begin XCConfigurationList section */
+               4E3EAE862A990778009F1BE8 /* Build configuration list for 
PBXNativeTarget "GNU_Taler" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               4E3EAE872A990778009F1BE8 /* Debug */,
+                               4E3EAE882A990778009F1BE8 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                D14AFD1824D232B300C51073 /* Build configuration list for 
PBXProject "TalerWallet" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
@@ -1231,6 +1616,30 @@
 /* End XCConfigurationList section */
 
 /* Begin XCRemoteSwiftPackageReference section */
+               4E3EAE172A990778009F1BE8 /* XCRemoteSwiftPackageReference 
"AnyCodable" */ = {
+                       isa = XCRemoteSwiftPackageReference;
+                       repositoryURL = 
"https://github.com/Flight-School/AnyCodable";;
+                       requirement = {
+                               kind = upToNextMajorVersion;
+                               minimumVersion = 0.6.5;
+                       };
+               };
+               4E3EAE192A990778009F1BE8 /* XCRemoteSwiftPackageReference 
"SymLog" */ = {
+                       isa = XCRemoteSwiftPackageReference;
+                       repositoryURL = "https://github.com/Fesh-com/SymLog";;
+                       requirement = {
+                               kind = upToNextMajorVersion;
+                               minimumVersion = 0.1.0;
+                       };
+               };
+               4E3EAE1B2A990778009F1BE8 /* XCRemoteSwiftPackageReference 
"CodeScanner" */ = {
+                       isa = XCRemoteSwiftPackageReference;
+                       repositoryURL = 
"https://github.com/twostraws/CodeScanner";;
+                       requirement = {
+                               kind = upToNextMajorVersion;
+                               minimumVersion = 2.0.0;
+                       };
+               };
                4EB094FB29897D280043A8A1 /* XCRemoteSwiftPackageReference 
"SymLog" */ = {
                        isa = XCRemoteSwiftPackageReference;
                        repositoryURL = "https://github.com/Fesh-com/SymLog";;
@@ -1258,6 +1667,25 @@
 /* End XCRemoteSwiftPackageReference section */
 
 /* Begin XCSwiftPackageProductDependency section */
+               4E3EAE152A990778009F1BE8 /* taler-swift */ = {
+                       isa = XCSwiftPackageProductDependency;
+                       productName = "taler-swift";
+               };
+               4E3EAE162A990778009F1BE8 /* AnyCodable */ = {
+                       isa = XCSwiftPackageProductDependency;
+                       package = 4E3EAE172A990778009F1BE8 /* 
XCRemoteSwiftPackageReference "AnyCodable" */;
+                       productName = AnyCodable;
+               };
+               4E3EAE182A990778009F1BE8 /* SymLog */ = {
+                       isa = XCSwiftPackageProductDependency;
+                       package = 4E3EAE192A990778009F1BE8 /* 
XCRemoteSwiftPackageReference "SymLog" */;
+                       productName = SymLog;
+               };
+               4E3EAE1A2A990778009F1BE8 /* CodeScanner */ = {
+                       isa = XCSwiftPackageProductDependency;
+                       package = 4E3EAE1B2A990778009F1BE8 /* 
XCRemoteSwiftPackageReference "CodeScanner" */;
+                       productName = CodeScanner;
+               };
                4EB094FC29897D280043A8A1 /* SymLog */ = {
                        isa = XCSwiftPackageProductDependency;
                        package = 4EB094FB29897D280043A8A1 /* 
XCRemoteSwiftPackageReference "SymLog" */;
diff --git a/TalerWallet1/Backend/Transaction.swift 
b/TalerWallet1/Backend/Transaction.swift
index ffbdd38..7f2aac5 100644
--- a/TalerWallet1/Backend/Transaction.swift
+++ b/TalerWallet1/Backend/Transaction.swift
@@ -166,13 +166,13 @@ struct TransactionCommon: Decodable {
                                                   comment: "TransactionType")
             case .reward:         return String(localized: "Reward",
                                                   comment: "TransactionType")
-            case .peerPushDebit:  return String(localized: "P2P Send",
+            case .peerPushDebit:  return String(localized: "Send Money",
                                                   comment: "TransactionType, 
send coins to another wallet")
-            case .scanPushCredit: return String(localized: "P2P Receive",
+            case .scanPushCredit: return String(localized: "Receive Money",
                                                   comment: "TransactionType, 
scan to receive coins sent from another wallet")
-            case .peerPullCredit: return String(localized: "P2P Invoice",
+            case .peerPullCredit: return String(localized: "Request Money",    
 // Invoice?
                                                   comment: "TransactionType, 
send invoice to another wallet")
-            case .scanPullDebit:  return String(localized: "P2P Payment",
+            case .scanPullDebit:  return String(localized: "Pay Request",      
 // Pay Invoice is the same as Payment
                                                   comment: "TransactionType, 
scan invoice to pay to another wallet")
         }
     }
diff --git a/TalerWallet1/Controllers/Controller.swift 
b/TalerWallet1/Controllers/Controller.swift
index d2d3c30..0dbd42c 100644
--- a/TalerWallet1/Controllers/Controller.swift
+++ b/TalerWallet1/Controllers/Controller.swift
@@ -33,22 +33,29 @@ class Controller: ObservableObject {
 
     @Published var backendState: BackendState = .none       // only used for 
launch animation
     @AppStorage("playSounds") var playSounds: Int = 0       // extension 
mustn't define this, so it must be here
+    @AppStorage("talerFont") var talerFont: Int = 0         // extension 
mustn't define this, so it must be here
     let logger = Logger (subsystem: "net.taler.gnu", category: "Controller")
     let player = AVQueuePlayer()
 
     var messageForSheet: String? = nil
 
     init() {
+//        for family in UIFont.familyNames {
+//            print(family)
+//            for names in UIFont.fontNames(forFamilyName: family) {
+//                print("== \(names)")
+//            }
+//        }
         backendState = .instantiated
     }
 
     @MainActor
-    func initWalletCore(_ model: WalletModel)
+    func initWalletCore(_ model: WalletModel, sqlite3: Bool)
       async throws {
         if backendState == .instantiated {
             backendState = .initing
             do {
-                let versionInfo = try await model.initWalletCoreT()
+                let versionInfo = try await model.initWalletCoreT(sqlite3: 
sqlite3)
                 WalletCore.shared.versionInfo = versionInfo
                 backendState = .ready                       // dismiss the 
launch animation
             } catch {       // rethrows
diff --git a/TalerWallet1/Controllers/DebugViewC.swift 
b/TalerWallet1/Controllers/DebugViewC.swift
index 4cd365c..89209f9 100644
--- a/TalerWallet1/Controllers/DebugViewC.swift
+++ b/TalerWallet1/Controllers/DebugViewC.swift
@@ -49,17 +49,23 @@ public let VIEW_DEPOSIT = VIEW_WITHDRAWAL + 10              
        // 40 Deposi
 //public let VIEW_DEPOSIT_TOS                                       // 41 - 
user already accepted the ToS at withdrawal, invoice or receive
 public let VIEW_DEPOSIT_ACCEPT = VIEW_DEPOSIT + 2                   // 42
 
-// MARK: P2P Invoice (from Balances)
-// pull credit from another wallet ==> shows QR code to be scanned / link to 
be sent by mail or messenger
-public let VIEW_INVOICE_P2P = VIEW_DEPOSIT + 10                     // 50 
Invoice Amount
-public let VIEW_INVOICE_TOS = VIEW_INVOICE_P2P + 1                  // 51 
Invoice ToS
-public let VIEW_INVOICE_PURPOSE = VIEW_INVOICE_TOS + 1              // 52 
Invoice Purpose
-
 // MARK: P2P Send Coins (from Balances)
 // push debit to another wallet ==> shows QR code to be scanned / link to be 
sent by mail or messenger
-public let VIEW_SEND_P2P = VIEW_INVOICE_P2P + 10                    // 60 Send 
Coins
-//public let VIEW_SEND_TOS                                          // 61 - 
user already accepted the ToS at withdrawal, invoice or receive
-public let VIEW_SEND_PURPOSE = VIEW_SEND_P2P + 2                    // 62
+public let VIEW_SEND_P2P = VIEW_DEPOSIT + 10                        // 50 Send 
Coins
+//public let VIEW_SEND_TOS                                          // 51 - 
user already accepted the ToS at withdrawal, invoice or receive
+public let VIEW_SEND_PURPOSE = VIEW_SEND_P2P + 2                    // 52
+
+// MARK: P2P Private Receive (from Balances)
+// pull credit from another wallet ==> shows QR code to be scanned / link to 
be sent by mail or messenger
+public let VIEW_RECEIVE_P2P = VIEW_SEND_P2P + 10                    // 60 
Receive Amount
+public let VIEW_RECEIVE_TOS = VIEW_RECEIVE_P2P + 1                  // 61 
Receive ToS
+public let VIEW_RECEIVE_PURPOSE = VIEW_RECEIVE_TOS + 1              // 62 
Receive Purpose
+
+// MARK: P2P Business Invoice (from Balances)
+// pull credit from another wallet ==> shows QR code to be scanned / link to 
be sent by mail or messenger
+public let VIEW_INVOICE_P2P = VIEW_RECEIVE_P2P + 10                 // 70 
Invoice Amount
+public let VIEW_INVOICE_TOS = VIEW_INVOICE_P2P + 1                  // 71 
Invoice ToS
+public let VIEW_INVOICE_PURPOSE = VIEW_INVOICE_TOS + 1              // 72 
Invoice Purpose
 
 
 
diff --git a/TalerWallet1/Controllers/TalerWallet1App.swift 
b/TalerWallet1/Controllers/TalerWallet1App.swift
index bff3e7a..d46b6d3 100644
--- a/TalerWallet1/Controllers/TalerWallet1App.swift
+++ b/TalerWallet1/Controllers/TalerWallet1App.swift
@@ -27,6 +27,7 @@ struct TalerWallet1App: App {
     private let model = WalletModel.shared
     private let debugViewC = DebugViewC.shared
     let logger = Logger (subsystem: "net.taler.gnu", category: "Main App")
+    let sqlite3 = true                                                         
 // true = SQLITE3, false = JSON
 
     func scheduleAppRefresh() {
         let request = BGAppRefreshTaskRequest(identifier: 
"net.taler.gnu.refresh")
@@ -45,7 +46,7 @@ struct TalerWallet1App: App {
                     /// we handle them in .onOpenURL in MainView.swift
                 .handlesExternalEvents(preferring: ["*"], allowing: ["*"])
                 .task {
-                    try! await controller.initWalletCore(model)     // will 
(and should) crash on failure
+                    try! await controller.initWalletCore(model, sqlite3: 
sqlite3)     // will (and should) crash on failure
                 }
                 .onReceive(NotificationCenter.default.publisher(for: 
UIApplication.didBecomeActiveNotification, object: nil)) { _ in
                     logger.log("❗️App Did Become Active")
diff --git a/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Bold-102.otf 
b/TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Bold-102.otf
similarity index 100%
rename from Atkinson-Hyperlegible/Atkinson-Hyperlegible-Bold-102.otf
rename to 
TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Bold-102.otf
diff --git a/Atkinson-Hyperlegible/Atkinson-Hyperlegible-BoldItalic-102.otf 
b/TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-BoldItalic-102.otf
similarity index 100%
rename from Atkinson-Hyperlegible/Atkinson-Hyperlegible-BoldItalic-102.otf
rename to 
TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-BoldItalic-102.otf
diff --git 
a/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Font-License-2020-1104.pdf 
b/TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Font-License-2020-1104.pdf
similarity index 100%
rename from 
Atkinson-Hyperlegible/Atkinson-Hyperlegible-Font-License-2020-1104.pdf
rename to 
TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Font-License-2020-1104.pdf
diff --git a/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Italic-102.otf 
b/TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Italic-102.otf
similarity index 100%
rename from Atkinson-Hyperlegible/Atkinson-Hyperlegible-Italic-102.otf
rename to 
TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Italic-102.otf
diff --git a/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Regular-102.otf 
b/TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Regular-102.otf
similarity index 100%
rename from Atkinson-Hyperlegible/Atkinson-Hyperlegible-Regular-102.otf
rename to 
TalerWallet1/Fonts/Atkinson-Hyperlegible/Atkinson-Hyperlegible-Regular-102.otf
diff --git a/TalerWallet1/Fonts/Nunito/Nunito-Bold.ttf 
b/TalerWallet1/Fonts/Nunito/Nunito-Bold.ttf
new file mode 100644
index 0000000..14be6b7
Binary files /dev/null and b/TalerWallet1/Fonts/Nunito/Nunito-Bold.ttf differ
diff --git a/TalerWallet1/Fonts/Nunito/Nunito-BoldItalic.ttf 
b/TalerWallet1/Fonts/Nunito/Nunito-BoldItalic.ttf
new file mode 100644
index 0000000..ed63eb5
Binary files /dev/null and b/TalerWallet1/Fonts/Nunito/Nunito-BoldItalic.ttf 
differ
diff --git a/TalerWallet1/Fonts/Nunito/Nunito-Italic.ttf 
b/TalerWallet1/Fonts/Nunito/Nunito-Italic.ttf
new file mode 100644
index 0000000..5c906d4
Binary files /dev/null and b/TalerWallet1/Fonts/Nunito/Nunito-Italic.ttf differ
diff --git a/TalerWallet1/Fonts/Nunito/Nunito-Regular.ttf 
b/TalerWallet1/Fonts/Nunito/Nunito-Regular.ttf
new file mode 100644
index 0000000..dfd0fcb
Binary files /dev/null and b/TalerWallet1/Fonts/Nunito/Nunito-Regular.ttf differ
diff --git a/TalerWallet1/Fonts/Nunito/OFL.txt 
b/TalerWallet1/Fonts/Nunito/OFL.txt
new file mode 100644
index 0000000..9a43a3a
--- /dev/null
+++ b/TalerWallet1/Fonts/Nunito/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2014 The Nunito Project Authors 
(https://github.com/googlefonts/nunito)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/TalerWallet1/Helper/playSound.swift 
b/TalerWallet1/Helper/Controller+playSound.swift
similarity index 96%
rename from TalerWallet1/Helper/playSound.swift
rename to TalerWallet1/Helper/Controller+playSound.swift
index 14f4077..31aca38 100644
--- a/TalerWallet1/Helper/playSound.swift
+++ b/TalerWallet1/Helper/Controller+playSound.swift
@@ -7,6 +7,7 @@ import AVFoundation
 
 extension Controller {
 
+    /// 0 = failure, 1 = received, 2 = sent
     func playSound(_ number: Int) {
         var soundID: SystemSoundID = 0
         if number > 9 {
diff --git a/TalerWallet1/Helper/CurrencyFormatter.swift 
b/TalerWallet1/Helper/CurrencyFormatter.swift
index 42f391b..b997731 100644
--- a/TalerWallet1/Helper/CurrencyFormatter.swift
+++ b/TalerWallet1/Helper/CurrencyFormatter.swift
@@ -6,19 +6,22 @@ import Foundation
 import taler_swift
 
 public class CurrencyFormatter: NumberFormatter {
-    public static var shared = CurrencyFormatter()
+    public static let shared = CurrencyFormatter()
 
-    private override convenience init() {
-        self.init(fractionDigits: 2)
-    }
-
-    public init(fractionDigits: Int) {
+    public override init() {
         super.init()
-        self.numberStyle = .decimal // currency could be changed by user
-        self.minimumFractionDigits = fractionDigits
-        self.maximumFractionDigits = fractionDigits
-        self.usesGroupingSeparator = true
         self.locale = Locale.current
+        self.numberStyle = .currency            // currencyISOCode, 
currencyPlural, (currencyAccounting)
+        self.numberStyle = .currencyISOCode
+        self.numberStyle = .spellOut
+
+//        self.currencyCode = code              // EUR, USD, JPY, GBP
+//        self.minimumFractionDigits = fractionDigits
+//        self.maximumFractionDigits = fractionDigits
+//        self.groupingSize = 3                 // thousands
+//        self.groupingSeparator = ","
+//        self.usesGroupingSeparator = true
+//        self.decimalSeparator = "."
     }
 
     required init?(coder aDecoder: NSCoder) {
diff --git a/TalerWallet1/Helper/Font+Taler.swift 
b/TalerWallet1/Helper/Font+Taler.swift
new file mode 100644
index 0000000..bc0511a
--- /dev/null
+++ b/TalerWallet1/Helper/Font+Taler.swift
@@ -0,0 +1,117 @@
+/*
+ * This file is part of GNU Taler, ©2022-23 Taler Systems S.A.
+ * See LICENSE.md
+ */
+import SwiftUI
+
+// Use enums for multiple font types and functions for the set custom font.
+
+fileprivate let ATKINSON   = "AtkinsonHyperlegible-"
+fileprivate let NUNITO     = "Nunito-"
+
+fileprivate let REGULAR    = "Regular"
+fileprivate let BOLD       = "Bold"
+fileprivate let BOLDITALIC = "BoldItalic"
+fileprivate let ITALIC     = "Italic"
+
+extension Font {
+    enum TalerFont {
+        case regular
+        case bold
+        case boldItalic
+        case italic
+        case custom(String)
+
+        var value: String {
+            switch self {
+                case .regular: return REGULAR
+                case .bold: return BOLD
+                case .boldItalic: return BOLDITALIC
+                case .italic: return ITALIC
+
+                case .custom(let name):
+                    return name
+            }
+        }
+    }
+
+    static func talerFont(_ type: TalerFont, size: CGFloat = 17) -> Font {
+        return .custom(type.value, size: size)
+    }
+
+    static func talerFontName(_ index: Int) -> String {
+        if index == 1 {
+            return ATKINSON
+        } else {
+            return NUNITO
+        }
+    }
+
+    static var talerLargeTitle: Font {
+        Controller.shared.talerFont == 0 ? .largeTitle :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 38, relativeTo: .largeTitle)
+    } // 34 -> 38
+    static var talerTitle: Font {
+        Controller.shared.talerFont == 0 ? .title :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 31, relativeTo: .title)
+    } // 28 -> 31
+    static var talerTitle2: Font {
+        Controller.shared.talerFont == 0 ? .title2 :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 25, relativeTo: .title2)
+    } // 22 -> 25
+    static var talerTitle3: Font {
+        Controller.shared.talerFont == 0 ? .title3 :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 23, relativeTo: .title3)
+    } // 20 -> 23
+    static var talerHeadline: Font {
+        Controller.shared.talerFont == 0 ? .headline :
+            .custom(talerFontName(Controller.shared.talerFont) + BOLD, size: 
19, relativeTo: .headline)
+    } // 17 bold -> 19 bold
+    static var talerBody: Font {
+        Controller.shared.talerFont == 0 ? .body :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 19, relativeTo: .body)
+    } // 17 -> 19
+    static var talerCallout: Font {
+        Controller.shared.talerFont == 0 ? .callout :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 18, relativeTo: .callout)
+    } // 16 -> 18
+    static var talerSubheadline: Font {
+        Controller.shared.talerFont == 0 ? .subheadline :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 17, relativeTo: .subheadline)
+    } // 15 -> 17
+    static var talerFootnote: Font {
+        Controller.shared.talerFont == 0 ? .footnote :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 15, relativeTo: .footnote)
+    } // 13 -> 15
+    static var talerCaption: Font {
+        Controller.shared.talerFont == 0 ? .caption :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 13, relativeTo: .caption)
+    } // 12 -> 13
+    static var talerCaption2: Font {
+        Controller.shared.talerFont == 0 ? .caption2 :
+            .custom(talerFontName(Controller.shared.talerFont) + REGULAR, 
size: 12, relativeTo: .caption2)
+    } // 11 -> 12
+}
+
+struct ContentViewFonts: View {
+    var body: some View {
+        VStack {
+            Text("Text demo")
+                .font(.talerFont(.regular))
+            Text("Text demo")
+                .font(.talerFont(.italic))
+            Text("Text demo")
+                .font(.talerFont(.bold))
+            Text("Text demo")
+                .font(.talerFont(.boldItalic))
+
+            Text("Text demo")
+                .font(.talerBody)
+
+        }
+    }
+}
+
+#Preview("Font View") {
+    ContentViewFonts()
+}
diff --git a/TalerWallet1/Model/Model+Exchange.swift 
b/TalerWallet1/Model/Model+Exchange.swift
index 434311d..f52ee75 100644
--- a/TalerWallet1/Model/Model+Exchange.swift
+++ b/TalerWallet1/Model/Model+Exchange.swift
@@ -78,12 +78,6 @@ fileprivate struct AddExchange: 
WalletBackendFormattedRequest {
 }
 
 /// A request to get info about a currency
-struct ScopedCurrencyInfo: Decodable {
-    var decimalSeparator: String
-    var numFractionalDigits: Int        // 0 Yen, 2 €,$, 3 arabic
-    var numTinyDigits: Int              // SuperScriptDigits
-    var isCurrencyNameLeading: Bool
-}
 
 fileprivate struct GetScopedCurrencyInfo: WalletBackendFormattedRequest {
     typealias Response = ScopedCurrencyInfo
diff --git a/TalerWallet1/Model/Model+P2P.swift 
b/TalerWallet1/Model/Model+P2P.swift
index a671673..3cafc8a 100644
--- a/TalerWallet1/Model/Model+P2P.swift
+++ b/TalerWallet1/Model/Model+P2P.swift
@@ -99,7 +99,7 @@ extension WalletModel {
     }
 } // initiatePeerPushDebitM
 // MARK: - PeerPullCredit
-/// Check fees before sending an invoice to another wallet
+/// Check fees before sending a request(invoice) to another wallet
 struct CheckPeerPullCreditResponse: Codable {
     let scopeInfo: ScopeInfo?
     let exchangeBaseUrl: String?
@@ -131,7 +131,7 @@ extension WalletModel {
     }
 } // checkPeerPullCreditM
 // - - - - - -
-/// Initiate an outgoing peer pull payment, send an invoice
+/// Initiate an outgoing peer pull payment, send a request(invoice)
 struct InitiatePeerPullCreditResponse: Codable {
     let talerUri: String
     let transactionId: String
@@ -209,7 +209,7 @@ extension WalletModel {
     }
 } // acceptPeerPushCreditM
 // MARK: - PeerPullDebit
-/// Prepare an incoming peer push invoice, pay coins
+/// Prepare an incoming peer push request(invoice), pay coins
 struct PreparePeerPullDebitResponse: Codable {
     let contractTerms: PeerContractTerms
     let amountRaw: Amount
@@ -237,7 +237,7 @@ extension WalletModel {
     }
 } // preparePeerPullDebitM
 // - - - - - -
-/// Confirm incoming peer push invoice and pay
+/// Confirm incoming peer push request(invoice) and pay
 fileprivate struct ConfirmPeerPullDebit: WalletBackendFormattedRequest {
     struct Response: Decodable {}   // no result - getting no error back means 
success
     func operation() -> String { return "confirmPeerPullDebit" }
diff --git a/TalerWallet1/Model/Model+Payment.swift 
b/TalerWallet1/Model/Model+Payment.swift
index 88872e2..b183d36 100644
--- a/TalerWallet1/Model/Model+Payment.swift
+++ b/TalerWallet1/Model/Model+Payment.swift
@@ -42,7 +42,7 @@ struct MerchantContractTerms: Codable {
     let wireFeeAmortization: Int?       // Share of the wire fee that must be 
settled with one payment
     let maxWireFee: Amount?             // Maximum wire fee that the merchant 
agrees to pay for
     let minimumAge: Int?
-    let extra: Extra                    // Extra data, interpreted by the 
mechant only
+//    let extra: Extra?                   // Extra data, interpreted by the 
mechant only
 //    let auditors: [Auditor]?
 
     enum CodingKeys: String, CodingKey {
@@ -73,7 +73,7 @@ struct MerchantContractTerms: Codable {
         case wireFeeAmortization = "wire_fee_amortization"
         case maxWireFee = "max_wire_fee"
         case minimumAge = "minimum_age"
-        case extra
+//        case extra
 //        case auditors
     }
 }
diff --git a/TalerWallet1/Model/Model+Settings.swift 
b/TalerWallet1/Model/Model+Settings.swift
index fb9a855..c34a3fa 100644
--- a/TalerWallet1/Model/Model+Settings.swift
+++ b/TalerWallet1/Model/Model+Settings.swift
@@ -8,7 +8,8 @@ import SymLog
 fileprivate let ASYNCDELAY: UInt = 0   //set e.g to 6 or 9 seconds for 
debugging
 
 fileprivate let APIBASEURL  = "/demobanks/default/access-api/"
-fileprivate let MERCHANTAUTHTOKEN = "secret-token:sandbox"
+//fileprivate let MERCHANTAUTHTOKEN = "secret-token:sandbox"
+fileprivate let MERCHANTAUTHTOKEN = "secret-token:secret"
 
 // MARK: -
 /// A request to add a test balance to the wallet.
diff --git a/TalerWallet1/Model/WalletModel.swift 
b/TalerWallet1/Model/WalletModel.swift
index d5dc714..eea87e4 100644
--- a/TalerWallet1/Model/WalletModel.swift
+++ b/TalerWallet1/Model/WalletModel.swift
@@ -101,25 +101,45 @@ fileprivate struct InitRequest: 
WalletBackendFormattedRequest {
 
 extension WalletModel {
     /// initalize Wallet-Core. Will do networking
-    func initWalletCoreT() async throws -> VersionInfo {
+    func initWalletCoreT(sqlite3: Bool) async throws -> VersionInfo {
                     // T for any Thread
-        let docPath = try docPath()
+        let docPath = try docPath(sqlite3: sqlite3)
         let request = InitRequest(persistentStoragePath: docPath)
         let response = try await sendRequest(request, 0)    // no Delay
         return response.versionInfo
     }
 
-    private func docPath () throws -> String {
-        let documentUrls = FileManager.default.urls(for: .documentDirectory, 
in: .userDomainMask)
-        if (documentUrls.count > 0) {
-            var storageDir = documentUrls[0]
-            storageDir.appendPathComponent(DATABASE, isDirectory: false)
-            storageDir.appendPathExtension("json")
-            let docPath = storageDir.path
+    private func docPath (sqlite3: Bool) throws -> String {
+        if let documentsUrl = FileManager.default.urls(for: 
.documentDirectory, in: .userDomainMask).first {
+            let documentUrl = documentsUrl.appendingPathComponent(DATABASE, 
isDirectory: false)
+                                          .appendingPathExtension(sqlite3 ? 
"sqlite3" : "json")
+            let docPath = documentUrl.path
             logger.debug("\(docPath)")
             return docPath
         } else {    // should never happen
-            logger.error("documentURLs empty")
+            logger.error("No documentDirectory")
+            throw WalletBackendError.initializationError
+        }
+    }
+
+    private func cachePath () throws -> String {
+        let fileManager = FileManager.default
+        if let cachesURL = fileManager.urls(for: .cachesDirectory, in: 
.userDomainMask).first {
+            let cacheURL = cachesURL.appendingPathComponent("cache.json")
+            let cachePath = cacheURL.path
+            logger.debug("\(cachePath)")
+
+            if !fileManager.fileExists(atPath: cachePath) {
+                let contents = Data()       /// Initialize an empty `Data`.
+                fileManager.createFile(atPath: cachePath, contents: contents)
+                print("File \(cachePath) created")
+            } else {
+                print("File \(cachePath) already exists")
+            }
+
+            return cachePath
+        } else {    // should never happen
+            logger.error("No cachesDirectory")
             throw WalletBackendError.initializationError
         }
     }
diff --git a/TalerWallet1/Views/Balances/BalancesSectionView.swift 
b/TalerWallet1/Views/Balances/BalancesSectionView.swift
index bc93f93..6423dbe 100644
--- a/TalerWallet1/Views/Balances/BalancesSectionView.swift
+++ b/TalerWallet1/Views/Balances/BalancesSectionView.swift
@@ -200,23 +200,23 @@ fileprivate struct NavigationLinksView : View {
             NavigationLink(destination: LazyView {
                 SendAmount(amountAvailable: balance.available,
                            centsToTransfer: $centsToTransfer,
-                           summary: $summary)
+                                   summary: $summary)
             }, tag: 1, selection: $buttonSelected
             ) { EmptyView() }.frame(width: 0).opacity(0).hidden()           // 
SendAmount
 
             NavigationLink(destination: LazyView {
                 RequestPayment(scopeInfo: balance.scopeInfo,
-                               centsToTransfer: $centsToTransfer,
-                               summary: $summary)
+                         centsToTransfer: $centsToTransfer,
+                                 summary: $summary)
             }, tag: 2, selection: $buttonSelected
             ) { EmptyView() }.frame(width: 0).opacity(0).hidden()           // 
RequestPayment
 
             NavigationLink(destination: LazyView {
                 TransactionsListView(navTitle: String(localized: 
"Transactions"), currency: currency,
-                                     transactions: completedTransactions,
-                                     showUpDown: true,
-                                     reloadAllAction: reloadAllAction,
-                                     reloadOneAction: reloadOneAction)
+                                 transactions: completedTransactions,
+                                   showUpDown: true,
+                              reloadAllAction: reloadAllAction,
+                              reloadOneAction: reloadOneAction)
             }, tag: 3, selection: $buttonSelected
             ) { EmptyView() }.frame(width: 0).opacity(0).hidden()           // 
TransactionsListView
 
diff --git a/TalerWallet1/Views/HelperViews/AmountView.swift 
b/TalerWallet1/Views/HelperViews/AmountView.swift
index ceaa457..8702ac5 100644
--- a/TalerWallet1/Views/HelperViews/AmountView.swift
+++ b/TalerWallet1/Views/HelperViews/AmountView.swift
@@ -13,14 +13,16 @@ struct AmountView: View {
     var body: some View {
         VStack(alignment: .leading) {
             Text(title)
+                .fixedSize(horizontal: false, vertical: true)       // wrap in 
scrollview
                 .multilineTextAlignment(.leading)
                 .font(.body)
             HStack {
                 Spacer()
                 Text(value)
+                    .fixedSize(horizontal: false, vertical: true)   // wrap in 
scrollview
                     .multilineTextAlignment(.center)
                     .font(large ? .title : .title2)
-//                    .fontWeight(large ? .medium : .regular)  // 
@available(iOS 16.0, *)
+//                    .fontWeight(large ? .medium : .regular)       // 
@available(iOS 16.0, *)
                     .foregroundColor(color)
                     .monospacedDigit()
                 Spacer()
diff --git a/TalerWallet1/Views/HelperViews/CurrencyField.swift 
b/TalerWallet1/Views/HelperViews/CurrencyField.swift
index 8f2e525..91cb70a 100644
--- a/TalerWallet1/Views/HelperViews/CurrencyField.swift
+++ b/TalerWallet1/Views/HelperViews/CurrencyField.swift
@@ -65,9 +65,10 @@ public struct CurrencyField: View {
             // Set as priority so CurrencyInputField size doesn't affect parent
             Text(label)
                 .layoutPriority(1)
-                
+
             // Input text field to handle UI
             currencyInputField
+//                .textFieldStyle(.roundedBorder)
         }
     }
 }
diff --git a/TalerWallet1/Views/HelperViews/CurrencyInputView.swift 
b/TalerWallet1/Views/HelperViews/CurrencyInputView.swift
index e6f0d38..e4405b3 100644
--- a/TalerWallet1/Views/HelperViews/CurrencyInputView.swift
+++ b/TalerWallet1/Views/HelperViews/CurrencyInputView.swift
@@ -5,7 +5,6 @@
 //  Created by Marc Stibane on 2023-06-04.
 //  Copyright © 2023 Taler. All rights reserved.
 //
-
 import SwiftUI
 
 struct CurrencyInputView: View {
@@ -22,8 +21,8 @@ struct CurrencyInputView: View {
                 .frame(maxWidth: .infinity, alignment: .trailing)
                 .foregroundColor(WalletColors().fieldForeground)     // text 
color
                 .background(WalletColors().fieldBackground)
-                .font(.title)
-                .border(.primary)
+                .font(.title2)
+                .textFieldStyle(.roundedBorder)
         }.onAppear {   // make CurrencyField show the keyboard after 0.4 
seconds
             if hasBeenShown {
                 print("❗️Yikes: CurrencyInputView hasBeenShown")
@@ -39,6 +38,7 @@ struct CurrencyInputView: View {
         }
     }
 }
+// MARK: -
 #if DEBUG
 fileprivate struct BindingViewContainer : View {
     @State var centsToTransfer: UInt64 = 0
diff --git a/TalerWallet1/Views/Payment/PaymentView.swift 
b/TalerWallet1/Views/Payment/PaymentView.swift
index 27db640..6b6bc0f 100644
--- a/TalerWallet1/Views/Payment/PaymentView.swift
+++ b/TalerWallet1/Views/Payment/PaymentView.swift
@@ -135,8 +135,8 @@ struct PaymentURIView_Previews: PreviewProvider {
                                             fulfillmentMessageI18n: nil,
                                           wireFeeAmortization: 0,
                                           maxWireFee: try! Amount(fromString: 
LONGCURRENCY + ":0.2"),
-                                            minimumAge: nil,
-                                          extra: extra
+                                          minimumAge: nil
+//                                          extra: extra,
 //                                          auditors: [],
                                   )
         let details = PreparePayResult(
diff --git a/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift 
b/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift
index eb4a054..766aa6d 100644
--- a/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift
+++ b/TalerWallet1/Views/Peer2peer/PaymentPurpose.swift
@@ -42,7 +42,7 @@ struct PaymentPurpose: View {
                     .font(.title)
                     .foregroundColor(WalletColors().fieldForeground)     // 
text color
                     .background(WalletColors().fieldBackground)
-                    .border(.primary)
+                    .textFieldStyle(.roundedBorder)
                     .focused($isFocused)
                     .onAppear {
                         DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
@@ -69,7 +69,7 @@ struct PaymentPurpose: View {
                             amountToReceive: amount,
                             summary: summary, expireDays: expireDays)
                 }) {
-                    Text("Invoice \(label) \(scopeInfo.currency)")
+                    Text("Request \(label) \(scopeInfo.currency)")
                         .font(buttonFont)
                 }
                 .buttonStyle(TalerButtonStyle(type: .prominent))
@@ -80,10 +80,10 @@ struct PaymentPurpose: View {
             .frame(maxWidth: .infinity, alignment: .leading)
             .padding(.horizontal)
         }
-        .navigationTitle("Invoice")
+        .navigationTitle("Request")
         .background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
         .onAppear {
-            DebugViewC.shared.setViewID(VIEW_INVOICE_PURPOSE)
+            DebugViewC.shared.setViewID(VIEW_RECEIVE_PURPOSE)
             print("❗️ PaymentPurpose onAppear")
         }
         .onDisappear {
diff --git a/TalerWallet1/Views/Peer2peer/RequestPayment.swift 
b/TalerWallet1/Views/Peer2peer/RequestPayment.swift
index 18ee298..76da5d9 100644
--- a/TalerWallet1/Views/Peer2peer/RequestPayment.swift
+++ b/TalerWallet1/Views/Peer2peer/RequestPayment.swift
@@ -25,12 +25,12 @@ struct RequestPayment: View {
         let _ = symLog.vlog()       // just to get the # to compare it with 
.onAppear & onDisappear
 #endif
         let currency = scopeInfo.currency
-        let navTitle = String(localized: "Request \(currency)", comment: 
"Request currency, Dialog Title")
+        let navTitle = String(localized: "Request Money", comment: "Dialog 
Title")
         let currencyField = CurrencyField(value: $centsToTransfer, currency: 
currency)
 
         ScrollView { VStack {
             CurrencyInputView(currencyField: currencyField,
-                              title: String(localized: "Amount to receive:"))
+                              title: String(localized: "Amount to request:"))
 
             let someCoins = SomeCoins(details: peerPullCheck)
             QuiteSomeCoins(someCoins: someCoins, shouldShowFee: true,
@@ -47,7 +47,8 @@ struct RequestPayment: View {
                                   expireDays: $expireDays)
 //                        { deactivateAction() }
                 }) {
-                    Text("Create invoice")
+                    let amount = Amount.amountFromCents(currency, 
centsToTransfer)
+                    Text("Request \(amount.readableDescription)")
                 }
                 .buttonStyle(TalerButtonStyle(type: .prominent))
                 .disabled(disabled)
@@ -59,7 +60,7 @@ struct RequestPayment: View {
         .background(WalletColors().backgroundColor.edgesIgnoringSafeArea(.all))
         .navigationTitle(navTitle)
         .onAppear {   // make CurrencyField show the keyboard
-            DebugViewC.shared.setViewID(VIEW_INVOICE_P2P)
+            DebugViewC.shared.setViewID(VIEW_RECEIVE_P2P)
             symLog.log("❗️Yikes \(navTitle) onAppear")
         }
         .onDisappear {
diff --git a/TalerWallet1/Views/Peer2peer/SendDone.swift 
b/TalerWallet1/Views/Peer2peer/SendDone.swift
index 3abc1dd..0830374 100644
--- a/TalerWallet1/Views/Peer2peer/SendDone.swift
+++ b/TalerWallet1/Views/Peer2peer/SendDone.swift
@@ -6,7 +6,7 @@ import SwiftUI
 import taler_swift
 import SymLog
 
-// Called when initiating a P2P transaction (Send coins or Send Invoice)
+// Called when initiating a P2P transaction: Send coins or Send 
Request(Invoice)
 struct SendDone: View {
     private let symLog = SymLogV()
     let navTitle = String(localized: "P2P Ready")
diff --git a/TalerWallet1/Views/Peer2peer/SendPurpose.swift 
b/TalerWallet1/Views/Peer2peer/SendPurpose.swift
index 40f5ef1..49086df 100644
--- a/TalerWallet1/Views/Peer2peer/SendPurpose.swift
+++ b/TalerWallet1/Views/Peer2peer/SendPurpose.swift
@@ -38,12 +38,12 @@ struct SendPurpose: View {
                     .font(.title2)
 
                 if #available(iOS 16.0, *) {
-                    TextField("Purpose", text: $summary)
+                    TextField("Purpose", text: $summary, axis: .vertical)
                         .font(.title2)
                         .lineLimit(2...)
                         .foregroundColor(WalletColors().fieldForeground)     
// text color
                         .background(WalletColors().fieldBackground)
-                        .border(.primary)
+                        .textFieldStyle(.roundedBorder)
                         .focused($isFocused)
                         .onAppear {
                             DispatchQueue.main.asyncAfter(deadline: .now() + 
0.4) {
@@ -56,7 +56,7 @@ struct SendPurpose: View {
 //                        .lineLimit(2...5)   // lineLimit' is only available 
in iOS 16.0 or newer
                         .foregroundColor(WalletColors().fieldForeground)     
// text color
                         .background(WalletColors().fieldBackground)
-                        .border(.primary)
+                        .textFieldStyle(.roundedBorder)
                         .focused($isFocused)
                         .onAppear {
                             DispatchQueue.main.asyncAfter(deadline: .now() + 
0.4) {
@@ -93,6 +93,7 @@ struct SendPurpose: View {
 
                 Spacer()
             }
+            .textFieldStyle(.roundedBorder)
             .frame(maxWidth: .infinity, alignment: .leading)
             .padding(.horizontal)
         }
diff --git a/TalerWallet1/Views/Settings/SettingsItem.swift 
b/TalerWallet1/Views/Settings/SettingsItem.swift
index df26904..919ea48 100644
--- a/TalerWallet1/Views/Settings/SettingsItem.swift
+++ b/TalerWallet1/Views/Settings/SettingsItem.swift
@@ -20,12 +20,12 @@ struct SettingsItem<Content: View>: View {
             VStack {
                 Text(name)
                     .frame(maxWidth: .infinity, alignment: .leading)
-                    .font(.title2)
+                    .font(.talerTitle2)
                     .padding([.bottom], 0.01)
                 if let desc = description {
                     Text(desc)
                         .frame(maxWidth: .infinity, alignment: .leading)
-                        .font(.caption)
+                        .font(.talerCaption)
                 }
             }
             content()
@@ -42,7 +42,7 @@ struct SettingsToggle: View {
     var body: some View {
         VStack {
             Toggle(name, isOn: $value.animation())
-                .font(.title2)
+                .font(.talerTitle2)
                 .onChange(of: value) { value in
                     action()
                 }
@@ -50,36 +50,89 @@ struct SettingsToggle: View {
             if let desc = description {
                 Text(desc)
                     .frame(maxWidth: .infinity, alignment: .leading)
-                    .font(.caption)
+                    .font(.talerCaption)
             }
         }.padding([.bottom], 4)
     }
 }
 // MARK: -
+struct SettingsFont: View {
+    let title: String
+    let value: Int
+    let action: (Int) -> Void
+
+    @State private var selected = 0
+    let fonts = [String(localized: "Standard iOS Font"), 
"Atkinson-Hyperlegible", "Nunito"]
+
+    var body: some View {
+        Picker(title, selection: $selected, content: {
+            ForEach(0..<fonts.count, id: \.self, content: { index in
+                Text(fonts[index]).tag(index)
+            })
+        })
+            .font(.talerTitle2)
+            .pickerStyle(.menu)
+            .onAppear() {
+                withAnimation { selected = value }
+            }
+            .onChange(of: selected) { selected in
+                action(selected)
+            }
+    }
+}
+// MARK: -
+struct SettingsStyle: View {
+    let title: String
+    @Binding var myListStyle: MyListStyle
+
+    var body: some View {
+        HStack {
+            Text(title)
+                .font(.talerTitle2)
+            Spacer()
+            Picker(selection: $myListStyle) {
+                ForEach(MyListStyle.allCases, id: \.self) {
+                    Text($0.displayName.capitalized).tag($0)
+                        .font(.talerTitle2)
+                }
+            } label: {}
+                .pickerStyle(.menu)
+//                .frame(alignment: .trailing)
+//                .background(WalletColors().buttonBackColor(pressed: false, 
disabled: false))  TODO: RoundRect
+        }
+    }
+}
+// MARK: -
 struct SettingsSpeaker: View {
     var name: String
     @Binding var value: Int
     var description: String?
     var action: (_ value: Int) -> Void = {value in }
 
+    func imageName(_ value: Int) -> (String, String) {
+        return (value == 0) ? ("speaker.slash", String(localized:"off", 
comment: "Accessibility String for Payment Sounds Off"))
+             : (value == 1) ? ("speaker.fill", String(localized:"Taler 
Sounds", comment: "Accessibility String for Payment Sounds"))
+                            : ("speaker", String(localized:"Apple Sounds", 
comment: "Accessibility String for Payment Sounds"))
+    }
     var body: some View {
         VStack {
-            let image = (value == 0) ? "speaker.slash"
-                      : (value == 1) ? "speaker.fill"
-                                     : "speaker"
+            let image = imageName(value)
             HStack {
                 Text(name)
-                    .font(.title2)
+                    .font(.talerTitle2)
                 Text(" ")
-                    .font(.largeTitle)
+                    .font(.talerLargeTitle)
                 Spacer()
-                Image(systemName: image)
-                    .font(.largeTitle)
+                Image(systemName: image.0)
+                    .font(.talerLargeTitle)
+                    .accessibilityLabel(image.1)
                     .onTapGesture {
                         if value > 0 {
                             value = -1
+                            Controller.shared.playSound(1)
                         } else {
                             value = value + 1
+                            Controller.shared.playSound(value)
                         }
                     }
             }
@@ -90,7 +143,7 @@ struct SettingsSpeaker: View {
             if let desc = description {
                 Text(desc)
                     .frame(maxWidth: .infinity, alignment: .leading)
-                    .font(.caption)
+                    .font(.talerCaption)
             }
         }.padding([.bottom], 4)
     }
diff --git a/TalerWallet1/Views/Settings/SettingsView.swift 
b/TalerWallet1/Views/Settings/SettingsView.swift
index e9c458b..6394d07 100644
--- a/TalerWallet1/Views/Settings/SettingsView.swift
+++ b/TalerWallet1/Views/Settings/SettingsView.swift
@@ -27,6 +27,7 @@ struct SettingsView: View {
     @AppStorage("developerMode") var developerMode: Bool = false
 #endif
     @AppStorage("playSounds") var playSounds: Int = 0
+    @AppStorage("talerFont") var talerFont: Int = 0
     @AppStorage("developDelay") var developDelay: Bool = false
     @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
 
@@ -64,7 +65,14 @@ struct SettingsView: View {
             }
         }
     }
+    @State private var listID = UUID()
 
+    func redraw(_ newFont: Int) -> Void {
+        if newFont != talerFont {
+            talerFont = newFont
+            withAnimation { listID = UUID() }
+        }
+    }
     var body: some View {
 #if DEBUG
         let _ = Self._printChanges()
@@ -74,21 +82,9 @@ struct SettingsView: View {
         Group {
             List {
                 SettingsSpeaker(name: String(localized: "Play Payment 
Sounds"), value: $playSounds,
-                         description: String(localized: "After a transaction 
finished"))
-                HStack {
-                    Text("Liststyle:")
-                        .font(.title2)
-                    Spacer()
-                    Picker(selection: $myListStyle) {
-                        ForEach(MyListStyle.allCases, id: \.self) {
-                            Text($0.displayName.capitalized).tag($0)
-                                .font(.title2)
-                        }
-                    } label: {}
-                        .pickerStyle(.menu)
-//                        .frame(alignment: .trailing)
-//                        .background(WalletColors().buttonBackColor(pressed: 
false, disabled: false))  TODO: RoundRect
-                }
+                                description: String(localized: "After a 
transaction finished"))
+                SettingsFont(title: String(localized: "Font:"), value: 
talerFont, action: redraw)
+                SettingsStyle(title: String(localized: "Liststyle:"), 
myListStyle: $myListStyle)
                 if diagnosticModeEnabled {
                     SettingsToggle(name: String(localized: "Developer Mode"), 
value: $developerMode,
                             description: String(localized: "More information 
intended for debugging")) {
@@ -160,6 +156,14 @@ struct SettingsView: View {
                               description: String(localized: "Perform basic 
test transactions")) {
                             Button("Test 1") {
                                 checkDisabled = true    // don't run twice
+                                Task {
+                                    symLog.log("running integration test on 
test")
+                                    do {
+                                        try await 
model.runIntegrationTestM(newVersion: false, test: true)
+                                    } catch {    // TODO: show error
+                                        symLog.log(error.localizedDescription)
+                                    }
+                                }
                             }
                             .buttonStyle(.bordered)
                             .disabled(checkDisabled)
@@ -237,6 +241,7 @@ struct SettingsView: View {
                     }
                 } // App version info
             }
+            .id(listID)
             .listStyle(myListStyle.style).anyView
         }
         .navigationTitle(navTitle)
diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift 
b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
index 264c624..b3941ea 100644
--- a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
+++ b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pAcceptDone.swift
@@ -6,7 +6,7 @@ import SwiftUI
 import taler_swift
 import SymLog
 
-// Called when accepting a scanned P2P transaction (Receive coins or Pay 
Invoice)
+// Called when accepting a scanned P2P transaction: Receive coins or Pay 
Request(Invoice)
 struct P2pAcceptDone: View {
     private let symLog = SymLogV()
 
diff --git a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift 
b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
index 93d8eb0..cdcb99a 100644
--- a/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
+++ b/TalerWallet1/Views/Sheets/P2P_Sheets/P2pPayURIView.swift
@@ -6,8 +6,8 @@ import SwiftUI
 import taler_swift
 import SymLog
 
-// Will be called either by the user scanning a QR code or tapping the 
provided link,
-// from another user's SendInvoice. We show the P2P details.
+// Called either when scanning a QR code or tapping the provided link
+// from another user's Send Request(Invoice). We show the P2P details.
 struct P2pPayURIView: View {
     private let symLog = SymLogV()
     let navTitle = String(localized: "Pay P2P")
@@ -42,7 +42,7 @@ struct P2pPayURIView: View {
                         P2pAcceptDone(transactionId: 
peerPullDebitResponse.transactionId,
                                            incoming: false)
                     }) {
-                        Text("Confirm Payment", comment:"pay P2P invoice")     
 // SHEET_PAY_P2P
+                        Text("Confirm Payment", comment:"pay P2P 
request/invoice")      // SHEET_PAY_P2P
                     }.buttonStyle(TalerButtonStyle(type: .prominent))
                         .padding()
             } else {
diff --git a/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawURIView.swift 
b/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawURIView.swift
index 4ddeff0..c41d20c 100644
--- a/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawURIView.swift
+++ b/TalerWallet1/Views/WithdrawBankIntegrated/WithdrawURIView.swift
@@ -6,9 +6,9 @@ import SwiftUI
 import taler_swift
 import SymLog
 
-// Will be called either by the user scanning a QR code or tapping the 
provided link, both from the bank's website
-// we show the user the withdrawal details - but first the ToS must be accepted
-// after the user confirmed the withdrawal, we remind them to return to the 
bank website to confirm there, too
+// Called either when scanning a QR code or tapping the provided link, both 
from the bank's website.
+// We show the user the withdrawal details - but first the ToS must be 
accepted.
+// After the user confirmed the withdrawal, we show a button to return to the 
bank website to confirm there, too
 struct WithdrawURIView: View {
     private let symLog = SymLogV()
     let navTitle = String(localized: "Withdrawal")
diff --git a/Info.plist b/Taler_Wallet Info.plist
similarity index 84%
rename from Info.plist
rename to Taler_Wallet Info.plist
index 6cbe85d..958c7e9 100644
--- a/Info.plist
+++ b/Taler_Wallet Info.plist   
@@ -12,7 +12,7 @@
                        <key>CFBundleTypeRole</key>
                        <string>Viewer</string>
                        <key>CFBundleURLName</key>
-                       <string>com.taler-systems.gnutalerwallet09</string>
+                       <string>com.taler-systems.talerwallet-2</string>
                        <key>CFBundleURLSchemes</key>
                        <array>
                                <string>taler</string>
@@ -27,9 +27,13 @@
        <key>UIAppFonts</key>
        <array>
                <string>Atkinson-Hyperlegible-Regular-102.otf</string>
-               <string>Atkinson-Hyperlegible-Italic-102.otf</string>
                <string>Atkinson-Hyperlegible-Bold-102.otf</string>
                <string>Atkinson-Hyperlegible-BoldItalic-102.otf</string>
+               <string>Atkinson-Hyperlegible-Italic-102.otf</string>
+               <string>Nunito-Regular.ttf</string>
+               <string>Nunito-Bold.ttf</string>
+               <string>Nunito-BoldItalic.ttf</string>
+               <string>Nunito-Italic.ttf</string>
        </array>
        <key>UIBackgroundModes</key>
        <array>
diff --git a/GNU Taler.entitlements b/Taler_Wallet.entitlements
similarity index 100%
rename from GNU Taler.entitlements
rename to Taler_Wallet.entitlements
diff --git a/TestFlight/WhatToTest.en-US.txt b/TestFlight/WhatToTest.en-US.txt
index 6fb04f7..9611ffa 100644
--- a/TestFlight/WhatToTest.en-US.txt
+++ b/TestFlight/WhatToTest.en-US.txt
@@ -1,4 +1,9 @@
 
+Version 0.9.3 (18)
+
+- Should work now with https://kaufen.tschunk.shop
+
+
 Version 0.9.3 (17)
 
 • New Feature: Payment Sounds from carlo von lynX
diff --git a/taler-swift/Sources/taler-swift/Amount.swift 
b/taler-swift/Sources/taler-swift/Amount.swift
index cfd01e0..647055b 100644
--- a/taler-swift/Sources/taler-swift/Amount.swift
+++ b/taler-swift/Sources/taler-swift/Amount.swift
@@ -4,6 +4,22 @@
  */
 import Foundation
 
+public func SuperScriptDigit(_ number: UInt32) -> String {
+    switch number {
+        case 0: return String("\u{2070}")
+        case 1: return String("\u{00B9}")
+        case 2: return String("\u{00B2}")
+        case 3: return String("\u{00B3}")
+        case 4: return String("\u{2074}")
+        case 5: return String("\u{2075}")
+        case 6: return String("\u{2076}")
+        case 7: return String("\u{2077}")
+        case 8: return String("\u{2078}")
+        case 9: return String("\u{2079}")
+        default: return ""
+    }
+}
+
 /// Errors for `Amount`.
 enum AmountError: Error {
     /// The string cannot be parsed to create an `Amount`.
@@ -22,6 +38,13 @@ enum AmountError: Error {
     case divideByZero
 }
 
+public struct ScopedCurrencyInfo: Codable {
+    var decimalSeparator: String
+    var numFractionalDigits: Int        // 0 Yen, 2 €,$, 3 arabic
+    var numTinyDigits: Int              // SuperScriptDigits
+    var isCurrencyNameLeading: Bool
+}
+
 /// A value of some currency.
 public class Amount: Codable, Hashable, CustomStringConvertible {
     /// Format that a currency must match.
@@ -45,6 +68,9 @@ public class Amount: Codable, Hashable, 
CustomStringConvertible {
     /// The fractional value of the amount (number to the right of the decimal 
point).
     var fraction: UInt32
 
+    /// Additional info for formatting currency strings
+    var currencyInfo: ScopedCurrencyInfo?
+
     public func hash(into hasher: inout Hasher) {
         hasher.combine(currency)
         if let normalized = try? normalizedCopy() {
@@ -69,6 +95,10 @@ public class Amount: Codable, Hashable, 
CustomStringConvertible {
 
     /// The string representation of the value, formatted as 
"`integer`.`fraction`".
     public var valueStr: String {
+        var decimalSeparator = "."
+        if let currencyInfo {
+            decimalSeparator = currencyInfo.decimalSeparator
+        }
         if fraction == 0 {
             return "\(integer)"
         } else {
@@ -78,7 +108,7 @@ public class Amount: Codable, Hashable, 
CustomStringConvertible {
                 fracStr += "\(frac / (Amount.fractionalBase / 10))"
                 frac = (frac * 10) % Amount.fractionalBase
             }
-            return "\(integer).\(fracStr)"
+            return "\(integer)\(decimalSeparator)\(fracStr)"
         }
     }
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]