[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-ios] branch master updated (4f2b20c -> 7ce9180)
From: |
gnunet |
Subject: |
[taler-taler-ios] branch master updated (4f2b20c -> 7ce9180) |
Date: |
Sat, 25 Feb 2023 20:55:08 +0100 |
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 4f2b20c Transaction list and details
new 4b070fe Entitlements: Data protection, NFC, Background modes
new fb77be7 AppStore License
new 3feaf5c Transaction List & Details
new 3bfa9e6 Set Team: Taler Systems SA
new 7ce9180 Version 0.9.3 build 2
The 5 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:
AppStore license.txt | 71 ++++++++++++++++++++++
Info.plist | 11 +++-
TalerWallet.xcodeproj/project.pbxproj | 16 +++--
TalerWallet1/Views/HelperViews/Buttons.swift | 22 +++++++
.../Views/Transactions/TransactionDetail.swift | 56 ++++++++++-------
.../Views/Transactions/TransactionsListView.swift | 67 +++++++++++++-------
TalerWalletT.entitlements | 12 ++++
7 files changed, 204 insertions(+), 51 deletions(-)
create mode 100644 AppStore license.txt
create mode 100644 TalerWalletT.entitlements
diff --git a/AppStore license.txt b/AppStore license.txt
new file mode 100644
index 0000000..e613c16
--- /dev/null
+++ b/AppStore license.txt
@@ -0,0 +1,71 @@
+ iOS Taler Wallet License
+ Version 1, 05 November 2022
+
+ TERMS AND CONDITIONS You would like to use the Taler
Wallet (as defined below) to develop one or more application. Taler is willing
to grant you a limited license to use the Taler Program and Services provided
to you under this Program to develop and test your applications on the terms
and conditions set forth in this Agreement.
+
+ 0. Acknowledgement.
+
+Taler Systems SA and You must acknowledge that this EULA is concluded between
Taler Systems SA and You only, and not with Apple. Taler Systems SA, not Apple,
is solely responsible for the Licensed Application and the content thereof.
Taler Systems SA assures that the EULA does not provide for usage rules for
Licensed Applications that are in conflict with, the Apple Media Services Terms
and Conditions as of the Effective Date.
+
+ 1. Basic Permissions.
+
+In order to use the Taler Program and Services, You must first accept this
Agreement. If You do not or cannot accept this Agreement, You are not permitted
to use the Taler Program or Services. Do not download or use the Taler Program
or Services in that case.
+
+Subject to the terms and conditions of this Agreement, Taler hereby grants You
during the Term, a limited, non-exclusive, personal, revocable,
non-sublicensable and non-transferable license. You are also not allowed to
make any changes to the Program.
+
+ All rights granted under this License are granted for the term of copyright
on the Program, and are irrevocable provided the stated conditions are met.
This License explicitly affirms your unlimited permission to run the unmodified
Program. Sublicensing is allowed only under the terms of the Apple Family
sharing conditions.
+
+ 2. Termination.
+
+The Term of this Agreement shall extend until the one (1) year anniversary of
the original activation date. Thereafter, subject to Your compliance with the
terms of this Agreement, the Term will automatically renew for successive one
(1) year terms, unless sooner terminated in accordance with this Agreement.
+
+ You may not propagate or modify a covered work under this License.
+You are encouraged to regain your Freedom at any time by breaking out of the
comfortable jail provided by your hardware manufacturer and to obtain a Libre
licensed version of the work from the GNU project.
+
+ 3. Maintenance and Support.
+
+Taler Systems SA is solely responsible for providing any maintenance and
support services with respect to the Licensed Application, as specified in the
EULA, or as required under applicable law. Taler Systems SA and You
acknowledge that Apple has no obligation whatsoever to furnish any maintenance
and support services with respect to the Licensed Application.
+
+ 4. Warranty.
+
+Taler Systems SA is solely responsible for any product warranties, whether
express or implied by law, to the extent not effectively disclaimed. In the
event of any failure of the Licensed Application to conform to any applicable
warranty, You may notify Apple, and Apple may refund the purchase price for the
Licensed Application to that End-User; and that, to the maximum extent
permitted by applicable law, Apple will have no other warranty obligation
whatsoever with respect to the License [...]
+
+ 5. Product Claims.
+
+Taler Systems SA and You acknowledge that Taler System SA, not Apple, are
responsible for addressing any claims of the End-User or any third party
relating to the Licensed Application or the end- user’s possession and/or use
of that Licensed Application, including, but not limited to: (i) product
liability claims; (ii) any claim that the Licensed Application fails to conform
to any applicable legal or regulatory requirement; and (iii) claims arising
under consumer protection, privacy, or [...]
+
+ 6. Intellectual Property Rights.
+
+Taler Systems SA and You acknowledge that, in the event of any third party
claim that the Licensed Application or the End-User’s possession and use of
that Licensed Application infringes that third party’s intellectual property
rights, Taler Systems SA, not Apple, will be solely responsible for the
investigation, defense, settlement and discharge of any such intellectual
property infringement claim.
+
+ 7. Legal Compliance.
+
+You must represent and warrant that (i) he/she is not located in a country
that is subject to a U.S. Government embargo, or that has been designated by
the U.S. Government as a “terrorist supporting” country; and (ii) he/she is not
listed on any U.S. Government list of prohibited or restricted parties.
+
+ 8. Third Party Beneficiary.
+
+Taler Systems SA and You acknowledge and agree that Apple, and Apple’s
subsidiaries, are third party beneficiaries of the EULA, and that, upon Your
acceptance of the terms and conditions of the EULA, Apple will have the right
(and will be deemed to have accepted the right) to enforce the EULA against You
as a third party beneficiary thereof.
+
+ 9. Disclaimer of Warranty.
+
+TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, YOU EXPRESSLY ACKNOWLEDGE
AND AGREE THAT USE OF THE TALER PROGRAM AND ANY SERVICES IS AT YOUR SOLE RISK
AND THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND
EFFORT IS WITH YOU. THE TALER PROGRAM AND ANY SERVICES ARE PROVIDED “AS IS” AND
“AS AVAILABLE”, WITH ALL FAULTS AND WITHOUT WARRANTY OF ANY KIND.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
PROVE DEFECTIVE, YOU ASSUME T [...]
+
+ 10. Limitation of Liability.
+
+TO THE EXTENT NOT PROHIBITED BY APPLICABLE LAW, IN NO EVENT WILL TALER BE
LIABLE FOR PERSONAL INJURY, OR ANY INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL
OR PUNITIVE DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
OF PROFITS, LOSS OF DATA, BUSINESS INTERRUPTION OR ANY OTHER COMMERCIAL DAMAGES
OR LOSSES, ARISING OUT OF OR RELATED TO THIS AGREEMENT, YOUR USE OR INABILITY
TO USE THE TALER PROGRAM, OR YOUR DEVELOPMENT EFFORTS OR PARTICIPATION IN THE
PROGRAM, HOWEVER CAUSE [...]
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE PROGRAM TO OPERATE WI [...]
+
+ 11. Interpretation of Sections 9 and 10.
+
+If the disclaimer of warranty and limitation of liability provided above
cannot be given local legal effect according to their terms, reviewing courts
shall apply local law that most closely approximates an absolute waiver of all
civil liability in connection with the Program, unless a warranty or assumption
of liability accompanies a copy of the Program in return for a fee.
+
+ 12. Dispute Resolution; Governing Law
+
+Any litigation or other dispute resolution between You and Taler arising out
of or relating to this Agreement, the Taler Program, or Your relationship with
Taler will take place in the commercial court of Zurich, Switzerland. This
Agreement will be governed by and construed exclusively in accordance with the
laws of Switzerland.
+
+ 13. Developer Name and Address.
+
+If You have any questions, complaints or claims with respect to the Licensed
Application, please contact legal@taler-systems.com. If you think these terms
are insanely long, we recommend you read
https://www.apple.com/legal/internet-services/itunes/dev/minterms/ and then
carefully read the Termination condition in Section 2 again.
diff --git a/Info.plist b/Info.plist
index 4f254b8..229b02d 100644
--- a/Info.plist
+++ b/Info.plist
@@ -2,13 +2,17 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>BGTaskSchedulerPermittedIdentifiers</key>
+ <array>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ </array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
- <string>com.taler-systems.talerwallet</string>
+ <string>com.taler-systems.talerwallet15</string>
<key>CFBundleURLSchemes</key>
<array>
<string>taler</string>
@@ -27,5 +31,10 @@
<key>UISceneConfigurations</key>
<dict/>
</dict>
+ <key>UIBackgroundModes</key>
+ <array>
+ <string>fetch</string>
+ <string>processing</string>
+ </array>
</dict>
</plist>
diff --git a/TalerWallet.xcodeproj/project.pbxproj
b/TalerWallet.xcodeproj/project.pbxproj
index 6281226..2052f9a 100644
--- a/TalerWallet.xcodeproj/project.pbxproj
+++ b/TalerWallet.xcodeproj/project.pbxproj
@@ -98,6 +98,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 4E3AE7EF29A7E8F40070BEC4 /* TalerWalletT.entitlements */ = {isa
= PBXFileReference; lastKnownFileType = text.plist.entitlements; path =
TalerWalletT.entitlements; sourceTree = "<group>"; };
4EA1ABBD29A3833A008821EA /* PublicConstants.swift */ = {isa =
PBXFileReference; lastKnownFileType = sourcecode.swift; path =
PublicConstants.swift; sourceTree = "<group>"; };
4EB094D429896CD20043A8A1 /* TalerWalletTests.swift */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path
= TalerWalletTests.swift; sourceTree = "<group>"; };
4EB094D529896CD20043A8A1 /* WalletBackendTests.swift */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift;
path = WalletBackendTests.swift; sourceTree = "<group>"; };
@@ -386,6 +387,7 @@
D14AFD1424D232B300C51073 = {
isa = PBXGroup;
children = (
+ 4E3AE7EF29A7E8F40070BEC4 /*
TalerWalletT.entitlements */,
4EB094EE298979840043A8A1 /* TalerWallet1 */,
4EB094E129896FED0043A8A1 /* Info.plist */,
AB710490285995B6008B04F0 /* taler-swift */,
@@ -774,9 +776,10 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS =
TalerWalletT.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = "";
+ CURRENT_PROJECT_VERSION = 2;
+ DEVELOPMENT_TEAM = GUDDQ9428Y;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Info.plist;
@@ -791,7 +794,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 0.9.2;
+ MARKETING_VERSION = 0.9.3;
PRODUCT_BUNDLE_IDENTIFIER =
"com.taler-systems.talerwallet15";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos
iphonesimulator";
@@ -809,9 +812,10 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME
= AccentColor;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS =
TalerWalletT.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = "";
+ CURRENT_PROJECT_VERSION = 2;
+ DEVELOPMENT_TEAM = GUDDQ9428Y;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = Info.plist;
@@ -826,7 +830,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 0.9.2;
+ MARKETING_VERSION = 0.9.3;
PRODUCT_BUNDLE_IDENTIFIER =
"com.taler-systems.talerwallet15";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos
iphonesimulator";
diff --git a/TalerWallet1/Views/HelperViews/Buttons.swift
b/TalerWallet1/Views/HelperViews/Buttons.swift
index ea509a8..fd298cb 100644
--- a/TalerWallet1/Views/HelperViews/Buttons.swift
+++ b/TalerWallet1/Views/HelperViews/Buttons.swift
@@ -37,6 +37,28 @@ struct PlusButton : View {
}
}
+struct ArrowUpButton : View {
+ let action: () -> Void
+
+ var body: some View {
+ Button(action: action) {
+ Image(systemName: "arrow.up.to.line")
+ }
+ .font(.title3)
+ }
+}
+
+struct ArrowDownButton : View {
+ let action: () -> Void
+
+ var body: some View {
+ Button(action: action) {
+ Image(systemName: "arrow.down.to.line")
+ }
+ .font(.title3)
+ }
+}
+
struct ReloadButton : View {
let disabled: Bool
let action: () -> Void
diff --git a/TalerWallet1/Views/Transactions/TransactionDetail.swift
b/TalerWallet1/Views/Transactions/TransactionDetail.swift
index 57faf07..6e74f0e 100644
--- a/TalerWallet1/Views/Transactions/TransactionDetail.swift
+++ b/TalerWallet1/Views/Transactions/TransactionDetail.swift
@@ -21,7 +21,6 @@ struct TransactionDetail: View {
var body: some View {
let common = transaction.common()
- let details = transaction.detailsToShow()
let dateString = TalerDater.dateString(from: common.timestamp)
VStack() {
@@ -30,14 +29,24 @@ struct TransactionDetail: View {
.font(.title)
.fontWeight(.medium)
.padding(.bottom)
+ Spacer()
Text("\(dateString)")
- .font(.title)
- .fontWeight(.medium)
+ .font(.title2)
.padding(.vertical)
switch transaction {
case .withdrawal(let withdrawalTransaction):
+ details(transaction: transaction)
threeAmounts(common: common, topTitle: "Chosen amount to
withdraw:", bottomTitle: "Obtained coins:", incoming: true)
case .payment(let paymentTransaction):
+ let details = paymentTransaction.details
+ let info = details.info
+ Text("Status: \(details.status)")
+ .font(.title2)
+ .padding(.bottom)
+ Text(info.summary)
+ .font(.title)
+ .lineLimit(4)
+ .padding(.bottom)
threeAmounts(common: common, topTitle: "Sum to be paid:",
bottomTitle: "Paid coins:", incoming: false)
case .refund(let refundTransaction):
threeAmounts(common: common, topTitle: "Refunded amount:",
bottomTitle: "Obtained coins:", incoming: true)
@@ -46,17 +55,6 @@ struct TransactionDetail: View {
case .refresh(let refreshTransaction):
threeAmounts(common: common, topTitle: "Refreshed
amount:", bottomTitle: "Paid coins:", incoming: false)
}
-
-// if let baseURL = transaction.exchangeBaseUrl {
-// VStack {
-// Text("From exchange:")
-// .font(.title3)
-// Text("\(baseURL.trimURL())")
-// .font(.title)
-// .fontWeight(.medium)
-// }
-// .frame(maxWidth: .infinity, alignment: .center)
-// }
Spacer()
Button(role: .destructive, action: {
// TODO: delete from wallet-core
@@ -71,7 +69,6 @@ struct TransactionDetail: View {
})
.buttonStyle(.bordered)
.controlSize(.large)
-// Spacer()
}
}
}
@@ -92,14 +89,31 @@ extension TransactionDetail {
let inColor = Color("Incoming")
AmountView(title: topTitle,
- value: raw.readableDescription, color: labelColor)
- .padding(.bottom)
+ value: raw.readableDescription,
+ color: labelColor)
+ .padding(.bottom)
AmountView(title: "Exchange fee:",
- value: fee.readableDescription, color: fee.isZero ?
labelColor : outColor)
- .padding(.bottom)
+ value: fee.readableDescription,
+ color: fee.isZero ? labelColor : outColor)
+ .padding(.bottom)
AmountView(title: bottomTitle,
- value: effective.readableDescription, color: incoming ?
inColor : outColor)
- .padding(.bottom)
+ value: effective.readableDescription,
+ color: incoming ? inColor : outColor)
+ .padding(.bottom)
+ }
+ }
+ struct details: View {
+ var transaction : Transaction
+ var body: some View {
+ let details = transaction.detailsToShow()
+ let keys = details.keys
+ if keys.contains(EXCHANGEBASEURL) {
+ if let baseURL = details[EXCHANGEBASEURL] {
+ Text("from \(baseURL.trimURL())")
+ .font(.title2)
+ .padding(.bottom)
+ }
+ }
}
}
}
diff --git a/TalerWallet1/Views/Transactions/TransactionsListView.swift
b/TalerWallet1/Views/Transactions/TransactionsListView.swift
index ef365e1..284a6c3 100644
--- a/TalerWallet1/Views/Transactions/TransactionsListView.swift
+++ b/TalerWallet1/Views/Transactions/TransactionsListView.swift
@@ -28,8 +28,10 @@ struct TransactionsListView: View {
if viewModel.transactions == nil {
symLog { LoadingView(backButtonHidden: false) }
} else {
+ let count = viewModel.transactions!.count
+ let title: String = "\(count) \(navTitle)"
symLog { Content(symLog: symLog, viewModel: viewModel,
reloadAction: reloadAction)
- .navigationTitle(navTitle)
+ .navigationTitle(title)
}
}
}.task {
@@ -51,33 +53,46 @@ extension TransactionsListView {
var reloadAction: () async throws -> ()
+ @State private var upAction: () -> Void = {}
+ @State private var downAction: () -> Void = {}
+
var body: some View {
let transactions = viewModel.transactions!
- List(transactions) { transaction in
- let common = transaction.common()
- NavigationLink {
- TransactionDetail(transaction: transaction)
- } label: {
- TransactionRow(transaction: transaction)
- }
- .swipeActions(edge: .leading, allowsFullSwipe: true) {
- Button {
- symLog?.log("bookmarked \(common.transactionId)")
- // TODO: Bookmark
- } label: {
- Label("Bookmark", systemImage: "bookmark")
- }.tint(.indigo)
- }
- .swipeActions(edge: .trailing, allowsFullSwipe: true) {
- Button(role: .destructive) {
- symLog?.log("deleted \(common.transactionId)")
- // TODO: delete from Model. SwiftUI deletes this
row from view already :-)
+
+ ScrollViewReader { scrollView in
+ List {
+ ForEach (transactions.indices) { index in
+ let transaction = transactions[index]
+ let common = transaction.common()
+ NavigationLink {
+ TransactionDetail(transaction: transaction)
} label: {
- Label("Delete", systemImage: "trash")
+ TransactionRow(transaction: transaction)
+ }
+ .id(index)
+ .swipeActions(edge: .leading, allowsFullSwipe: true) {
+ Button {
+ symLog?.log("bookmarked
\(common.transactionId)")
+ // TODO: Bookmark
+ } label: {
+ Label("Bookmark", systemImage: "bookmark")
+ }.tint(.indigo)
+ }
+ .swipeActions(edge: .trailing, allowsFullSwipe: true) {
+ Button(role: .destructive) {
+ symLog?.log("deleted \(common.transactionId)")
+ // TODO: delete from Model. SwiftUI deletes
this row from view already :-)
+ } label: {
+ Label("Delete", systemImage: "trash")
+ }
}
}
- }
- .navigationBarTitleDisplayMode(.large) // .inline
+ .onAppear {
+ upAction = { withAnimation { scrollView.scrollTo(0) }}
+ downAction = { withAnimation {
scrollView.scrollTo(transactions.count - 1) }}
+ downAction()
+ }
+ }
.refreshable {
do {
symLog?.log("refreshing")
@@ -87,6 +102,12 @@ extension TransactionsListView {
symLog?.log(error.localizedDescription)
}
}
+ }
+ .navigationBarItems(trailing: HStack {
+ ArrowUpButton(action: upAction)
+ ArrowDownButton(action: downAction)
+ })
+ .navigationBarTitleDisplayMode(.large) // .inline
}
}
}
diff --git a/TalerWalletT.entitlements b/TalerWalletT.entitlements
new file mode 100644
index 0000000..dfdca9d
--- /dev/null
+++ b/TalerWalletT.entitlements
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.developer.default-data-protection</key>
+ <string>NSFileProtectionComplete</string>
+ <key>com.apple.developer.nfc.readersession.formats</key>
+ <array>
+ <string>TAG</string>
+ </array>
+</dict>
+</plist>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-ios] branch master updated (4f2b20c -> 7ce9180),
gnunet <=
- [taler-taler-ios] 01/05: Entitlements: Data protection, NFC, Background modes, gnunet, 2023/02/25
- [taler-taler-ios] 04/05: Set Team: Taler Systems SA, gnunet, 2023/02/25
- [taler-taler-ios] 02/05: AppStore License, gnunet, 2023/02/25
- [taler-taler-ios] 03/05: Transaction List & Details, gnunet, 2023/02/25
- [taler-taler-ios] 05/05: Version 0.9.3 build 2, gnunet, 2023/02/25