gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

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