From 9c95d9665a548166a9aabaad9edb42d838ec76cd Mon Sep 17 00:00:00 2001 From: Kerry Washington Date: Thu, 18 Jul 2024 21:15:33 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80[Release=20v3.13.5]=20Merge=20into?= =?UTF-8?q?=20Main=20(#246)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Develop (#111) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts Co-authored-by: Mohamed Barry * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Release v2.8.3] Merge into Master (#167) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v2.9.0] into Master (#170) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * version bump * Minor bugfix: reordered UD address lines to set the first responderā€¦duh * build update * Resolve conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [HOTFIX] Hide Card Tab (#191) * Hide Card Tab * added comments for v1 * [Merge into Master] v3.1.1 (#194) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * version bump * -build bump - polished cruft - clean package Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Release v3.2.0] Merge into Main (#216) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that hā€¦ * [Release v3.3.0] Merge into Main (#236) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that hā€¦ * šŸš€[Release v3.4.0] Merge into Main (#263) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that ā€¦ * Create GitHub Action: push-to-release-email (#56) * Create GitHub-actions-push-demo.yml * Changes the demo script * Added more data to script * Added Gmail agent * fixed formatting issues * Change the agent email * Changes the filter * Fixed formatting errors * šŸš€[Release v3.5.0] Merge into Main (#55) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that hā€¦ * šŸ”„šŸ› [Hotfix] Buy tab crashes (#64) * Hotfix: Set item tags to the proper sequence * Refactored tests - Added TabBarViewController Tests - Added NonUSTabBarViewController Tests - Fixed Default Currency Test * version bump * šŸš€[Release v3.6.0] Merge into Main (#91) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that hā€¦ * šŸ¦ŗ[Tech Debt] Update to match the v3.6.0 Binary (#93) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This isā€¦ * Revert "šŸ¦ŗ[Tech Debt] Update to match the v3.6.0 Binary (#93)" This reverts commit 528d070dfe8cd21c1cf6944fe8cb714da764e2f3. * šŸ¦ŗ[Tech Debt] Update to match the v3.6.0 Binary part deux (#94) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension ā€¦ * šŸš€[Release v3.6.1] Merge into Main (#98) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that hā€¦ * šŸš€[Release v3.7.1] Merge into Main (#112) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * [Merge v3.0.0] into Develop (#184) * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump * [HOTFIX] hide litecoin card (#192) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * Fix some trivial conflict markers (#177) * [Bugfix] Upgrade the business logic for Unstoppable Domains (#179) * Fix some triival conflict markers * Added test to button once the UD string meets a minimum length * Clears address text field when Lookup button is pressed * Set the background color of the AlertToast * Locailization of the alert language * move logic to release the first responder * per review notes * [Feature] Litecoin card v1 (#180) * [Litecoin Card] Progress Step 1 - Major work: litecoin-card TabBarView refactor - Updated UIColor for Color - SwiftUI preview devices - Working out the Nav polish - Fixed hard-coded UD lookup label with proper localizations - Commented out BitId * [Litecoin Card] Progress Step 2 - Added more localizations - Rebuilding registration view need to add keyboard - Fixed the animation for the card view - Fixed Alert name collisions to the SimplexAlert * [Litecoin Card] Progress Step 3 - Added Login views and localizations - Added partnerAPI Swift Package - Layout the registration view - Add more localizations - BUGFIX: Image missing in this branch. * [Litecoin Card] Progress Step 4 More localizations Added data Validators Final Polish for Registration View Registration View Modal wiring works * [Litecoin Card] Progress Step 5 Register works to the model Login is working Added animation for Login/Logout Login and Loogut working Added localizations More localizations * [Litecoin Card] RC 1 polishes Communcations polishing + dev cleanup Polishing the RegistrationView layout Fixed bug: https://github.com/litecoin-foundation/loafwallet-ios/issues/175 * [Litecoin Card] RC2: removed defunct script * per review comments - Ar files removal - Cleanup localizable - Removed Ar.proj files - Removed empty class - Added all Validation localization framework - Added localizations of the validations - Refactored per review notes * Bugfix- login message Added failure message localizations * version bump * Added some tests * Refactored the login logic - Used the status of the binding to change the UI * Added combined logic of the email and password fields to enable login button Reference @losh11 comment: `The cards login now gives a good login failed alert. However I think the login button should be disabled until the text in the email input is validated as email format.` * build bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * Hide Card Tab * added comments for v1 Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Bugfix]UD resolved address / got callback (#193) * Fixed bug: resolved address / got callback - Added a dispatch group - Fixed the bug by adding wait to the group from (@JohnnyJumper) - Refactored partner plist * removed cruft * polish UD model * v3.0.1 Card Hidden - found hidden codeā€¦ * Resolved review comment - polished the address send label * removed unused code - clean comments * [Merge into Develop] Release v3.1.1 (#195) * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit ac69d0de201d46e0ffa01630d9b82f442261533a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that ā€¦ * Add files via upload * Update README.md * šŸš€[Release v3.9.0] Merge into Main (#123) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump * Release/v3.9.0 (#128) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * Create FUNDING.yml * šŸš€[Release v3.10.1] Merge into Main (#160) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * reemvoed conflict tags * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * changed the urtl - change the deployment target * removed staging server url normalizing to the prod server only * aded small test - build bump * Retired old https server code (#154) * #148 Fixed a crash that appeared when the users wallet was aout of sync and a prompt neaded to appear * Removed dispatchqueue.async that was used for testing * build bump Co-authored-by: Iferencak * šŸš€[Release v3.11.0] Merge into Main (#187) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * reemvoed conflict tags * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * changed the urtl - change the deployment target * Retired old https server code (#154) * #148 Fixed a crash that appeared when the users wallet was aout of sync and a prompt neaded to appear * Removed dispatchqueue.async that was used for testing * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * Add SwiftFormat to the codebase (#159) * Added SwiftFormat to the run scripts * Removed --elseOnSameLine from rules as it is on by default * Added --disable enumNamespaces rule * Using SwiftFormat to auto-format current code * Removed --allman rule * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * Added SwiftFormat to the run scripts * Removed --elseOnSameLine from rules as it is on by default * Added --disable enumNamespaces rule * Using SwiftFormat to auto-format current code * Removed --allman rule * PartnerData auto-format * Added marking of unused code back to runscripts * Delete PubtoPrivate.yml * Delete sync-mirror.yml Co-authored-by: Kerry Washington * šŸ¤¬[Techdebt] #167 add custom user agent++ (#168) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * changed the urtl - change the deployment target * removed staging server url normalizing to the prod server only * aded small test - build bump * Retired old https server code (#154) * Updated * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * added custom var * build bump * Add codesigndoc ignore * Added Swift Packages to the project - Closes : https://github.com/litecoin-foundation/litewallet-ios/issues/156 * Removed pods * Added Litewallet PartnerAPI to project * SUCCESS! - Added PartnerAPI as a Submodule * Rebase from SwiftFormat * Update .gitignore * Removed submodule * resetting add the submodule * updated config * Removed PartnerAPI #170 Removed references to the LitewalletPartnerAPI lib - Compiled the app - Added LitecoinCard View for CardView - Added CardWebViewController - Deleted unused views and viewModels * change build number * Rmeoved all LitecoinCard Tests * build bump * Failed Test for Bitrise CI * Unbroken tests * small change build bump * another build bump * build again * build bump * yet again bump * small change * matching build number with bitrise run * nonsense change * Fixed the UDSystem Error issues - removed commented out PartnerAPI Code Co-authored-by: Iferencak * Delete sync-mirror.yml (#176) * Delete push-to-release-email.yml (#175) * Delete github-actions.yml (#174) deleting unused workflow * Update README.md (#173) Added a reminder to cleanup Old workflow runs * improved language switching, fixed transparent navigation bar bug (#179) * Improved language selection * Fixed transaction completion localization, removed force unwrapings, fixing typos * autoformat - BartyCrouch has a bug where the NSLocalizaedString makes extractLocStrings fail. The workaround is detailed here: https://github.com/FlineDev/BartyCrouch#exclude-specific-views--nslocalizedstrings-from-localization * resolved flaky compile issue - BC and extractLocStrings did not get along Barty Crouch have an open issue as extractLocStrings is deprecated by Apple so the script is barfing. The notes on the issue are here: https://github.com/FlineDev/BartyCrouch/issues/135#issuecomment-772379904 The other issue was the NSNotificationCenter was not happy and the work around was: - deinit and remove observers for the new post - remove the assertFailure (which I added) and replaced it with an LWAnalytics error event - added a Error NSlog message - also moved all the NSN to its own file NSNExtension * bump version - polished language view Co-authored-by: kcw-grunt * version bump - build bump * build bump to trigger bitrise * bump for matching bitrise * Fixed a crash when force trying to get a creation date of unexisting file (#188) Co-authored-by: Iferencak * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * reemvoed conflict tags * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * Add SwiftFormat to the codebase (#159) * Added SwiftFormat to the run scripts * Removed --elseOnSameLine from rules as it is on by default * Added --disable enumNamespaces rule * Using SwiftFormat to auto-format current code * Removed --allman rule * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * Added SwiftFormat to the run scripts * Removed --elseOnSameLine from rules as it is on by default * Added --disable enumNamespaces rule * Using SwiftFormat to auto-format current code * Removed --allman rule * PartnerData auto-format * Added marking of unused code back to runscripts * Delete PubtoPrivate.yml * Delete sync-mirror.yml Co-authored-by: Kerry Washington * šŸ¤¬[Techdebt] #167 add custom user agent++ (#168) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * changed the urtl - change the deployment target * removed staging server url normalizing to the prod server only * aded small test - build bump * Retired old https server code (#154) * Updated * šŸš€[Release v3.10.1] Merge into Develop (#162) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸš§[Techdebt] Firebase polish 121 (#139) * šŸš€[Release v3.10.0] Merge into Main (#136) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * Create sync-mirror.yml * Changed the clone sig * Update sync-mirror.yml - added sync branches and tags * Update sync-mirror.yml refactor * Update sync-mirror.yml fixed uname * Update sync-mirror.yml * Update sync-mirror.yml * Create PubtoPrivate.yml * Update sync-mirror.yml * šŸš€[Release v3.10.0] Merge into Develop (#135) * šŸ¦ŗ[Techdebt] fix firebase (#115) * Update firebase config auto clean up strings - version bump - Commented out debug FB file * Checked the version is sending FB data - bump build number * šŸ„³[Techdebt] relayout address view controller (#120) * Successfully placed in UIHosting Address Updated the strings file * Added event * added delay - used for animating U Domain * Added function of subviews in SendViewController Layout is updated * Adding the function to the send Cleaned up and wired up Cells - UD View/Model - Send Address View/Model Reset the amount Label in SendViewController * Refactored SendButton - Using UIHostingViewController * Successfully send LTC -WIP: fix white space * Refactored the layout of the send button * buiid bump (#125) * [Techdebt] ci cd refactor (#132) * Removed flaky tests * build bump * build bump * removed unused file - build bump * build bump * fixed scan QR (#130) * fixed scan QR * update gitignore * Feature/add bitrefill new (#134) * Added llocalView - added bitrefill - basic function is available - build bump * bump * added basic web widget * updated logo * build bump * changed the Bitrefill link - build bump * pre-bump version - to get a binary to TestFlight * build bump * build bump again * Clean up background * build bump * build bump -clean up strings file - Udpated to iOS 14.0 as a target https://www.statista.com/statistics/1118925/mobile-apple-ios-version-share-worldwide/ * Removed cruft * Updated the Firebase constants - changed it to lowercase * updated links * fixed constants -build bump * Mark unused code (#147) * Added and modified a ruby script that shows a warining if a class, function or variable is not used * Fixed static function partnersDataArray * Updated build number * build bump * clean up duplicate scripts * readded "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error: %2$d]"; -bumped the version and build to test Bitrise * fixed today extension version and build number * fixed coding norm (space after colon) - fixed Turkish - Italian mixup - version bump * added custom var * build bump * Add codesigndoc ignore * Added Swift Packages to the project - Closes : https://github.com/litecoin-foundation/litewallet-ios/issues/156 * Removed pods * Added Litewallet PartnerAPI to project * SUCCESS! - Added PartnerAPI as a Submodule * Rebase from SwiftFormat * Update .gitignore * Removed submodule * resetting add the submodule * updated config * Removed PartnerAPI #170 Removed references to the LitewalletPartnerAPI lib - Compiled the app - Added LitecoinCard View for CardView - Added CardWebViewController - Deleted unused views and viewModels * change build number * Rmeoved all LitecoinCard Tests * build bump * Failed Test for Bitrise CI * Unbroken tests * small change build bump * another build bump * build again * build bump * yet again bump * small change * matching build number with bitrise run * nonsense change * Fixed the UDSystem Error issues - removed commented out PartnerAPI Code Co-authored-by: Iferencak * bump to match current prod build number * Removed app install date variable (#200) * nitā€¦format (#203) * Update the loafwallet-core submodule * #207 resolve core update issue missing labels (#211) * move the git submodule to the latest - v1.0.0 releease of loafwallet-core # Conflicts: # Modules/loafwallet-core * ISSUE: Not able to type and display recv addresses - There is a failiure in the conversion from CChar to Int8 - Have send working - updated loafwallet-core v1.1.0 - Added falsePositived interface - Added enum and set values for - low privacy - semi-private - anonymous - Updated the loafwallet-core - adds the fpRate var * Resolved PeerManager set with proper optional setting. * WIP: Cannot unwrap ltc1 addresses to retain them in the UILabel - ltc1 addresses are present but not unwrapping properly @Iferencak this is the disappearing error you saw when we updated the loafwallet-core. - Not able to figure this out yet. - All ideas are welcome * WIP: Still debugging - The issue is the BRCore methods compare the `ltc1` address against the set of addresses and it fails because the BRSet is not setup for the address. The issue is this worked before and I need to investigate what happened before and how things changed Signed-off-by: kcw-grunt * move the git submodule to the latest - v1.0.0 releease of loafwallet-core * Bugfix!: Duplicated char in converter Added optic enum Signed-off-by: kcw-grunt * Move all the extensions from BRCore to separate files - Moved these into separate files to help debug Signed-off-by: kcw-grunt * Refactored the conversion - Fixed a bug where a element is duplicated `unichar(charArray.20),unichar(charArray.21), unichar(charArray.22), unichar(charArray.23), unichar(charArray.23), unichar(charArray.24)` Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt * šŸš€[Release v3.11.1] Merge into Develop (#214) * bump build to date based number Signed-off-by: kcw-grunt * Removed Ternio Card code Signed-off-by: kcw-grunt * Polished the version tag in the lock screen Signed-off-by: kcw-grunt * Build bump Signed-off-by: kcw-grunt * Removed TabBarVC - Cleanup to remove old references Signed-off-by: kcw-grunt * Updated the Infura and partner IPFS access - Required in the latest UD library Signed-off-by: kcw-grunt * Added commit to partner keys Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt * Removed all ArticleIds (#216) Signed-off-by: kcw-grunt # Conflicts: # loafwallet/ArticleIds.swift * RENAMED the project to Litewallet - Added new litewallet.entitlements - Remapped files - build bumped - Updated to Swift 4.2 - Version bump - Added PaddedUILabel (unused - removed UD - refactored layouts of SendViewController - bumped build number * Updated the fee words for all languages Signed-off-by: kcw-grunt updated the stringsā€™ feesā€™ Signed-off-by: kcw-grunt WIP Adding in the ops fees Signed-off-by: kcw-grunt adjustment of the Send VW layout Signed-off-by: kcw-grunt Removed ifdef for old versions of iOS other refactor Signed-off-by: kcw-grunt * Added new EnterPhraseView HostingController Signed-off-by: kcw-grunt * WIP: Pusher waiting for https://github.com/pusher/push-notifications-swift/issues/187 Signed-off-by: kcw-grunt * Integrating the ops fee Debugging to find where the amount was set re-add Satoshis * Successfully send to 2 outputs Sent 2 outputs with 1 input Need to readd refactor remove cruft refactored constant fixed dupe constant Further polish for confirmation for sending * Integrated Push Notifications Signed-off-by: kcw-grunt * Refactored legacy code - Moved Application Extension funcs to different file - Added new HostingController Signed-off-by: kcw-grunt * Refactored the Launch - Added SwiftUI Font for more widespread use - Cleaned up logo Signed-off-by: kcw-grunt * WIP: Adding more create views Signed-off-by: kcw-grunt * updated the gitignore Signed-off-by: kcw-grunt * Began added CreateViews Signed-off-by: kcw-grunt * Updated the localization files - update the schemes - Refactor to fix old code / delete unused files - Added audio that plays when user selects language - Working! The word billboard is working - updated the taglines - updated the alert message for the language alert - Good language switching Signed-off-by: kcw-grunt * Added pusher and paths for devices - Re-add the partner plist - Fixes the iPad idiom by giving those users a legacy UIKit path - refactor unused code - auto linting - updated the pusher option Signed-off-by: kcw-grunt * Finished layout of Acceptance for notifications propgated language to Accepted notification auto format Signed-off-by: kcw-grunt * Fixes a memory leak solved by @hectorchu - We had strong reference to the observer(s) and this was causing lingering issues causing the app to crash at rutime - Updated the key file references Signed-off-by: kcw-grunt * updated loafwallet-core version -Updated to loafwallet-core v1.6.1 -update urls -Signup sheet is working!!!!! -polished the signup - Re added some callbacks that were updating the recall big bug was fixed Signed-off-by: kcw-grunt * Need to work in the Showing and hiding the announce view Havenā€™t figured out how to show and hide the AnnounceView then show the tabVC - Sometimes it reads the evaluation and sometimes it doesnt - removed the current user signup sheet Signed-off-by: kcw-grunt * added LWAnalytics notifications Signed-off-by: kcw-grunt * added amount field Signed-off-by: kcw-grunt * prelayout of the amount in the send SwiftUI send Signed-off-by: kcw-grunt * added memo and Amount Signed-off-by: kcw-grunt * added hack to make it work Signed-off-by: kcw-grunt * cleanup of unused code Signed-off-by: kcw-grunt * cleanup of other efforts to debug Signed-off-by: kcw-grunt * readded the didStartEditing Signed-off-by: kcw-grunt * Readded then Address Cell View - Still have the issues the ModalViewController height Signed-off-by: kcw-grunt * Maintenance refactor Signed-off-by: kcw-grunt * fix TestFlight 3.12.0 (240115) Ā· iPhone 13 Ā· 17.2.1 - Fix to the advanced settiings Node selection Signed-off-by: kcw-grunt * Refactored the send animations and layout Signed-off-by: kcw-grunt * clean up location of vars Signed-off-by: kcw-grunt * Fixed a big bug Previously the loafwallet-core geenrated new addresses using BRWalletReceiveAddress.description But this stopped generating an address Used a new method to take a char array and converting it to a LTC Address (a string) Signed-off-by: kcw-grunt * šŸ˜[Feature] Exploration/update create restore wallet (#219) * RENAMED the project to Litewallet - Added new litewallet.entitlements - Remapped files - build bumped - Updated to Swift 4.2 - Version bump - Added PaddedUILabel (unused - removed UD - refactored layouts of SendViewController - bumped build number * Updated the fee words for all languages Signed-off-by: kcw-grunt updated the stringsā€™ feesā€™ Signed-off-by: kcw-grunt WIP Adding in the ops fees Signed-off-by: kcw-grunt adjustment of the Send VW layout Signed-off-by: kcw-grunt Removed ifdef for old versions of iOS other refactor Signed-off-by: kcw-grunt * Added new EnterPhraseView HostingController Signed-off-by: kcw-grunt * WIP: Pusher waiting for https://github.com/pusher/push-notifications-swift/issues/187 Signed-off-by: kcw-grunt * Integrating the ops fee Debugging to find where the amount was set re-add Satoshis * Successfully send to 2 outputs Sent 2 outputs with 1 input Need to readd refactor remove cruft refactored constant fixed dupe constant Further polish for confirmation for sending * Integrated Push Notifications Signed-off-by: kcw-grunt * Refactored legacy code - Moved Application Extension funcs to different file - Added new HostingController Signed-off-by: kcw-grunt * Refactored the Launch - Added SwiftUI Font for more widespread use - Cleaned up logo Signed-off-by: kcw-grunt * WIP: Adding more create views Signed-off-by: kcw-grunt * Began added CreateViews Signed-off-by: kcw-grunt * Updated the localization files - update the schemes - Refactor to fix old code / delete unused files - Added audio that plays when user selects language - Working! The word billboard is working - updated the taglines - updated the alert message for the language alert - Good language switching Signed-off-by: kcw-grunt * Added pusher and paths for devices - Re-add the partner plist - Fixes the iPad idiom by giving those users a legacy UIKit path - refactor unused code - auto linting - updated the pusher option Signed-off-by: kcw-grunt * Finished layout of Acceptance for notifications propgated language to Accepted notification auto format Signed-off-by: kcw-grunt * Fixes a memory leak solved by @hectorchu - We had strong reference to the observer(s) and this was causing lingering issues causing the app to crash at rutime - Updated the key file references Signed-off-by: kcw-grunt * updated loafwallet-core version -Updated to loafwallet-core v1.6.1 -update urls -Signup sheet is working!!!!! -polished the signup - Re added some callbacks that were updating the recall big bug was fixed Signed-off-by: kcw-grunt * Need to work in the Showing and hiding the announce view Havenā€™t figured out how to show and hide the AnnounceView then show the tabVC - Sometimes it reads the evaluation and sometimes it doesnt - removed the current user signup sheet Signed-off-by: kcw-grunt * added LWAnalytics notifications Signed-off-by: kcw-grunt * added amount field Signed-off-by: kcw-grunt * prelayout of the amount in the send SwiftUI send Signed-off-by: kcw-grunt * added memo and Amount Signed-off-by: kcw-grunt * added hack to make it work Signed-off-by: kcw-grunt * cleanup of unused code Signed-off-by: kcw-grunt * cleanup of other efforts to debug Signed-off-by: kcw-grunt * readded the didStartEditing Signed-off-by: kcw-grunt * Readded then Address Cell View - Still have the issues the ModalViewController height Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt * resolve conflicts Signed-off-by: kcw-grunt * Added a address test (#220) Signed-off-by: kcw-grunt * updated gitignore * mod gitignore (#223) Signed-off-by: kcw-grunt * šŸš€[Release v3.12.1] Merge into Develop (#228) * Develop (#111) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts Co-authored-by: Mohamed Barry * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Release v2.8.3] Merge into Master (#167) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v2.9.0] into Master (#170) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * version bump * Minor bugfix: reordered UD address lines to set the first responderā€¦duh * build update * Resolve conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Release v2.8.3] Merge into Master (#167) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v2.9.0] into Master (#170) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * version bump Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Feature Issue 154] Adding Unstoppable Domains functionality (#155) * Added UD to Podfile - Stubbed out the view, viewModel and the test class for UD * [UI Polish] Added images and localized strings - Added more of strings and UD structure - Trimmed images to resize for button - Added localized strings for placeholder * Updated UnstoppableDomainsView and Model details - Added DEV notes script - Adjusted Previews by unchecking the `build install only` * Added more tests - UnstoppableDomains View Model tests - SupportLitecoinFoundationViewModel tests * reformatted code in new SwiftUI views and viewModels * Added UD action to the SendViewController * Updated project * Updated localized UD Placeholder * Setup API keys * removed pk file * Changed the localizations related to UD - Added ā€˜Orā€™ label - Added UD placeholder text - Changed the LTC address placeholder text * Added in the Or and relayout of the button - Added Partner layout view for UD and Simplex * Resolved code review comments - Update the localizations - Refactored the UD shared instance (singleton) to retain throguh the call - Added timing probes * revert to current version * reformatted the Support LF view strings * Remove Test Playground. * Removed unused SocialView and ViewModel * Improved resolution - Added a Dispatch and ā€˜exitā€™ when address is found sooner than 12 secs. Much better experience for the user. * Added infura * Resolved review comments * Rewrote copy for ā€œEnter a Litecoin addressā€ * version bump * Minor bugfix: reordered UD address lines to set the first responderā€¦duh * build update * Resolve conflicts Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov * [Merge v3.0.0] into Master (#183) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * Fix crash in Amount formatter (#140) * šŸ¦ŗ [Tech Debt] Update Podfile and Refactor build process (#144) * Update Podfile - Set mimum value of iOS 13 - Removed unused SwiftyJSON - Removed unused Watch Scheme - re-added xcscheme - removed non-used code - added status badge in README * removed the podfile target force * added SPM .build folder exclusion in gitignore * [Bugfix] Renamed enum from State (#147) * Renamed enum from State ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` * Toggled iOS version 13 * Revert "[Bugfix] Renamed enum from State (#147)" (#150) This reverts commit ea8293b5c7f206706942416a1d7d9b139926fa97. * [Warmfix] Issue:146 Remove direct donation: support litecoin foundation (#151) * Prepared the code for differnt Cell / Remove Donation Code - Updated localized strings file(s) - Removed old Donate files - Updated SendVIewController * Resolved the previous conflicts - Added in SupportLitecoinFoundation SwiftUI view and model - Working in the basic functionality of the new Support Litecoin Foundation view * Worked in the vars of SupportLitecoinFoundation view * Removed Donation code * Set a URL for the support LTC address * Add new WebKit view and supporting code * Adjusted height constants in the nightmare scenario of the SendCell -There is a nasty sandwich of ViewControllers where SwiftUI should be used. - This needs to be simplified # Conflicts: # loafwallet/src/ViewControllers/RootModals/SendViewController.swift * Added new MVVM Views and ViewModels - Adding more SwiftUI code * Refactored and stubbed out tests * version bump * Renamed enum from State to ReduxState ## Problem The original design of Breadwallet (Loafwallet) used a SimpleRedux architecture which maanged the State in an unsual (yet effective) way. Within that design ā€˜stateā€™ was managed by an enum named ā€œStateā€ This was fine until SwiftUI and Combine where there is now a name collision since @State is referring to the SwfitUI attribute. ## Approach While redesiging the app would be ideal, the reality is this needs to be fixed as soon as possible because Litewallet is now using SwiftUI. Steps to fix the problem: - [ ] Renamed variable from `State` to `ReduxState` using Xcode Refactor: Rename * Cleaned up Localized strings file * Added review fixes - Added CGFloat multiplier in padding - Fixed formatting - Added tracking Support taps * [Release] Merge v2.8.2 into Develop (#158) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Develop ## Release Notes: v2.8.2 (1) This release is due to a requirement to App Store to remove references to donations. In itā€™s replacement, a reference to the Litecoin Foundation support page where the user can elect to send LTC if they so choose. - [Warmfix] Issue:146 Remove direct donation: support litecoin foundatiā€¦ ## Other Improvements - Fix crash in Amount formatter (#140) - [Bugfix] Renamed enum from State (#147) (#150) ## Bugfixes - Renaming the enum caused a conflict with SwiftUI @State ## Authors Kerry Washington Mohamed Barry * Hotfix Increment -Updated to allow upload to App Store * build number change * fixed conflicts Co-authored-by: Mohamed Barry * [Bugfix] Replace the LF Support View (#159) * Moved the LF Cell from Send. - BartyCrouch linted the stigns files. * Updated the LF Support location - Reset the localiaztion language to ā€˜Customer supportā€™ - Add the dismissal actions * [Bugfix] Fix buy tab: Simplex urls (#157) * Updated the url to new servers * Linted the Localized strings * Setup url constants * updated pk file status * Updated per PR review comments * fixed naming of the url variable * [Merge v2.8.3] into Develop (#169) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Release/v2.8.0 (#131) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * ## Release Notes: v2.8.0 (version bump) This release is the first release in months that needed an update based on the changes in the enviroment. In general, the Litewallet code base is bloated with 1000's of lines of unused code and this makes debugging and adding new features very difficult. In addition, the requirements of iOS 14 and the plan to move from UIKit to a SwiftUI+Combine architecture means subsequent PRs will reflect a more streamlined codebase. ## Tech Debt - Also have watch xcscheme added per upgrade - Added Issue templates (#122) - Bug Report - Feature Request - Updated key for RemoteRunnable in xcscheme - remove unused fonts - run code on main thread - update cocoapods firebase - update addresses + event ## Improvements * compute QR code only once - Soft launch for Import QR Code ## Bugfixes * fix crash: window required ## Temporary Workarounds The proxy server the supports buying LTC is being refactored and so no mobile clients can use the Simplex service * Disabled Simplex / Added temp message - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker - Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message ## Authors Kerry Washington Mohamed Barry * Removed schemes (#125) Goal: Reduce the codebase in prep for a major refactor. This removed the debug scheme and watch scheme. * [Tech Debt] Remove Apple Watch code (#124) * Remove Apple Watch code - The Apple Code is very old and has never been updated. - There is a longer plan to remove superflous code. - If others ask to re-add it we will look again with the later versions * Removed NotificationServiceExtension - This is cruft that has never been called - Added in 2016 - This is not supported currently * Change email addresses Also added feedback and support emails. * Added HTML for support email Fixed bitcoin references * Removed empty UITests * bump build number * updated html to be for iPhone only * Fix podfile and build version * Revert "[Bugfix] Cleared Simplex (#126)" This reverts commit 154eb4fbbe71b4ff1a2323dd316bf7b6783c3b0a. * bump build number Co-authored-by: Mohamed Barry * [Release v2.8.2] Merge into Master (#153) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade * [Bugfix] Cleared Simplex (#126) * Disabled Simplex - Was causing crashes when return messages were happening. - Will update in the next cycle with an updated UI - Added a Analytics: DID TAP BUY TAB marker * Added Coming Soon label to the tableview background view for a temporary sign - Added all translation for the coming soon message * Develop - Release/v2.8.0 (#132) * [Merge to Master] Develop with tech debt improvements (#123) * fix crash: window required * compute QR code only once * run code on main thread * update cocoapods firebase * update addresses + event * version bump * remove unused fonts * Updated key for RemoteRunnable in xcscheme * Added Issue templates (#122) - Bug Report - Feature Request - Also have watch xcscheme added per upgrade Co-authored-by: Mohamed Barry * Good progressā€¦.all transactions are showing now Signed-off-by: kcw-grunt * Fixed the layout issue with the transactions On Demand Resources stub /// Inspired by https://www.youtube.com/watch?v=B5RV8p4-9a8&t=178s - Refactor - Refactor tieredOps - USD based fee Signed-off-by: kcw-grunt * Refactor to clean up Signed-off-by: kcw-grunt * Refactor for error messages - added more test error messages - removed unused File test file - Added WIP NSPrivacyAccessedAPIType Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt * šŸš€[Release v3.13.1-20240322.0] Merge into Develop #235 (#236) * removed registerBG Added more error messages Signed-off-by: kcw-grunt * Converted DispatchQueue to Task method - bump version Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt * Fix/transaction crashes 240 (#243) * Added note Signed-off-by: kcw-grunt * fix: invalid data and incorrect subscripting in . * refactor: function inside WalletCoordinator * fix: tableview called in the background thread * auto linter changes Updated the timer intervals to allow more time for CPU to process Signed-off-by: kcw-grunt * version bump Signed-off-by: kcw-grunt * added privacy nutrition label version bump Signed-off-by: kcw-grunt * Refactors - Added enum Error for throws - Reset the PartnerData plist code - reset tags Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt Co-authored-by: Hassan Ashraf * Bugfix/general maintenance (#238) * refactor - refactor: function inside WalletCoordinator - fix: invalid data and incorrect subscripting in . - fix: tableview called in the background thread - Auto linter changes - Updated the timer intervals to allow more time for CPU to process - version bump - added privacy nutrition label - Added the new price updating every 3 secs - unused code - unwrapped the Task in SyncHeaderView - Test to emulate DQ Signed-off-by: kcw-grunt * reduced the debounce - Fixed the rescan localization problem - Shortened the sync steps Signed-off-by: kcw-grunt * version bump Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt Co-authored-by: Hassan Ashraf * version bump Signed-off-by: kcw-grunt * removed unused code Signed-off-by: kcw-grunt * Added Ukrainian localizations - version bump Signed-off-by: kcw-grunt * Disabled bitrefill until compliance docs received Adjusted low fees tier Signed-off-by: kcw-grunt * version bump - Removed Unstoppable code - Uncommented out Bitrefill - added more branding Signed-off-by: kcw-grunt * bugfix of SyncProgress crash https://console.firebase.google.com/project/litewallet-beta/crashlytics/app/ios:com.litecoin.loafwallet/issues/fecabb7c7120dca59920bd7a1918c710?time=last-seven-days&types=crash&sessionEventKey=040a831703ba417ab9c755d44759ced2_1949520751979676838 - Removed Unstoppable code - Uncommented out Bitrefill - added more branding - Need to redesign Moonpay for Apple meeting - Added labels Signed-off-by: kcw-grunt Further polishing the new buy view - rebuilt moonpay view - removed unused logos - added paste button - improved layout - Added non-buy country tabBar ViewController - Fixed the region filter to change tabbar for unsupported countries - Added unsupported event for Firebase - Reset sync params to original value Signed-off-by: kcw-grunt Refactored code Signed-off-by: kcw-grunt * šŸš€[Release v3.13.5] Merge into Develop (#245) * version bump Signed-off-by: kcw-grunt * removed unused code Signed-off-by: kcw-grunt * Added Ukrainian localizations - version bump Signed-off-by: kcw-grunt * Disabled bitrefill until compliance docs received Adjusted low fees tier Signed-off-by: kcw-grunt * version bump - Removed Unstoppable code - Uncommented out Bitrefill - added more branding Signed-off-by: kcw-grunt * bugfix of SyncProgress crash https://console.firebase.google.com/project/litewallet-beta/crashlytics/app/ios:com.litecoin.loafwallet/issues/fecabb7c7120dca59920bd7a1918c710?time=last-seven-days&types=crash&sessionEventKey=040a831703ba417ab9c755d44759ced2_1949520751979676838 - Removed Unstoppable code - Uncommented out Bitrefill - added more branding - Need to redesign Moonpay for Apple meeting - Added labels Signed-off-by: kcw-grunt Further polishing the new buy view - rebuilt moonpay view - removed unused logos - added paste button - improved layout - Added non-buy country tabBar ViewController - Fixed the region filter to change tabbar for unsupported countries - Added unsupported event for Firebase - Reset sync params to original value Signed-off-by: kcw-grunt Refactored code Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt --------- Signed-off-by: kcw-grunt Co-authored-by: Mohamed Barry Co-authored-by: Nikolay Spassov Co-authored-by: Jasper Heist Co-authored-by: JCHeist <51417840+JasperHeist@users.noreply.github.com> Co-authored-by: Iferencak Co-authored-by: Hassan Ashraf --- .gitignore | 3 +- Dakar, Senegal.gpx | 19 + PrivacyInfo.xcprivacy | 104 + litewallet.xcodeproj/project.pbxproj | 5245 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + litewallet/AddressFieldView.swift | 3 +- litewallet/AppDelegate.swift | 47 +- litewallet/ApplicationController.swift | 64 +- litewallet/ArticleIds.swift | 1 + .../Branding/Logo.imageset/Contents.json | 8 +- .../newLogotyoe-white.imageset/Contents.json | 2 +- .../MenuButtonIcon.imageset/Contents.json | 8 +- .../MenuIcons/Profile.imageset/Contents.json | 8 +- .../moonpay-white-logo.imageset/Contents.json | 21 + .../moonpay-white.png | Bin 0 -> 16366 bytes .../buy_icon.imageset/Contents.json | 8 +- .../Contents.json | 21 + .../sendTabIconwhiteinterdit.pdf | Bin 0 -> 10133 bytes litewallet/AssociatedObject.swift | 6 +- litewallet/BRAPIClient+Events.swift | 13 +- litewallet/BRAPIClient+KV.swift | 124 +- litewallet/BRAPIClient+Wallet.swift | 18 +- litewallet/BRKeyExtension.swift | 17 +- litewallet/BRPeerManager.swift | 26 +- litewallet/BRTxInputExtension.swift | 5 - litewallet/BartyCrouch.swift | 10 +- litewallet/Base.lproj/LaunchScreen.storyboard | 24 +- litewallet/BundleExtension.swift | 12 +- litewallet/BuyHostingController.swift | 51 + litewallet/BuyTableViewController.swift | 9 +- litewallet/BuyTileView.swift | 45 + litewallet/BuyView.swift | 177 + litewallet/BuyViewModel.swift | 73 + .../ChildViewTransitioningDelegate.swift | 9 +- litewallet/Constants/Constants+Events.swift | 9 + litewallet/Constants/Functions.swift | 13 +- litewallet/Constants/Strings.swift | 17 +- litewallet/Currency.swift | 11 +- litewallet/EnterPhraseViewModel.swift | 1 + litewallet/Environment.swift | 8 +- litewallet/Extensions/Async.swift | 5 +- .../Extensions/CGContext+Additions.swift | 4 +- .../NumberFormatter+Additions.swift | 3 +- .../Extensions/SafariServices+Extension.swift | 18 +- litewallet/Extensions/String+Additions.swift | 33 + .../UIView+AnimationAdditions.swift | 6 +- .../Extensions/UIView+BRWAdditions.swift | 6 +- .../UIViewPropertyAnimator+BRWAdditions.swift | 6 +- .../Extensions/UserDefaults+Additions.swift | 2 +- litewallet/FeeManager.swift | 13 +- .../FlowControllers/MessageUIPresenter.swift | 6 +- .../StartNavigationDelegate.swift | 3 +- litewallet/ForgotView.swift | 115 - litewallet/Functions.swift | 6 +- litewallet/LWActivityIndicator.swift | 6 +- litewallet/LocaleChangeViewModel.swift | 1 + litewallet/LockScreenHeaderView.swift | 19 +- litewallet/LockScreenHeaderViewModel.swift | 15 +- litewallet/LoginViewController.swift | 23 +- litewallet/MainViewController.swift | 109 +- litewallet/MessageUIPresenter.swift | 6 +- litewallet/ModalPresenter.swift | 33 +- litewallet/MoonpayHelper.swift | 68 + litewallet/NoBuyTabBarViewController.swift | 419 ++ litewallet/PartnerData.swift | 16 +- litewallet/PaymentProtocol.swift | 27 +- litewallet/PaymentRequest.swift | 3 +- litewallet/PinDigitView.swift | 1 + litewallet/Platform/BRAPIClient.swift | 12 +- litewallet/Platform/BRActivityView.swift | 4 - litewallet/Platform/BRReplicatedKVStore.swift | 20 +- litewallet/Platform/BRTar.swift | 9 +- litewallet/Platform/BRWebViewController.swift | 31 +- litewallet/Platform/Extensions.swift | 56 +- litewallet/Platform/TxMetaData.swift | 4 +- litewallet/PromptTableViewCell.swift | 4 +- litewallet/ReachabilityMonitor.swift | 6 +- litewallet/ReceiveLTCViewController.swift | 9 - litewallet/RequestAmountViewController.swift | 3 +- litewallet/Sender.swift | 4 +- litewallet/SimpleRedux.swift | 9 +- litewallet/StartNavigationDelegate.swift | 3 +- litewallet/StartView.swift | 29 +- litewallet/StartViewModel.swift | 135 +- litewallet/Storyboards/Buy.storyboard | 383 +- litewallet/Storyboards/Main.storyboard | 101 +- .../XIBs/SyncProgressHeaderView.xib | 10 +- .../Strings/Base.lproj/Localizable.strings | 15 - .../Strings/it.lproj/Localizable.strings | 6 - .../Strings/uk.lproj/Localizable.strings | 48 +- .../SupportLitecoinFoundationView.swift | 3 - litewallet/SyncProgressHeaderView.swift | 2 +- litewallet/TabBarViewController.swift | 24 +- litewallet/TransactionCellViewModel.swift | 2 - litewallet/TransactionModalView.swift | 8 - litewallet/TransactionsViewController.swift | 26 +- litewallet/TransferAmountViewModel.swift | 73 - .../UnsafeMutablePointerExtension.swift | 3 +- .../AmountViewController.swift | 2 +- ...iometricsSpendingLimitViewController.swift | 3 +- .../ConfirmPaperPhraseViewController.swift | 12 +- .../EnterPhraseCollectionViewController.swift | 3 +- .../EnterPhraseViewController.swift | 8 +- .../Import/StartImportViewController.swift | 30 +- .../ViewControllers/LoginViewController.swift | 49 +- .../PinPadViewController.swift | 11 +- .../ReScanViewController.swift | 22 +- .../RequestAmountViewController.swift | 3 +- .../ManageWalletViewController.swift | 3 +- .../RootModals/MenuViewController.swift | 4 +- .../RootModals/ReceiveViewController.swift | 3 +- .../RootModals/SendViewController.swift | 15 +- .../ViewControllers/ScanViewController.swift | 9 +- .../UpdatePinViewController.swift | 3 +- .../SettingsViewController.swift | 8 +- .../LoginTransitionDelegate.swift | 3 +- .../ModalTransitionDelegate.swift | 9 +- .../PinTransitioningDelegate.swift | 6 +- .../WritePaperPhraseViewController.swift | 5 +- litewallet/ViewModels/Transaction.swift | 31 +- litewallet/Views/AlertView.swift | 11 - .../Views/DefaultCurrencyViewController.swift | 3 +- litewallet/Views/ModalHeaderView.swift | 3 +- litewallet/Views/PinView.swift | 4 +- litewallet/Views/SearchHeaderView.swift | 3 - .../Views/SendViewCells/AddressCell.swift | 3 +- .../SendViewCells/DescriptionSendCell.swift | 3 +- litewallet/Views/ShadowButton.swift | 1 - litewallet/Wallet/ExchangeUpdater.swift | 10 +- litewallet/WalletCoordinator.swift | 57 +- litewallet/WalletManager+Auth.swift | 6 +- litewallet/WalletManager.swift | 30 +- litewallet/de.lproj/Localizable.strings | 15 - litewallet/en.lproj/Localizable.strings | 12 - litewallet/src/AppDelegate.swift | 9 +- litewallet/src/ApplicationController.swift | 3 +- litewallet/src/Constants/Functions.swift | 6 +- litewallet/src/Environment.swift | 14 +- litewallet/src/Extensions/Async.swift | 5 +- .../src/Extensions/CGContext+Additions.swift | 4 +- .../NumberFormatter+Additions.swift | 3 +- .../UIView+AnimationAdditions.swift | 6 +- .../src/Extensions/UIView+BRWAdditions.swift | 6 +- .../UIViewPropertyAnimator+BRWAdditions.swift | 6 +- .../FlowControllers/MessageUIPresenter.swift | 6 +- .../StartNavigationDelegate.swift | 3 +- litewallet/src/ModalPresenter.swift | 13 +- litewallet/src/PaymentProtocol.swift | 27 +- litewallet/src/PaymentRequest.swift | 3 +- litewallet/src/PinDigitView.swift | 1 + litewallet/src/Platform/BRAPIClient.swift | 12 +- .../src/Platform/BRReplicatedKVStore.swift | 14 +- litewallet/src/Platform/BRTar.swift | 9 +- .../src/Platform/BRWebViewController.swift | 31 +- litewallet/src/Platform/Extensions.swift | 56 +- litewallet/src/ReachabilityMonitor.swift | 6 +- litewallet/src/Sender.swift | 4 +- litewallet/src/SimpleRedux.swift | 9 +- litewallet/src/StartView.swift | 21 +- .../AmountViewController.swift | 2 +- ...iometricsSpendingLimitViewController.swift | 3 +- .../ConfirmPaperPhraseViewController.swift | 12 +- .../EnterPhraseCollectionViewController.swift | 3 +- .../EnterPhraseViewController.swift | 8 +- .../Import/StartImportViewController.swift | 24 +- .../ViewControllers/LoginViewController.swift | 23 +- .../PinPadViewController.swift | 11 +- .../RequestAmountViewController.swift | 3 +- .../ManageWalletViewController.swift | 3 +- .../RootModals/MenuViewController.swift | 4 +- .../RootModals/ReceiveViewController.swift | 3 +- .../RootModals/SendViewController.swift | 15 +- .../ViewControllers/ScanViewController.swift | 9 +- .../UpdatePinViewController.swift | 3 +- .../SettingsViewController.swift | 8 +- .../LoginTransitionDelegate.swift | 3 +- .../ModalTransitionDelegate.swift | 9 +- .../PinTransitioningDelegate.swift | 6 +- .../WritePaperPhraseViewController.swift | 5 +- litewallet/src/ViewModels/Transaction.swift | 21 +- litewallet/src/Views/AlertView.swift | 4 - .../Views/DefaultCurrencyViewController.swift | 3 +- litewallet/src/Views/ModalHeaderView.swift | 3 +- litewallet/src/Views/PinView.swift | 4 +- .../src/Views/SendViewCells/AddressCell.swift | 3 +- .../SendViewCells/DescriptionSendCell.swift | 3 +- litewallet/src/WalletCoordinator.swift | 3 +- litewallet/src/WalletManager+Auth.swift | 6 +- litewallet/src/WalletManager.swift | 31 +- .../TabBarViewControllerTests.swift | 18 + .../LocaleTests.swift | 140 + .../BRReplicatedKVStoreTests.swift | 12 +- litewalletTests/TestHelpers.swift | 2 +- 194 files changed, 7573 insertions(+), 1786 deletions(-) create mode 100644 Dakar, Senegal.gpx create mode 100644 PrivacyInfo.xcprivacy create mode 100644 litewallet.xcodeproj/project.pbxproj create mode 100644 litewallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 litewallet.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/Contents.json create mode 100644 litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/moonpay-white.png create mode 100644 litewallet/Assets.xcassets/white-interdit-send-icon.imageset/Contents.json create mode 100644 litewallet/Assets.xcassets/white-interdit-send-icon.imageset/sendTabIconwhiteinterdit.pdf create mode 100644 litewallet/BuyHostingController.swift create mode 100644 litewallet/BuyTileView.swift create mode 100644 litewallet/BuyView.swift create mode 100644 litewallet/BuyViewModel.swift create mode 100644 litewallet/MoonpayHelper.swift create mode 100644 litewallet/NoBuyTabBarViewController.swift create mode 100644 litewalletTests/Language Selection Tests/LocaleTests.swift diff --git a/.gitignore b/.gitignore index 2dd78c5b1..28b294117 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ Modules/litewallet-partner-api-ios litewallet-partner-api-ios /partner-keys.plist partner-keys.plist -GoogleService-Info.plist \ No newline at end of file +GoogleService-Info.plist +*.gpx diff --git a/Dakar, Senegal.gpx b/Dakar, Senegal.gpx new file mode 100644 index 000000000..25366a782 --- /dev/null +++ b/Dakar, Senegal.gpx @@ -0,0 +1,19 @@ + + + + new + + gpx.studio + + + + + new + Cycling + + + 23.1 + + + + \ No newline at end of file diff --git a/PrivacyInfo.xcprivacy b/PrivacyInfo.xcprivacy new file mode 100644 index 000000000..4b94fe8a5 --- /dev/null +++ b/PrivacyInfo.xcprivacy @@ -0,0 +1,104 @@ + + + + + NSPrivacyTracking + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePerformanceData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherUsageData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeProductInteraction + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + + diff --git a/litewallet.xcodeproj/project.pbxproj b/litewallet.xcodeproj/project.pbxproj new file mode 100644 index 000000000..8b1bd8c7f --- /dev/null +++ b/litewallet.xcodeproj/project.pbxproj @@ -0,0 +1,5245 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1B3F74231FFB106200CCA50C /* BiometricsSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3F74211FFB106200CCA50C /* BiometricsSettingsViewController.swift */; }; + 1B3F74241FFB106200CCA50C /* BiometricsSpendingLimitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3F74221FFB106200CCA50C /* BiometricsSpendingLimitViewController.swift */; }; + 1BA9FE3D216F68A700BB2DE8 /* BRBech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BA9FE3C216F68A700BB2DE8 /* BRBech32.c */; }; + 1BBAEC841F8025C10047DEA8 /* BRTransaction.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEC051F80237B0047DEA8 /* BRTransaction.c */; }; + 1BBAEC851F8025C90047DEA8 /* BRPeer.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBFF1F80237B0047DEA8 /* BRPeer.c */; }; + 1BBAEC861F8025D20047DEA8 /* BRBIP38Key.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBEF1F80237B0047DEA8 /* BRBIP38Key.c */; }; + 1BBAEC871F8025D80047DEA8 /* BRAddress.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBE81F80237B0047DEA8 /* BRAddress.c */; }; + 1BBAEC881F8025DF0047DEA8 /* BRBase58.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBEB1F80237B0047DEA8 /* BRBase58.c */; }; + 1BBAEC891F8025E60047DEA8 /* BRBloomFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBF41F80237B0047DEA8 /* BRBloomFilter.c */; }; + 1BBAEC8A1F8025EF0047DEA8 /* BRBIP39Mnemonic.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBF11F80237B0047DEA8 /* BRBIP39Mnemonic.c */; }; + 1BBAEC8B1F8025F60047DEA8 /* BRKey.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBF91F80237B0047DEA8 /* BRKey.c */; }; + 1BBAEC8C1F8025FC0047DEA8 /* BRPeerManager.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEC011F80237B0047DEA8 /* BRPeerManager.c */; }; + 1BBAEC8D1F8026030047DEA8 /* BRPaymentProtocol.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBFD1F80237B0047DEA8 /* BRPaymentProtocol.c */; }; + 1BBAEC8E1F8026090047DEA8 /* BRCrypto.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEC7D1F8025020047DEA8 /* BRCrypto.c */; }; + 1BBAEC8F1F8026130047DEA8 /* BRSet.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEC031F80237B0047DEA8 /* BRSet.c */; }; + 1BBAEC901F80261D0047DEA8 /* BRMerkleBlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBFB1F80237B0047DEA8 /* BRMerkleBlock.c */; }; + 1BBAEC911F8026250047DEA8 /* BRBIP32Sequence.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEBED1F80237B0047DEA8 /* BRBIP32Sequence.c */; }; + 1BBAEC921F80262A0047DEA8 /* BRWallet.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BBAEC071F80237B0047DEA8 /* BRWallet.c */; }; + 22122B721F0B8996000E9AB9 /* BRAPIClient+Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22122B711F0B8996000E9AB9 /* BRAPIClient+Events.swift */; }; + 222319B21F279B3C00008F20 /* POSTBouncer.html in Resources */ = {isa = PBXBuildFile; fileRef = 222319B11F279B3C00008F20 /* POSTBouncer.html */; }; + 2228734F1E916FC30044BA15 /* BRAPIClient+Wallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2228734E1E916FC30044BA15 /* BRAPIClient+Wallet.swift */; }; + 222C42501E90492800078EB5 /* BRAPIClient+KV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 222C424F1E90492800078EB5 /* BRAPIClient+KV.swift */; }; + 223DB2151DF654940076A151 /* WalletManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75519F331DC7D20500EDF66C /* WalletManager.swift */; }; + 223DB2191DF691260076A151 /* BRSocketHelpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 223DB2171DF691260076A151 /* BRSocketHelpers.c */; }; + 22A9A9461DF61945000F0016 /* BRAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A9A9321DF61945000F0016 /* BRAPIClient.swift */; }; + 22A9A94B1DF61945000F0016 /* BRCoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A9A9371DF61945000F0016 /* BRCoding.swift */; }; + 22A9A9511DF61945000F0016 /* TxMetaData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A9A93D1DF61945000F0016 /* TxMetaData.swift */; }; + 22A9A9541DF61945000F0016 /* BRReplicatedKVStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A9A9401DF61945000F0016 /* BRReplicatedKVStore.swift */; }; + 22A9A9591DF61945000F0016 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A9A9451DF61945000F0016 /* Extensions.swift */; }; + 22A9A95E1DF61FD0000F0016 /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22A9A95D1DF61FD0000F0016 /* PushKit.framework */; }; + 22A9A9601DF61FD8000F0016 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22A9A95F1DF61FD8000F0016 /* CoreLocation.framework */; }; + 22A9A9621DF61FE0000F0016 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22A9A9611DF61FE0000F0016 /* SystemConfiguration.framework */; }; + 22A9A9641DF61FE7000F0016 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22A9A9631DF61FE7000F0016 /* Security.framework */; }; + 22A9A9661DF61FEE000F0016 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22A9A9651DF61FEE000F0016 /* WebKit.framework */; }; + 24016D9023F913C1006A6791 /* LWAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24016D8F23F913C1006A6791 /* LWAnalytics.swift */; }; + 2427342D2381C21800E2D22F /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2427342B2381C21800E2D22F /* MainViewController.swift */; }; + 24306797238F3DF900EBEA99 /* BartyCrouch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24306796238F3DF900EBEA99 /* BartyCrouch.swift */; }; + 24313C752381E73200A83F69 /* TransactionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C732381E73200A83F69 /* TransactionManager.swift */; }; + 24313C7B23820BC200A83F69 /* SendLTCViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C7923820BC200A83F69 /* SendLTCViewController.swift */; }; + 24313C7E23820C1900A83F69 /* TransactionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C7C23820C1900A83F69 /* TransactionsViewController.swift */; }; + 24313C8423820C4B00A83F69 /* ReceiveLTCViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C8223820C4B00A83F69 /* ReceiveLTCViewController.swift */; }; + 24313C8723821B8C00A83F69 /* PromptTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C8523821B8C00A83F69 /* PromptTableViewCell.swift */; }; + 24313C922382433700A83F69 /* LFModalReceiveQRViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24313C902382433700A83F69 /* LFModalReceiveQRViewController.swift */; }; + 24313C9B23824F5800A83F69 /* Transactions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9323824F5700A83F69 /* Transactions.storyboard */; }; + 24313C9D23824F5800A83F69 /* Alerts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9423824F5700A83F69 /* Alerts.storyboard */; }; + 24313C9F23824F5800A83F69 /* Animate.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9523824F5700A83F69 /* Animate.storyboard */; }; + 24313CA123824F5800A83F69 /* Receive.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9623824F5800A83F69 /* Receive.storyboard */; }; + 24313CA323824F5800A83F69 /* Send.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9723824F5800A83F69 /* Send.storyboard */; }; + 24313CA523824F5800A83F69 /* Buy.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313C9823824F5800A83F69 /* Buy.storyboard */; }; + 24313CAA23824F9800A83F69 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24313CA823824F9800A83F69 /* Main.storyboard */; }; + 24393B5C23C259400075218D /* Phrase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24393B5B23C259400075218D /* Phrase.storyboard */; }; + 24470E2123A5DA9700ADDA27 /* APIManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E2023A5DA9700ADDA27 /* APIManagerTests.swift */; }; + 24470E2323A5DB7D00ADDA27 /* WalletManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E2223A5DB7D00ADDA27 /* WalletManagerTests.swift */; }; + 24470E2A23A5F33000ADDA27 /* BRReplicatedKVStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E2923A5F33000ADDA27 /* BRReplicatedKVStoreTests.swift */; }; + 24470E2C23A5F43B00ADDA27 /* DefaultFiatCurrencyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E2B23A5F43B00ADDA27 /* DefaultFiatCurrencyTests.swift */; }; + 24470E2E23A5F4FF00ADDA27 /* BRCoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E2D23A5F4FF00ADDA27 /* BRCoderTests.swift */; }; + 24470E3223A5F5B100ADDA27 /* NSDataExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3123A5F5B100ADDA27 /* NSDataExtensionTests.swift */; }; + 24470E3423A5F5E600ADDA27 /* PaymentRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3323A5F5E600ADDA27 /* PaymentRequestTests.swift */; }; + 24470E3623A5FDE800ADDA27 /* PhraseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3523A5FDE800ADDA27 /* PhraseTests.swift */; }; + 24470E3823A5FEF200ADDA27 /* SpendingLimitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3723A5FEF200ADDA27 /* SpendingLimitTests.swift */; }; + 24470E3A23A5FF5700ADDA27 /* TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3923A5FF5700ADDA27 /* TestHelpers.swift */; }; + 24470E3C23A5FFD700ADDA27 /* TouchIdEnabledTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3B23A5FFD700ADDA27 /* TouchIdEnabledTests.swift */; }; + 24470E3E23A6000900ADDA27 /* WalletAuthenticationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3D23A6000900ADDA27 /* WalletAuthenticationTests.swift */; }; + 24470E4023A6004800ADDA27 /* WalletCreationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E3F23A6004800ADDA27 /* WalletCreationTests.swift */; }; + 24470E4223A6007200ADDA27 /* WalletInfoTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E4123A6007200ADDA27 /* WalletInfoTest.swift */; }; + 24470E4523A608A700ADDA27 /* AmountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E4423A608A700ADDA27 /* AmountTests.swift */; }; + 24470E4723A6B6E900ADDA27 /* MockSeeds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24470E4623A6B6E900ADDA27 /* MockSeeds.swift */; }; + 24670EAE2368EDE7006093E0 /* LFColorPalette.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 24670EAC2368EDE7006093E0 /* LFColorPalette.xcassets */; }; + 2485F7D023728C19005962F1 /* RELEASE_NOTES.md in Resources */ = {isa = PBXBuildFile; fileRef = 2485F7CE23728C19005962F1 /* RELEASE_NOTES.md */; }; + 248BFE2623AB302200CE1A71 /* BuyWKWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 248BFE2523AB302200CE1A71 /* BuyWKWebViewController.swift */; }; + 2494037623AD35C000369261 /* BuyWKWebVCTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2494037523AD35C000369261 /* BuyWKWebVCTests.swift */; }; + 2494037823AD53B900369261 /* ChildViewTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2494037723AD53B900369261 /* ChildViewTransitioningDelegate.swift */; }; + 2494037E23AE0C7100369261 /* SyncProgressHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2494037C23AE0C7100369261 /* SyncProgressHeaderView.swift */; }; + 2494037F23AE0C7100369261 /* SyncProgressHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2494037D23AE0C7100369261 /* SyncProgressHeaderView.xib */; }; + 2494038123AF208F00369261 /* PromptModalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2494038023AF208F00369261 /* PromptModalViewController.swift */; }; + 24A6DCFC2230BD9000505F44 /* WipeEmptyWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A6DCFA2230BD9000505F44 /* WipeEmptyWalletViewController.swift */; }; + 24AF00FE221B331D00FF636F /* WarningConfirmation.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24AF00FC221B331D00FF636F /* WarningConfirmation.storyboard */; }; + 24AF0101221B349100FF636F /* WarningConfirmationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24AF00FF221B349100FF636F /* WarningConfirmationViewController.swift */; }; + 24B523AD238A53DC0030594D /* BIP39Words.plist in Resources */ = {isa = PBXBuildFile; fileRef = 24B523AF238A53DC0030594D /* BIP39Words.plist */; }; + 24B8FAC4216128A000A155B1 /* PartnerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24B8FAC3216128A000A155B1 /* PartnerData.swift */; }; + 24B8FAD22162B10200A155B1 /* BuyCenterWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24B8FAD12162B10200A155B1 /* BuyCenterWebViewController.swift */; }; + 24B8FADF2163C4D400A155B1 /* Currency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24B8FADE2163C4D400A155B1 /* Currency.swift */; }; + 24BA90C62410129E001E3825 /* FeeSelectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BA90C52410129E001E3825 /* FeeSelectorView.swift */; }; + 24D5F23822599C0B00225462 /* BarlowSemiCondensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F22522599C0900225462 /* BarlowSemiCondensed-Italic.ttf */; }; + 24D5F23B22599C0B00225462 /* BarlowSemiCondensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F22622599C0A00225462 /* BarlowSemiCondensed-Bold.ttf */; }; + 24D5F25022599C0B00225462 /* BarlowSemiCondensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F22D22599C0A00225462 /* BarlowSemiCondensed-Light.ttf */; }; + 24D5F25922599C0B00225462 /* BarlowSemiCondensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F23022599C0B00225462 /* BarlowSemiCondensed-Medium.ttf */; }; + 24D5F25F22599C0B00225462 /* BarlowSemiCondensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F23222599C0B00225462 /* BarlowSemiCondensed-Regular.ttf */; }; + 24D5F26522599C0B00225462 /* BarlowSemiCondensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 24D5F23422599C0B00225462 /* BarlowSemiCondensed-SemiBold.ttf */; }; + 24D5F26F225A5BEA00225462 /* ContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D5F26D225A5BEA00225462 /* ContainerViewController.swift */; }; + 24D91D0B2166923E0077A619 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24D91D0A2166923E0077A619 /* UserNotifications.framework */; }; + 24DFCE6823B89CDE001F17F8 /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 24DFCE6723B89CDE001F17F8 /* Settings.storyboard */; }; + 584E24F32951C11A005E0E8B /* Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24F22951C119005E0E8B /* Localization.swift */; }; + 584E24F52951D2DC005E0E8B /* BundleExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24F42951D2DB005E0E8B /* BundleExtension.swift */; }; + 584E24F82951D412005E0E8B /* LanguageSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24F72951D412005E0E8B /* LanguageSelectionViewController.swift */; }; + 584E24FA2951D43A005E0E8B /* LanguageSelectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24F92951D43A005E0E8B /* LanguageSelectionViewModel.swift */; }; + 584E24FC2951D476005E0E8B /* NSNotificationNameExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24FB2951D476005E0E8B /* NSNotificationNameExtension.swift */; }; + 584E24FE2951D752005E0E8B /* UITableViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E24FD2951D752005E0E8B /* UITableViewExtension.swift */; }; + 584E25012951DAAA005E0E8B /* LanguageSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 584E25002951DAAA005E0E8B /* LanguageSelectionTests.swift */; }; + 7503773D1DF57428005EB8AE /* WalletManager+Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7503773C1DF57428005EB8AE /* WalletManager+Auth.swift */; }; + 751734B91DAC941E00193C87 /* sec-sub-1.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8BE1DAA16820075898E /* sec-sub-1.c */; }; + 752438751DAAC50800844BEC /* alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6761DAA0E400075898E /* alloc.c */; }; + 752438761DAAC52700844BEC /* config_file.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD67A1DAA0E400075898E /* config_file.c */; }; + 752438771DAAC55C00844BEC /* net_help.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6981DAA0E400075898E /* net_help.c */; }; + 752438781DAAC58E00844BEC /* msgreply.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6891DAA0E400075898E /* msgreply.c */; }; + 752438791DAAC5A600844BEC /* rtt.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6A21DAA0E400075898E /* rtt.c */; }; + 7524387A1DAAC5D100844BEC /* context.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4101DAA0E3E0075898E /* context.c */; }; + 7524387B1DAAC5F200844BEC /* dname.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6831DAA0E400075898E /* dname.c */; }; + 7524387C1DAAC61700844BEC /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6921DAA0E400075898E /* log.c */; }; + 7524387D1DAAC63A00844BEC /* fptr_wlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD68D1DAA0E400075898E /* fptr_wlist.c */; }; + 7524387E1DAAC65C00844BEC /* dnstree.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6A51DAA0E400075898E /* dnstree.c */; }; + 7524387F1DAAC67F00844BEC /* val_anchor.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6B91DAA0E400075898E /* val_anchor.c */; }; + 752438801DAAC6A200844BEC /* as112.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6781DAA0E400075898E /* as112.c */; }; + 752438811DAAC6C100844BEC /* autotrust.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6B71DAA0E400075898E /* autotrust.c */; }; + 752438821DAAC6E200844BEC /* val_sigcrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6C71DAA0E400075898E /* val_sigcrypt.c */; }; + 752438831DAAC74300844BEC /* libworker.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4131DAA0E3E0075898E /* libworker.c */; }; + 752438841DAAC76500844BEC /* netevent.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD69A1DAA0E400075898E /* netevent.c */; }; + 752438851DAAC7E500844BEC /* dns64.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3DB1DAA0E3E0075898E /* dns64.c */; }; + 752438861DAAC86200844BEC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4751DAA0E3E0075898E /* dns.c */; }; + 752438871DAAC87E00844BEC /* iter_delegpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3FD1DAA0E3E0075898E /* iter_delegpt.c */; }; + 752438881DAAC8B000844BEC /* val_secalgo.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6C51DAA0E400075898E /* val_secalgo.c */; }; + 7528D2981ECF655500925DBC /* PaymentProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7528D2971ECF655500925DBC /* PaymentProtocol.swift */; }; + 754868CF1DAB57A200732D70 /* msgencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6851DAA0E400075898E /* msgencode.c */; }; + 754868D01DAB57BC00732D70 /* iter_fwd.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4011DAA0E3E0075898E /* iter_fwd.c */; }; + 754868D11DAB57E900732D70 /* packed_rrset.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD68B1DAA0E400075898E /* packed_rrset.c */; }; + 754868D21DAB580B00732D70 /* msgparse.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6871DAA0E400075898E /* msgparse.c */; }; + 754868D31DAB582C00732D70 /* lookup3.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6A71DAA0E400075898E /* lookup3.c */; }; + 754868D41DAB584E00732D70 /* iter_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4031DAA0E3E0075898E /* iter_hints.c */; }; + 754868D51DAB586900732D70 /* infra.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4771DAA0E3E0075898E /* infra.c */; }; + 754868D61DAB588500732D70 /* configlexer.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD67C1DAA0E400075898E /* configlexer.c */; }; + 754868D71DAB58A100732D70 /* iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD40D1DAA0E3E0075898E /* iterator.c */; }; + 754868D81DAB58C000732D70 /* iter_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD40B1DAA0E3E0075898E /* iter_utils.c */; }; + 754868D91DAB58E000732D70 /* iter_donotq.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3FF1DAA0E3E0075898E /* iter_donotq.c */; }; + 754868DA1DAB58F900732D70 /* val_kcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6BB1DAA0E400075898E /* val_kcache.c */; }; + 754868DB1DAB591A00732D70 /* val_kentry.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6BD1DAA0E400075898E /* val_kentry.c */; }; + 754868DC1DAB593300732D70 /* localzone.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD47D1DAA0E3E0075898E /* localzone.c */; }; + 754868DD1DAB594F00732D70 /* mesh.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD47F1DAA0E3E0075898E /* mesh.c */; }; + 754868DE1DAB597B00732D70 /* mini_event.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6941DAA0E400075898E /* mini_event.c */; }; + 754868DF1DAB599700732D70 /* modstack.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4811DAA0E3E0075898E /* modstack.c */; }; + 754868E01DAB5A8400732D70 /* mini-gmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD84B1DAA16820075898E /* mini-gmp.c */; }; + 754868E21DAB5B0200732D70 /* bignum.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD75A1DAA16810075898E /* bignum.c */; }; + 754868E31DAB5B3B00732D70 /* rsa.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8B01DAA16820075898E /* rsa.c */; }; + 754868E41DAB5B6400732D70 /* rsa-sha1-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8A61DAA16820075898E /* rsa-sha1-verify.c */; }; + 754868E51DAB5B9200732D70 /* rsa-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8AF1DAA16820075898E /* rsa-verify.c */; }; + 754868E61DAB5BC200732D70 /* pkcs1-rsa-sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD88A1DAA16820075898E /* pkcs1-rsa-sha1.c */; }; + 754868E71DAB5BF900732D70 /* gmp-glue.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8201DAA16810075898E /* gmp-glue.c */; }; + 754868E81DAB5C1F00732D70 /* pkcs1.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD88D1DAA16820075898E /* pkcs1.c */; }; + 754868E91DAB5C3E00732D70 /* rsa-sha256-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8A91DAA16820075898E /* rsa-sha256-verify.c */; }; + 754868EA1DAB5C6200732D70 /* pkcs1-rsa-sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD88B1DAA16820075898E /* pkcs1-rsa-sha256.c */; }; + 754868EB1DAB5C8200732D70 /* rsa-sha512-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8AC1DAA16820075898E /* rsa-sha512-verify.c */; }; + 754868EC1DAB5CA400732D70 /* pkcs1-rsa-sha512.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD88C1DAA16820075898E /* pkcs1-rsa-sha512.c */; }; + 754868ED1DAB5CF400732D70 /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8D21DAA16820075898E /* sha1.c */; }; + 754868EE1DAB5D2100732D70 /* sha1-compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8D01DAA16820075898E /* sha1-compress.c */; }; + 754868EF1DAB5D6B00732D70 /* write-be32.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD9841DAA16830075898E /* write-be32.c */; }; + 754868F01DAB5D6F00732D70 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8D81DAA16820075898E /* sha256.c */; }; + 754868F11DAB5D9900732D70 /* sha256-compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8D61DAA16820075898E /* sha256-compress.c */; }; + 754868F21DAB5DC900732D70 /* sha512.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8E91DAA16820075898E /* sha512.c */; }; + 754868F31DAB5DEB00732D70 /* sha512-compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8E71DAA16820075898E /* sha512-compress.c */; }; + 754868F41DAB5E1100732D70 /* val_nsec3.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6C31DAA0E400075898E /* val_nsec3.c */; }; + 754868F51DAB5E3F00732D70 /* val_nsec.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6C11DAA0E400075898E /* val_nsec.c */; }; + 754868F61DAB5E6200732D70 /* outbound_list.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4831DAA0E3E0075898E /* outbound_list.c */; }; + 754868F71DAB5E8E00732D70 /* outside_network.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4851DAA0E3E0075898E /* outside_network.c */; }; + 754868F81DAB5EB500732D70 /* listen_dnsport.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD47B1DAA0E3E0075898E /* listen_dnsport.c */; }; + 754868F91DAB5EDC00732D70 /* iter_priv.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4051DAA0E3E0075898E /* iter_priv.c */; }; + 754868FA1DAB5EFE00732D70 /* rbtree.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD69E1DAA0E400075898E /* rbtree.c */; }; + 754868FB1DAB5FAD00732D70 /* regional.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6A01DAA0E400075898E /* regional.c */; }; + 754868FC1DAB5FD600732D70 /* iter_resptype.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4071DAA0E3E0075898E /* iter_resptype.c */; }; + 754868FD1DAB5FF700732D70 /* rrset.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4791DAA0E3E0075898E /* rrset.c */; }; + 754868FE1DAB601A00732D70 /* lruhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6A91DAA0E400075898E /* lruhash.c */; }; + 754868FF1DAB7AB200732D70 /* iter_scrub.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4091DAA0E3E0075898E /* iter_scrub.c */; }; + 754869001DAB7AD100732D70 /* slabhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6AB1DAA0E400075898E /* slabhash.c */; }; + 754869011DAB7B0000732D70 /* wire2str.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4951DAA0E3E0075898E /* wire2str.c */; }; + 754869021DAB7B1D00732D70 /* parseutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD48C1DAA0E3E0075898E /* parseutil.c */; }; + 754869031DAB7B3F00732D70 /* sbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4911DAA0E3E0075898E /* sbuffer.c */; }; + 754869041DAB7B6200732D70 /* keyraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4881DAA0E3E0075898E /* keyraw.c */; }; + 754869051DAB7B7F00732D70 /* str2wire.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4931DAA0E3E0075898E /* str2wire.c */; }; + 754869061DAB7B9900732D70 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD48A1DAA0E3E0075898E /* parse.c */; }; + 754869071DAB7BB500732D70 /* rrdef.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD48F1DAA0E3E0075898E /* rrdef.c */; }; + 754869081DAB7BD900732D70 /* module.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6961DAA0E400075898E /* module.c */; }; + 754869091DAB7C1400732D70 /* timehist.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6AD1DAA0E400075898E /* timehist.c */; }; + 7548690A1DAB7C3000732D70 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6AF1DAA0E400075898E /* tube.c */; }; + 7548690B1DAB7C7200732D70 /* random.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD69C1DAA0E400075898E /* random.c */; }; + 7548690C1DAB7CB600732D70 /* validator.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6CB1DAA0E400075898E /* validator.c */; }; + 7548690D1DAB7CD600732D70 /* val_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6BF1DAA0E400075898E /* val_neg.c */; }; + 7548690E1DAB7CFA00732D70 /* yarrow256.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD9BE1DAA16830075898E /* yarrow256.c */; }; + 7548690F1DAB7D1800732D70 /* aes-encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD70E1DAA16810075898E /* aes-encrypt.c */; }; + 754869101DAB7D4300732D70 /* aes-encrypt-internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD70C1DAA16810075898E /* aes-encrypt-internal.c */; }; + 754869111DAB7D6F00732D70 /* aes-encrypt-table.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD70D1DAA16810075898E /* aes-encrypt-table.c */; }; + 754869121DAB7D9C00732D70 /* aes256-set-encrypt-key.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD71D1DAA16810075898E /* aes256-set-encrypt-key.c */; }; + 754869131DAB7DC200732D70 /* aes-set-key-internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7131DAA16810075898E /* aes-set-key-internal.c */; }; + 754869141DAB7E4600732D70 /* ub_event.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6B11DAA0E400075898E /* ub_event.c */; }; + 754869151DAB7E8B00732D70 /* val_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD6C91DAA0E400075898E /* val_utils.c */; }; + 754869161DAB7F5C00732D70 /* strsep.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3A91DAA0E3E0075898E /* strsep.c */; }; + 754869171DAB7F7B00732D70 /* strlcat.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3A61DAA0E3E0075898E /* strlcat.c */; }; + 754869181DAB7F8000732D70 /* strlcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3A71DAA0E3E0075898E /* strlcpy.c */; }; + 754869191DAB7F9D00732D70 /* reallocarray.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD3A31DAA0E3E0075898E /* reallocarray.c */; }; + 7548691A1DAB7FD600732D70 /* configparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD67E1DAA0E400075898E /* configparser.c */; }; + 754AE0BC1DFE8A46007FD001 /* BRCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754AE0BB1DFE8A46007FD001 /* BRCore.swift */; }; + 759DA0A11DAB838D008CC49B /* view.c in Sources */ = {isa = PBXBuildFile; fileRef = 759DA09F1DAB838D008CC49B /* view.c */; }; + 759DA0A31DAC0D6B008CC49B /* dsa.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7AC1DAA16810075898E /* dsa.c */; }; + 759DA0A41DAC0D84008CC49B /* ecc-point.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7D71DAA16810075898E /* ecc-point.c */; }; + 759DA0A51DAC0D9F008CC49B /* ecdsa-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7E01DAA16810075898E /* ecdsa-verify.c */; }; + 759DA0A61DAC0DB8008CC49B /* ecc-ecdsa-verify.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7C81DAA16810075898E /* ecc-ecdsa-verify.c */; }; + 759DA0A71DAC0DD9008CC49B /* ecc-hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7CA1DAA16810075898E /* ecc-hash.c */; }; + 759DA0A81DAC0E01008CC49B /* ecc-mod-arith.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7CD1DAA16810075898E /* ecc-mod-arith.c */; }; + 759DA0A91DAC0E13008CC49B /* ecc-size.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7DB1DAA16810075898E /* ecc-size.c */; }; + 759DA0AB1DAC0E4D008CC49B /* ecc-mul-a.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7D11DAA16810075898E /* ecc-mul-a.c */; }; + 759DA0AC1DAC1572008CC49B /* cnd-copy.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7841DAA16810075898E /* cnd-copy.c */; }; + 759DA0AD1DAC1589008CC49B /* ecc-a-to-j.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7BF1DAA16810075898E /* ecc-a-to-j.c */; }; + 759DA0AE1DAC15A0008CC49B /* ecc-add-jja.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7C21DAA16810075898E /* ecc-add-jja.c */; }; + 759DA0AF1DAC15E3008CC49B /* ecc-add-jjj.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7C31DAA16810075898E /* ecc-add-jjj.c */; }; + 759DA0B01DAC15F6008CC49B /* ecc-dup-jj.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7C61DAA16810075898E /* ecc-dup-jj.c */; }; + 759DA0B11DAC161C008CC49B /* ecc-j-to-a.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7CC1DAA16810075898E /* ecc-j-to-a.c */; }; + 759DA0B21DAC1634008CC49B /* ecc-mod-inv.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7CE1DAA16810075898E /* ecc-mod-inv.c */; }; + 759DA0B31DAC1654008CC49B /* ecc-mul-g.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7D31DAA16810075898E /* ecc-mul-g.c */; }; + 759DA0B41DAC169D008CC49B /* ecc-pp1-redc.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7D81DAA16810075898E /* ecc-pp1-redc.c */; }; + 759DA0B51DAC16C6008CC49B /* sec-tabselect.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8BF1DAA16820075898E /* sec-tabselect.c */; }; + 759DA0B61DAC16E1008CC49B /* ecc-384.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7BC1DAA16810075898E /* ecc-384.c */; }; + 759DA0B71DAC1708008CC49B /* ecc-mod.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7CF1DAA16810075898E /* ecc-mod.c */; }; + 759DA0B81DAC1723008CC49B /* sec-add-1.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD8BD1DAA16820075898E /* sec-add-1.c */; }; + 759DA0BB1DAC2A4F008CC49B /* ecc-256.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD7B81DAA16810075898E /* ecc-256.c */; }; + 759DA0BE1DAC36A3008CC49B /* libBRCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 755CD9D11DAA197C0075898E /* libBRCore.a */; }; + 75A2A7941DA5934300A983D8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A2A7931DA5934300A983D8 /* AppDelegate.swift */; }; + 75A2A79B1DA5934300A983D8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 75A2A79A1DA5934300A983D8 /* Assets.xcassets */; }; + 75A2A79E1DA5934300A983D8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75A2A79C1DA5934300A983D8 /* LaunchScreen.storyboard */; }; + 75A2A80A1DA5936F00A983D8 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75A2A8091DA5936F00A983D8 /* NotificationCenter.framework */; }; + 75A2A8101DA5936F00A983D8 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75A2A80E1DA5936F00A983D8 /* MainInterface.storyboard */; }; + 75A2A8141DA5936F00A983D8 /* TodayExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 75A2A8081DA5936F00A983D8 /* TodayExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 75C735AA1DAA1B9C00251ECF /* libunbound.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4121DAA0E3E0075898E /* libunbound.c */; }; + C30029E225D0185500F08C2B /* StandardDividerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30029E125D0185500F08C2B /* StandardDividerView.swift */; }; + C30029EB25D019BC00F08C2B /* CopyButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30029EA25D019BC00F08C2B /* CopyButtonView.swift */; }; + C3019EE32B8FEFED00FAF648 /* AssociatedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3019EE22B8FEFED00FAF648 /* AssociatedObject.swift */; }; + C316CF49261887FC00E4C09B /* UIApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C316CF48261887FC00E4C09B /* UIApplication+Extension.swift */; }; + C3188E2726431E750008ADD1 /* Debug-GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C3188E2526431E750008ADD1 /* Debug-GoogleService-Info.plist */; settings = {ASSET_TAGS = ("initial-resources", ); }; }; + C31891C326733FD400ECE25C /* TabBarViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31891C226733FD400ECE25C /* TabBarViewControllerTests.swift */; }; + C32142EA25C97CD900BECCD0 /* TransactionCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C32142E925C97CD900BECCD0 /* TransactionCellView.swift */; }; + C32142FA25C988C800BECCD0 /* TransactionCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C32142F925C988C800BECCD0 /* TransactionCellViewModel.swift */; }; + C32DAE0725925B7E003FC978 /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C32DAE0625925B7E003FC978 /* Color+Extension.swift */; }; + C32DB42F26488CAA00017D26 /* TabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C32DB42E26488CAA00017D26 /* TabBarViewController.swift */; }; + C33685092BECE8B10069CBC7 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C33685082BECE8B10069CBC7 /* PrivacyInfo.xcprivacy */; }; + C339752127001BEC0071FED6 /* EmailValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C339752027001BEC0071FED6 /* EmailValidation.swift */; }; + C3423C182B781C6B0051BD6D /* PushNotifications in Frameworks */ = {isa = PBXBuildFile; productRef = C3423C172B781C6B0051BD6D /* PushNotifications */; }; + C3423C1A2B79039D0051BD6D /* LaunchCardHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C192B79039D0051BD6D /* LaunchCardHostingController.swift */; }; + C3423C1C2B7903CA0051BD6D /* LaunchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C1B2B7903CA0051BD6D /* LaunchView.swift */; }; + C3423C1E2B7904070051BD6D /* StartHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C1D2B7904070051BD6D /* StartHostingController.swift */; }; + C3423C202B79046A0051BD6D /* StartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C1F2B79046A0051BD6D /* StartView.swift */; }; + C3423C222B79047D0051BD6D /* StartViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C212B79047D0051BD6D /* StartViewModel.swift */; }; + C3423C242B7904B80051BD6D /* SeedWordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C232B7904B80051BD6D /* SeedWordView.swift */; }; + C3423C262B7904E30051BD6D /* AnnounceUpdatesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C252B7904E30051BD6D /* AnnounceUpdatesView.swift */; }; + C3423C2A2B7905330051BD6D /* SafariServices+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C272B7905330051BD6D /* SafariServices+Extension.swift */; }; + C3423C2B2B7905330051BD6D /* SignupWebViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C282B7905330051BD6D /* SignupWebViewModel.swift */; }; + C3423C2C2B7905330051BD6D /* SignupWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3423C292B7905330051BD6D /* SignupWebView.swift */; }; + C3423C3E2B796D820051BD6D /* ę—„ęœ¬čŖž.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C302B796D820051BD6D /* ę—„ęœ¬čŖž.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C3F2B796D820051BD6D /* Pt.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C312B796D820051BD6D /* Pt.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C402B796D820051BD6D /* De.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C322B796D820051BD6D /* De.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C412B796D820051BD6D /* En.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C332B796D820051BD6D /* En.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C422B796D820051BD6D /* coinflip.aiff in Resources */ = {isa = PBXBuildFile; fileRef = C3423C342B796D820051BD6D /* coinflip.aiff */; settings = {ASSET_TAGS = ("initial-resources", ); }; }; + C3423C432B796D820051BD6D /* Uk.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C352B796D820051BD6D /* Uk.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C442B796D820051BD6D /* Fr.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C362B796D820051BD6D /* Fr.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C452B796D820051BD6D /* äø­åœ‹äŗŗ.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C372B796D820051BD6D /* äø­åœ‹äŗŗ.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C462B796D820051BD6D /* Id.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C382B796D820051BD6D /* Id.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C472B796D820051BD6D /* Tr.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C392B796D820051BD6D /* Tr.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C482B796D820051BD6D /* Es.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C3A2B796D820051BD6D /* Es.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C492B796D820051BD6D /* Ko.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C3B2B796D820051BD6D /* Ko.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C4A2B796D820051BD6D /* It.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C3C2B796D820051BD6D /* It.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C3423C4B2B796D820051BD6D /* Ru.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = C3423C3D2B796D820051BD6D /* Ru.mp3 */; settings = {ASSET_TAGS = (speakTag, ); }; }; + C350788C27DCB10700A50819 /* TextView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C350788B27DCB10700A50819 /* TextView+Extension.swift */; }; + C3543A27264AFE490005D17A /* LocaleChangeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3543A26264AFE490005D17A /* LocaleChangeView.swift */; }; + C3543A29264AFE720005D17A /* LocaleChangeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3543A28264AFE720005D17A /* LocaleChangeViewModel.swift */; }; + C35ABD232574070A002BB9BB /* PartnersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C35ABD222574070A002BB9BB /* PartnersView.swift */; }; + C35ABD332574073F002BB9BB /* PartnersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C35ABD322574073F002BB9BB /* PartnersViewModel.swift */; }; + C35C1220293D464A0009022D /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = C35C121F293D464A0009022D /* FirebaseAnalytics */; }; + C35C1222293D464A0009022D /* FirebaseAuth in Frameworks */ = {isa = PBXBuildFile; productRef = C35C1221293D464A0009022D /* FirebaseAuth */; }; + C35C1224293D464A0009022D /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = C35C1223293D464A0009022D /* FirebaseCrashlytics */; }; + C35C122A293D48340009022D /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = C35C1229293D48340009022D /* KeychainAccess */; }; + C361F48228B368BC00E9798F /* AddressFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C361F48128B368BC00E9798F /* AddressFieldView.swift */; }; + C36375A328BD38A500CFB3D8 /* SendButtonHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36375A228BD38A500CFB3D8 /* SendButtonHostingController.swift */; }; + C36375A528BD390C00CFB3D8 /* SendButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36375A428BD390C00CFB3D8 /* SendButtonView.swift */; }; + C36DBF5F28F18D2C00FBCB24 /* LocalWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36DBF5E28F18D2C00FBCB24 /* LocalWebView.swift */; }; + C36DBF6128F1988900FBCB24 /* LocalWebViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36DBF6028F1988900FBCB24 /* LocalWebViewModel.swift */; }; + C39443F9269DDAD3002703E9 /* LitewalletIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39443F8269DDAD3002703E9 /* LitewalletIconView.swift */; }; + C39A71472608CB4300E7B640 /* EmptyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39A71462608CB4300E7B640 /* EmptyTableViewCell.swift */; }; + C3B419CB2BFCF14100EBD935 /* BuyHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B419CA2BFCF14100EBD935 /* BuyHostingController.swift */; }; + C3B419CD2BFCF17600EBD935 /* BuyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B419CC2BFCF17600EBD935 /* BuyView.swift */; }; + C3B7C3B9255EABBF00E98A64 /* SupportSafariViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B7C3B8255EABBF00E98A64 /* SupportSafariViewModel.swift */; }; + C3B7C3EE255FF59200E98A64 /* ConstantsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3B7C3ED255FF59200E98A64 /* ConstantsTests.swift */; }; + C3BD4A5325975C6000D97079 /* View+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3BD4A5225975C6000D97079 /* View+Extension.swift */; }; + C3C8973825CD6B9300241FBE /* HostingTransactionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C8973725CD6B9300241FBE /* HostingTransactionCell.swift */; }; + C3D4379F2566EA3E00F423E1 /* LWActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3D4379E2566EA3E00F423E1 /* LWActivityIndicator.swift */; }; + C3DBBE312BFE15AF00B95939 /* BuyTileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DBBE302BFE15AF00B95939 /* BuyTileView.swift */; }; + C3E5A9052BFDEEF1002FBE04 /* BuyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E5A9042BFDEEF1002FBE04 /* BuyViewModel.swift */; }; + C3E751C22AF689BA005571CA /* BRKeyExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751C12AF689BA005571CA /* BRKeyExtension.swift */; }; + C3E751C42AF68A50005571CA /* BRAddressExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751C32AF68A50005571CA /* BRAddressExtension.swift */; }; + C3E751C62AF68A8E005571CA /* BRTxInputExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751C52AF68A8E005571CA /* BRTxInputExtension.swift */; }; + C3E751C82AF68AEB005571CA /* UnsafeMutablePointerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751C72AF68AEB005571CA /* UnsafeMutablePointerExtension.swift */; }; + C3E751CB2AF68B47005571CA /* BRPeerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751CA2AF68B47005571CA /* BRPeerManager.swift */; }; + C3E751CD2AF68B93005571CA /* BRWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751CC2AF68B93005571CA /* BRWallet.swift */; }; + C3E751CF2AF68C18005571CA /* BRCalculationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751CE2AF68C18005571CA /* BRCalculationExtension.swift */; }; + C3E751D12AF68C84005571CA /* BRMasterKeyExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751D02AF68C84005571CA /* BRMasterKeyExtension.swift */; }; + C3E751D32AF68CD1005571CA /* BRTxOutputExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3E751D22AF68CD1005571CA /* BRTxOutputExtension.swift */; }; + C3EFA9A12650807B005C59B5 /* LockScreenHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3EFA9A02650807B005C59B5 /* LockScreenHeaderView.swift */; }; + C3EFA9A3265080FF005C59B5 /* LockScreenHeaderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3EFA9A2265080FF005C59B5 /* LockScreenHeaderViewModel.swift */; }; + C3EFA9A62651A808005C59B5 /* LockScreenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3EFA9A52651A808005C59B5 /* LockScreenTests.swift */; }; + C3F7BD0325FEC77100694C28 /* TransactionModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F7BD0225FEC77100694C28 /* TransactionModalView.swift */; }; + C3F8F13C2C049A4A006C3211 /* LocaleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F8F13B2C049A4A006C3211 /* LocaleTests.swift */; }; + C3F8F13E2C04C3A7006C3211 /* MoonpayHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F8F13D2C04C3A7006C3211 /* MoonpayHelper.swift */; }; + C3F8F1422C04DEA2006C3211 /* NoBuyTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F8F1412C04DEA2006C3211 /* NoBuyTabBarViewController.swift */; }; + C3F8F1442C04F6BE006C3211 /* Dakar, Senegal.gpx in Resources */ = {isa = PBXBuildFile; fileRef = C3F8F1432C04F6BE006C3211 /* Dakar, Senegal.gpx */; }; + C3F8F1462C05269A006C3211 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C3F8F1452C05269A006C3211 /* GoogleService-Info.plist */; settings = {ASSET_TAGS = ("initial-resources", ); }; }; + C3FF4D5F28AC5A5800713139 /* SendAddressCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3FF4D5E28AC5A5800713139 /* SendAddressCellView.swift */; }; + C3FF4D6128AC5AC100713139 /* SendAddressCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3FF4D6028AC5AC100713139 /* SendAddressCellViewModel.swift */; }; + C7FD407F2C48FAF60010C0E6 /* partner-keys.plist in Resources */ = {isa = PBXBuildFile; fileRef = C7FD407E2C48FAF60010C0E6 /* partner-keys.plist */; }; + CE03EC741EF256AC0038E3A8 /* SimpleUTXO.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE03EC731EF256AC0038E3A8 /* SimpleUTXO.swift */; }; + CE0CD1591DBFBCF5004023DA /* ModalPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0CD1581DBFBCF5004023DA /* ModalPresenter.swift */; }; + CE124CF81E67A8E500DFA146 /* TransactionDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE124CF71E67A8E500DFA146 /* TransactionDirection.swift */; }; + CE124CFC1E68932C00DFA146 /* FeeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE124CFB1E68932C00DFA146 /* FeeManager.swift */; }; + CE124CFE1E68F57700DFA146 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE124CFD1E68F57700DFA146 /* Async.swift */; }; + CE124D001E69170900DFA146 /* SyncingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE124CFF1E69170900DFA146 /* SyncingView.swift */; }; + CE1280F61EEA855C00D27649 /* Date+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1280F51EEA855C00D27649 /* Date+Additions.swift */; }; + CE1D84B61EAEB2F4002A5D7B /* UIBarButtonItem+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1D84B51EAEB2F4002A5D7B /* UIBarButtonItem+Additions.swift */; }; + CE1E5F261EF083A600BD0F72 /* StartImportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE1E5F251EF083A600BD0F72 /* StartImportViewController.swift */; }; + CE20C8F21DBAF71500C8397A /* ApplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C8F11DBAF71500C8397A /* ApplicationController.swift */; }; + CE20C8F61DBAF77D00C8397A /* UIViewController+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C8F51DBAF77D00C8397A /* UIViewController+BRWAdditions.swift */; }; + CE20C8FC1DBB0F3A00C8397A /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C8FB1DBB0F3A00C8397A /* UIColor+Extension.swift */; }; + CE20C8FE1DBB133A00C8397A /* SimpleRedux.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C8FD1DBB133A00C8397A /* SimpleRedux.swift */; }; + CE20C9011DBBFFF800C8397A /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C9001DBBFFF800C8397A /* Actions.swift */; }; + CE20C9071DBC587200C8397A /* StartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C9061DBC587200C8397A /* StartViewController.swift */; }; + CE20C90C1DBC59E600C8397A /* StartFlowPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C90B1DBC59E600C8397A /* StartFlowPresenter.swift */; }; + CE20C90E1DBE52B000C8397A /* UIView+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C90D1DBE52B000C8397A /* UIView+BRWAdditions.swift */; }; + CE20C9111DBE5B6F00C8397A /* Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C9101DBE5B6F00C8397A /* Circle.swift */; }; + CE20C9171DBE6F2A00C8397A /* UIButton+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C9161DBE6F2A00C8397A /* UIButton+BRWAdditions.swift */; }; + CE20C9191DBE7B8200C8397A /* ReduxState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE20C9181DBE7B8200C8397A /* ReduxState.swift */; }; + CE25BF8D1DF3B8A500BC67B6 /* InViewAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE25BF8C1DF3B8A500BC67B6 /* InViewAlert.swift */; }; + CE25BF911DF9ADE700BC67B6 /* UIImage+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE25BF901DF9ADE700BC67B6 /* UIImage+Utils.swift */; }; + CE25BF931DFDA7A600BC67B6 /* MessageUIPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE25BF921DFDA7A500BC67B6 /* MessageUIPresenter.swift */; }; + CE27F9591E2C8EA300F7F7F2 /* Amount.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE27F9581E2C8EA300F7F7F2 /* Amount.swift */; }; + CE29901A1EFD6DE50093A0F2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CE29901C1EFD6DE50093A0F2 /* Localizable.strings */; }; + CE36454C1E7B42850079D0CF /* PinPadCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE36454B1E7B42850079D0CF /* PinPadCells.swift */; }; + CE3D4C571EF5D5740016B1C8 /* ReachabilityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3D4C561EF5D5740016B1C8 /* ReachabilityMonitor.swift */; }; + CE3D4C591EF743EF0016B1C8 /* Functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3D4C581EF743EF0016B1C8 /* Functions.swift */; }; + CE44BA1B1F33BFC500392A1A /* NodeSelectorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE44BA1A1F33BFC500392A1A /* NodeSelectorViewController.swift */; }; + CE45C1F91E74B400002C3847 /* ManageWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE45C1F81E74B400002C3847 /* ManageWalletViewController.swift */; }; + CE45C1FB1E74F89C002C3847 /* WalletInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE45C1FA1E74F89C002C3847 /* WalletInfo.swift */; }; + CE45C1FD1E7650F5002C3847 /* KVStoreCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE45C1FC1E7650F5002C3847 /* KVStoreCoordinator.swift */; }; + CE47A8E01F7DA54000FF35BA /* UIScreen+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE47A8DF1F7DA54000FF35BA /* UIScreen+Additions.swift */; }; + CE4B6C1A1E219CA600CF935B /* WalletCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4B6C191E219CA600CF935B /* WalletCoordinator.swift */; }; + CE4C1CC61ED65D830063E184 /* DrawableCircle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4C1CC51ED65D830063E184 /* DrawableCircle.swift */; }; + CE4C1CC81ED88B600063E184 /* URLController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4C1CC71ED88B600063E184 /* URLController.swift */; }; + CE4CA7BC1EE3649100373F11 /* BRActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4CA7BB1EE3649100373F11 /* BRActivityView.swift */; }; + CE4DFB2C1E9BE5880014009E /* ReScanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4DFB2B1E9BE5880014009E /* ReScanViewController.swift */; }; + CE4DFB2E1E9C26DA0014009E /* ShareDataViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4DFB2D1E9C26DA0014009E /* ShareDataViewController.swift */; }; + CE5E6C941EB7964900A476DB /* WalletDisabledView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5E6C931EB7964900A476DB /* WalletDisabledView.swift */; }; + CE5E6C9A1EB9135000A476DB /* Icon.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CE5E6C991EB9135000A476DB /* Icon.xcassets */; }; + CE5F21D91E4A922700C47B8E /* DismissLoginAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5F21D81E4A922700C47B8E /* DismissLoginAnimator.swift */; }; + CE5F21DB1E4A93A500C47B8E /* LoginTransitionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5F21DA1E4A93A500C47B8E /* LoginTransitionDelegate.swift */; }; + CE6314831E08E5BB00D4AFE0 /* UIView+InitAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6314821E08E5BB00D4AFE0 /* UIView+InitAdditions.swift */; }; + CE6B6B4A1E54C0CB00B31405 /* SecurityCenterCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6B6B491E54C0CA00B31405 /* SecurityCenterCell.swift */; }; + CE6BCF5D1EE9E89A0029849C /* CustomTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6BCF5C1EE9E89A0029849C /* CustomTitleView.swift */; }; + CE6D0E5C1E14BFA700137DF1 /* KeyboardNotificationInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6D0E5B1E14BFA600137DF1 /* KeyboardNotificationInfo.swift */; }; + CE6D0F971DE8B73A00BD4BCF /* ModalTransitionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6D0F961DE8B73A00BD4BCF /* ModalTransitionDelegate.swift */; }; + CE6D0F991DE8B75900BD4BCF /* DismissModalAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6D0F981DE8B75900BD4BCF /* DismissModalAnimator.swift */; }; + CE6DCC251E6001E50044257B /* UIControl+Callback.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6DCC241E6001E50044257B /* UIControl+Callback.swift */; }; + CE6DCC271E6108D50044257B /* EnterPhraseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6DCC261E6108D50044257B /* EnterPhraseCell.swift */; }; + CE6DCC301E6666470044257B /* NonScrollingCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE6DCC2F1E6666470044257B /* NonScrollingCollectionView.swift */; }; + CE74F58D1E3BA85600ED5FA9 /* ExchangeUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE74F58C1E3BA85600ED5FA9 /* ExchangeUpdater.swift */; }; + CE760EDC1E561DF900EFAC2B /* SecurityCenterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE760EDA1E561DF900EFAC2B /* SecurityCenterViewController.swift */; }; + CE760EDD1E561DF900EFAC2B /* UpdatePinViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE760EDB1E561DF900EFAC2B /* UpdatePinViewController.swift */; }; + CE83DE2A1E9EB7F600D07636 /* SendAmountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE83DE291E9EB7F600D07636 /* SendAmountCell.swift */; }; + CE8644251F2C160200033129 /* ConfirmationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8644241F2C160200033129 /* ConfirmationViewController.swift */; }; + CE8CD8DD1E2D9EF200785E02 /* Sender.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8CD8DC1E2D9EF200785E02 /* Sender.swift */; }; + CE8CD8DF1E2E825100785E02 /* VerifyPinViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8CD8DE1E2E825000785E02 /* VerifyPinViewController.swift */; }; + CE8CD8E11E31976800785E02 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8CD8E01E31976800785E02 /* LoginViewController.swift */; }; + CE8F0AE31EB91BB500AA7642 /* SearchHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8F0AE21EB91BB500AA7642 /* SearchHeaderView.swift */; }; + CE9057181DFF0FA8006BA848 /* String+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9057171DFF0FA8006BA848 /* String+Additions.swift */; }; + CE90571A1DFF18B2006BA848 /* ScanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE9057191DFF18B2006BA848 /* ScanViewController.swift */; }; + CE916E2A1EDA7E4400D641D6 /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CE916E291EDA7E4400D641D6 /* Media.xcassets */; }; + CE916E2E1EDA7ED000D641D6 /* BRBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = CE916E2D1EDA7ED000D641D6 /* BRBubbleView.m */; }; + CE916E311EDA7F1400D641D6 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CE916E301EDA7F1400D641D6 /* UIImage+Utils.m */; }; + CE916E331EDA800E00D641D6 /* UserDefaultsUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE916E321EDA800E00D641D6 /* UserDefaultsUpdater.swift */; }; + CE916E371EDA855800D641D6 /* BRTodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE916E361EDA855800D641D6 /* BRTodayViewController.m */; }; + CE92F9F01DED0C790046B516 /* PresentModalAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE92F9EF1DED0C790046B516 /* PresentModalAnimator.swift */; }; + CE92F9F41DED59E80046B516 /* UIView+AnimationAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE92F9F31DED59E80046B516 /* UIView+AnimationAdditions.swift */; }; + CE92F9F61DEDF6890046B516 /* UIViewControllerContextTransitioning+BRAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE92F9F51DEDF6890046B516 /* UIViewControllerContextTransitioning+BRAdditions.swift */; }; + CEA362681E00EE320061FC0E /* CameraGuideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA362671E00EE320061FC0E /* CameraGuideView.swift */; }; + CEA3626A1E01150D0061FC0E /* CGContext+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA362691E01150D0061FC0E /* CGContext+Additions.swift */; }; + CEAA9E8F1DC074410066731D /* StartPaperPhraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E8E1DC074410066731D /* StartPaperPhraseViewController.swift */; }; + CEAA9E911DC0FDFE0066731D /* UIViewPropertyAnimator+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E901DC0FDFE0066731D /* UIViewPropertyAnimator+BRWAdditions.swift */; }; + CEAA9E931DC110E70066731D /* WritePaperPhraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E921DC110E70066731D /* WritePaperPhraseViewController.swift */; }; + CEAA9E951DC1659F0066731D /* UILabel+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E941DC1659F0066731D /* UILabel+BRWAdditions.swift */; }; + CEAA9E971DC18E1F0066731D /* PhraseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E961DC18E1F0066731D /* PhraseView.swift */; }; + CEAA9E991DC262800066731D /* ConfirmPaperPhraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E981DC262800066731D /* ConfirmPaperPhraseViewController.swift */; }; + CEAA9E9B1DC2B9320066731D /* ConfirmPhrase.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E9A1DC2B9320066731D /* ConfirmPhrase.swift */; }; + CEAA9EA01DC2F9F50066731D /* UIFont+BRWAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9E9F1DC2F9F50066731D /* UIFont+BRWAdditions.swift */; }; + CEAA9EA61DC3246F0066731D /* StartNavigationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9EA51DC3246F0066731D /* StartNavigationDelegate.swift */; }; + CEAA9EA81DC3342E0066731D /* PinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAA9EA71DC3342E0066731D /* PinView.swift */; }; + CEAFC8611E5D5B0500E4FD06 /* SegmentedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAFC8601E5D5B0500E4FD06 /* SegmentedButton.swift */; }; + CEB909F51E5FE63D001804DC /* EnterPhraseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB909F41E5FE63D001804DC /* EnterPhraseViewController.swift */; }; + CEB909F71E5FE654001804DC /* EnterPhraseCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB909F61E5FE654001804DC /* EnterPhraseCollectionViewController.swift */; }; + CEB909FA1E5FF242001804DC /* RecoverWalletIntroViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB909F91E5FF242001804DC /* RecoverWalletIntroViewController.swift */; }; + CEBF292E1EF99E55005C330A /* LightWeightAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBF292D1EF99E55005C330A /* LightWeightAlert.swift */; }; + CEBF29301EF9D76F005C330A /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBF292F1EF9D76F005C330A /* Environment.swift */; }; + CEBF32EE1DDBC30000348FC6 /* ShadowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBF32ED1DDBC30000348FC6 /* ShadowButton.swift */; }; + CEBF33041DDE17A600348FC6 /* Transaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBF33031DDE17A600348FC6 /* Transaction.swift */; }; + CEC4CF071F0C48DD00E5C82E /* StartWipeWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC4CF061F0C48DD00E5C82E /* StartWipeWalletViewController.swift */; }; + CEC4CF091F0C84AB00E5C82E /* UIViewController+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC4CF081F0C84AB00E5C82E /* UIViewController+Alerts.swift */; }; + CEC6AA391DEE10BA00EE5AFD /* UINavigationController+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA381DEE10BA00EE5AFD /* UINavigationController+Extension.swift */; }; + CEC6AA3B1DEE4EB000EE5AFD /* CGRect+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA3A1DEE4EB000EE5AFD /* CGRect+Additions.swift */; }; + CEC6AA3D1DEE687000EE5AFD /* RadialGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA3C1DEE687000EE5AFD /* RadialGradientView.swift */; }; + CEC6AA401DEFC87300EE5AFD /* SendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA3F1DEFC87300EE5AFD /* SendViewController.swift */; }; + CEC6AA421DEFC88F00EE5AFD /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA411DEFC88F00EE5AFD /* ReceiveViewController.swift */; }; + CEC6AA441DEFCDE900EE5AFD /* ModalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA431DEFCDE900EE5AFD /* ModalViewController.swift */; }; + CEC6AA461DEFCE9200EE5AFD /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA451DEFCE9200EE5AFD /* MenuViewController.swift */; }; + CEC6AA491DEFD00100EE5AFD /* MenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA481DEFD00100EE5AFD /* MenuButton.swift */; }; + CEC6AA4B1DEFD24C00EE5AFD /* MenuButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA4A1DEFD24C00EE5AFD /* MenuButtonType.swift */; }; + CEC6AA4D1DF0741100EE5AFD /* ModalDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6AA4C1DF0741100EE5AFD /* ModalDisplayable.swift */; }; + CEC6F8451E886723000795B8 /* PaymentRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC6F8441E886723000795B8 /* PaymentRequest.swift */; }; + CECCE5A51E02408300D99448 /* UIView+FrameChangeBlocking.swift in Sources */ = {isa = PBXBuildFile; fileRef = CECCE5A41E02408300D99448 /* UIView+FrameChangeBlocking.swift */; }; + CECCE5A91E0378FB00D99448 /* PinPadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CECCE5A81E0378FB00D99448 /* PinPadViewController.swift */; }; + CECCE5AE1E04AD6300D99448 /* AddressCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CECCE5AD1E04AD6300D99448 /* AddressCell.swift */; }; + CECCE5B01E04AD7600D99448 /* DescriptionSendCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CECCE5AF1E04AD7600D99448 /* DescriptionSendCell.swift */; }; + CECCE5B21E04B00D00D99448 /* SendCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CECCE5B11E04B00D00D99448 /* SendCell.swift */; }; + CED341331EF5A5C00014912A /* InAppAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = CED341321EF5A5C00014912A /* InAppAlert.swift */; }; + CEE0EF521EBD14B60018DB36 /* PinTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE0EF511EBD14B60018DB36 /* PinTransitioningDelegate.swift */; }; + CEE1F5631DF13E5A00D733AD /* ModalHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE1F5621DF13E5A00D733AD /* ModalHeaderView.swift */; }; + CEE20C2D1EA288FA0086F724 /* UpdatingLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE20C2C1EA288FA0086F724 /* UpdatingLabel.swift */; }; + CEE20C2F1EA3E5820086F724 /* BlinkingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE20C2E1EA3E5820086F724 /* BlinkingView.swift */; }; + CEE20C341EA5B4550086F724 /* ArticleIds.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE20C331EA5B4550086F724 /* ArticleIds.swift */; }; + CEE20C361EA5B4620086F724 /* Constants+Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE20C351EA5B4620086F724 /* Constants+Events.swift */; }; + CEE20C381EA5B4680086F724 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE20C371EA5B4680086F724 /* Strings.swift */; }; + CEE6282A1EA98B6D001035AA /* DispatchQueue+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE628291EA98B6D001035AA /* DispatchQueue+Additions.swift */; }; + CEE659E71F65A936001FF29D /* RetryTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE659E61F65A936001FF29D /* RetryTimer.swift */; }; + CEE659E91F664C73001FF29D /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE659E81F664C73001FF29D /* WelcomeViewController.swift */; }; + CEE65DF01E39056F0002994D /* Rate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE65DEF1E39056F0002994D /* Rate.swift */; }; + CEEC707F1E8D6B4100EF788E /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC707E1E8D6B4100EF788E /* SettingsViewController.swift */; }; + CEEC70811E90C04700EF788E /* SeparatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70801E90C04700EF788E /* SeparatorCell.swift */; }; + CEEC70831E90C07C00EF788E /* Setting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70821E90C07C00EF788E /* Setting.swift */; }; + CEEC70861E94397D00EF788E /* UserDefaults+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70851E94397D00EF788E /* UserDefaults+Additions.swift */; }; + CEEC708A1E945E3B00EF788E /* UnEditableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70891E945E3B00EF788E /* UnEditableTextView.swift */; }; + CEEC708C1E95461A00EF788E /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC708B1E95461A00EF788E /* AboutViewController.swift */; }; + CEEC708E1E954AAB00EF788E /* AboutCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC708D1E954AAB00EF788E /* AboutCell.swift */; }; + CEEC70921E95DA4400EF788E /* GradientSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70911E95DA4400EF788E /* GradientSwitch.swift */; }; + CEEC70941E96A24F00EF788E /* DefaultCurrencyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEC70931E96A24F00EF788E /* DefaultCurrencyViewController.swift */; }; + CEEE92F11EBA7CBA00B7AC9C /* RequestAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEE92F01EBA7CBA00B7AC9C /* RequestAmountViewController.swift */; }; + CEF3D2DD1E8CBA790070178E /* LAContext+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3D2DC1E8CBA790070178E /* LAContext+Extensions.swift */; }; + CEF3E82B1DE51612007C0A9E /* GradientCircle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E82A1DE51612007C0A9E /* GradientCircle.swift */; }; + CEF3E82D1DE528BF007C0A9E /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E82C1DE528BF007C0A9E /* AlertView.swift */; }; + CEF3E82F1DE534C5007C0A9E /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E82E1DE534C5007C0A9E /* GradientView.swift */; }; + CEF3E8321DE55540007C0A9E /* CheckView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E8311DE55540007C0A9E /* CheckView.swift */; }; + CEF3E8341DE57166007C0A9E /* AnimatableIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E8331DE57166007C0A9E /* AnimatableIcon.swift */; }; + CEF3E8361DE60222007C0A9E /* ModalNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF3E8351DE60222007C0A9E /* ModalNavigationController.swift */; }; + CEF61B121ECF52C700C7EA6A /* AmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF61B111ECF52C700C7EA6A /* AmountViewController.swift */; }; + CEF61B141ED0D10000C7EA6A /* Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF61B131ED0D10000C7EA6A /* Types.swift */; }; + CEF61B161ED2056D00C7EA6A /* NumberFormatter+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEF61B151ED2056D00C7EA6A /* NumberFormatter+Additions.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 2465873B23A5AAD100A32E9E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 75A2A78F1DA5934300A983D8; + remoteInfo = litewallet; + }; + 759DA0BC1DAC369C008CC49B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 755CD9D01DAA197C0075898E; + remoteInfo = BRCore; + }; + 759DA0DB1DAC86B5008CC49B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 759DA0D71DAC8668008CC49B; + remoteInfo = submodules; + }; + 759DA0DD1DAC86BC008CC49B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 759DA0D71DAC8668008CC49B; + remoteInfo = submodules; + }; + 759DA0DF1DAC86C3008CC49B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 759DA0D71DAC8668008CC49B; + remoteInfo = submodules; + }; + 75A2A8121DA5936F00A983D8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75A2A7881DA5934300A983D8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 75A2A8071DA5936F00A983D8; + remoteInfo = TodayExtension; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 22A9A9831DF63288000F0016 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9C21DAA18420075898E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9CF1DAA197C0075898E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A8031DA5935F00A983D8 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 75A2A8141DA5936F00A983D8 /* TodayExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 1; + }; + 75C735AD1DAA1C9F00251ECF /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1B3F74211FFB106200CCA50C /* BiometricsSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BiometricsSettingsViewController.swift; path = ViewControllers/BiometricsSettingsViewController.swift; sourceTree = ""; }; + 1B3F74221FFB106200CCA50C /* BiometricsSpendingLimitViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BiometricsSpendingLimitViewController.swift; path = ViewControllers/BiometricsSpendingLimitViewController.swift; sourceTree = ""; }; + 1BA9FE3B216F68A600BB2DE8 /* BRBech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRBech32.h; sourceTree = ""; }; + 1BA9FE3C216F68A700BB2DE8 /* BRBech32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BRBech32.c; sourceTree = ""; }; + 1BBAEBE81F80237B0047DEA8 /* BRAddress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRAddress.c; sourceTree = ""; }; + 1BBAEBE91F80237B0047DEA8 /* BRAddress.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRAddress.h; sourceTree = ""; }; + 1BBAEBEA1F80237B0047DEA8 /* BRArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRArray.h; sourceTree = ""; }; + 1BBAEBEB1F80237B0047DEA8 /* BRBase58.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRBase58.c; sourceTree = ""; }; + 1BBAEBEC1F80237B0047DEA8 /* BRBase58.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBase58.h; sourceTree = ""; }; + 1BBAEBED1F80237B0047DEA8 /* BRBIP32Sequence.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRBIP32Sequence.c; sourceTree = ""; }; + 1BBAEBEE1F80237B0047DEA8 /* BRBIP32Sequence.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBIP32Sequence.h; sourceTree = ""; }; + 1BBAEBEF1F80237B0047DEA8 /* BRBIP38Key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRBIP38Key.c; sourceTree = ""; }; + 1BBAEBF01F80237B0047DEA8 /* BRBIP38Key.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBIP38Key.h; sourceTree = ""; }; + 1BBAEBF11F80237B0047DEA8 /* BRBIP39Mnemonic.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRBIP39Mnemonic.c; sourceTree = ""; }; + 1BBAEBF21F80237B0047DEA8 /* BRBIP39Mnemonic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBIP39Mnemonic.h; sourceTree = ""; }; + 1BBAEBF31F80237B0047DEA8 /* BRBIP39WordsEn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBIP39WordsEn.h; sourceTree = ""; }; + 1BBAEBF41F80237B0047DEA8 /* BRBloomFilter.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRBloomFilter.c; sourceTree = ""; }; + 1BBAEBF51F80237B0047DEA8 /* BRBloomFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRBloomFilter.h; sourceTree = ""; }; + 1BBAEBF71F80237B0047DEA8 /* BRCrypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRCrypto.h; sourceTree = ""; }; + 1BBAEBF81F80237B0047DEA8 /* BRInt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRInt.h; sourceTree = ""; }; + 1BBAEBF91F80237B0047DEA8 /* BRKey.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRKey.c; sourceTree = ""; }; + 1BBAEBFA1F80237B0047DEA8 /* BRKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRKey.h; sourceTree = ""; }; + 1BBAEBFB1F80237B0047DEA8 /* BRMerkleBlock.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRMerkleBlock.c; sourceTree = ""; }; + 1BBAEBFC1F80237B0047DEA8 /* BRMerkleBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRMerkleBlock.h; sourceTree = ""; }; + 1BBAEBFD1F80237B0047DEA8 /* BRPaymentProtocol.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRPaymentProtocol.c; sourceTree = ""; }; + 1BBAEBFE1F80237B0047DEA8 /* BRPaymentProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRPaymentProtocol.h; sourceTree = ""; }; + 1BBAEBFF1F80237B0047DEA8 /* BRPeer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRPeer.c; sourceTree = ""; }; + 1BBAEC001F80237B0047DEA8 /* BRPeer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRPeer.h; sourceTree = ""; }; + 1BBAEC011F80237B0047DEA8 /* BRPeerManager.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRPeerManager.c; sourceTree = ""; }; + 1BBAEC021F80237B0047DEA8 /* BRPeerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRPeerManager.h; sourceTree = ""; }; + 1BBAEC031F80237B0047DEA8 /* BRSet.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRSet.c; sourceTree = ""; }; + 1BBAEC041F80237B0047DEA8 /* BRSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRSet.h; sourceTree = ""; }; + 1BBAEC051F80237B0047DEA8 /* BRTransaction.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRTransaction.c; sourceTree = ""; }; + 1BBAEC061F80237B0047DEA8 /* BRTransaction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRTransaction.h; sourceTree = ""; }; + 1BBAEC071F80237B0047DEA8 /* BRWallet.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRWallet.c; sourceTree = ""; }; + 1BBAEC081F80237B0047DEA8 /* BRWallet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BRWallet.h; sourceTree = ""; }; + 1BBAEC0A1F80237B0047DEA8 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; + 1BBAEC0B1F80237B0047DEA8 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 1BBAEC0D1F80237B0047DEA8 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 1BBAEC0E1F80237B0047DEA8 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; + 1BBAEC0F1F80237B0047DEA8 /* autogen.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = autogen.sh; sourceTree = ""; }; + 1BBAEC121F80237B0047DEA8 /* ax_jni_include_dir.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = ax_jni_include_dir.m4; sourceTree = ""; }; + 1BBAEC131F80237B0047DEA8 /* ax_prog_cc_for_build.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = ax_prog_cc_for_build.m4; sourceTree = ""; }; + 1BBAEC141F80237B0047DEA8 /* bitcoin_secp.m4 */ = {isa = PBXFileReference; lastKnownFileType = text; path = bitcoin_secp.m4; sourceTree = ""; }; + 1BBAEC151F80237B0047DEA8 /* configure.ac */ = {isa = PBXFileReference; lastKnownFileType = text; path = configure.ac; sourceTree = ""; }; + 1BBAEC171F80237B0047DEA8 /* lax_der_parsing.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lax_der_parsing.c; sourceTree = ""; }; + 1BBAEC181F80237B0047DEA8 /* lax_der_parsing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lax_der_parsing.h; sourceTree = ""; }; + 1BBAEC191F80237B0047DEA8 /* lax_der_privatekey_parsing.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lax_der_privatekey_parsing.c; sourceTree = ""; }; + 1BBAEC1A1F80237B0047DEA8 /* lax_der_privatekey_parsing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lax_der_privatekey_parsing.h; sourceTree = ""; }; + 1BBAEC1B1F80237B0047DEA8 /* COPYING */ = {isa = PBXFileReference; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 1BBAEC1D1F80237B0047DEA8 /* secp256k1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1.h; sourceTree = ""; }; + 1BBAEC1E1F80237B0047DEA8 /* secp256k1_ecdh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_ecdh.h; sourceTree = ""; }; + 1BBAEC1F1F80237B0047DEA8 /* secp256k1_recovery.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_recovery.h; sourceTree = ""; }; + 1BBAEC201F80237B0047DEA8 /* libsecp256k1.pc.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = libsecp256k1.pc.in; sourceTree = ""; }; + 1BBAEC211F80237B0047DEA8 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 1BBAEC231F80237B0047DEA8 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 1BBAEC241F80237B0047DEA8 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 1BBAEC261F80237B0047DEA8 /* group_prover.sage */ = {isa = PBXFileReference; lastKnownFileType = text; path = group_prover.sage; sourceTree = ""; }; + 1BBAEC271F80237B0047DEA8 /* secp256k1.sage */ = {isa = PBXFileReference; lastKnownFileType = text; path = secp256k1.sage; sourceTree = ""; }; + 1BBAEC281F80237B0047DEA8 /* weierstrass_prover.sage */ = {isa = PBXFileReference; lastKnownFileType = text; path = weierstrass_prover.sage; sourceTree = ""; }; + 1BBAEC2B1F80237B0047DEA8 /* field_10x26_arm.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = field_10x26_arm.s; sourceTree = ""; }; + 1BBAEC2C1F80237B0047DEA8 /* basic-config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "basic-config.h"; sourceTree = ""; }; + 1BBAEC2D1F80237B0047DEA8 /* bench.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bench.h; sourceTree = ""; }; + 1BBAEC2E1F80237B0047DEA8 /* bench_ecdh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bench_ecdh.c; sourceTree = ""; }; + 1BBAEC2F1F80237B0047DEA8 /* bench_internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bench_internal.c; sourceTree = ""; }; + 1BBAEC301F80237B0047DEA8 /* bench_recover.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bench_recover.c; sourceTree = ""; }; + 1BBAEC311F80237B0047DEA8 /* bench_sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bench_sign.c; sourceTree = ""; }; + 1BBAEC321F80237B0047DEA8 /* bench_verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bench_verify.c; sourceTree = ""; }; + 1BBAEC331F80237B0047DEA8 /* ecdsa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = ""; }; + 1BBAEC341F80237B0047DEA8 /* ecdsa_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecdsa_impl.h; sourceTree = ""; }; + 1BBAEC351F80237B0047DEA8 /* eckey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = eckey.h; sourceTree = ""; }; + 1BBAEC361F80237B0047DEA8 /* eckey_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = eckey_impl.h; sourceTree = ""; }; + 1BBAEC371F80237B0047DEA8 /* ecmult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult.h; sourceTree = ""; }; + 1BBAEC381F80237B0047DEA8 /* ecmult_const.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult_const.h; sourceTree = ""; }; + 1BBAEC391F80237B0047DEA8 /* ecmult_const_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult_const_impl.h; sourceTree = ""; }; + 1BBAEC3A1F80237B0047DEA8 /* ecmult_gen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult_gen.h; sourceTree = ""; }; + 1BBAEC3B1F80237B0047DEA8 /* ecmult_gen_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult_gen_impl.h; sourceTree = ""; }; + 1BBAEC3C1F80237B0047DEA8 /* ecmult_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecmult_impl.h; sourceTree = ""; }; + 1BBAEC3D1F80237B0047DEA8 /* field.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field.h; sourceTree = ""; }; + 1BBAEC3E1F80237B0047DEA8 /* field_10x26.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_10x26.h; sourceTree = ""; }; + 1BBAEC3F1F80237B0047DEA8 /* field_10x26_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_10x26_impl.h; sourceTree = ""; }; + 1BBAEC401F80237B0047DEA8 /* field_5x52.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_5x52.h; sourceTree = ""; }; + 1BBAEC411F80237B0047DEA8 /* field_5x52_asm_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_5x52_asm_impl.h; sourceTree = ""; }; + 1BBAEC421F80237B0047DEA8 /* field_5x52_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_5x52_impl.h; sourceTree = ""; }; + 1BBAEC431F80237B0047DEA8 /* field_5x52_int128_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_5x52_int128_impl.h; sourceTree = ""; }; + 1BBAEC441F80237B0047DEA8 /* field_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = field_impl.h; sourceTree = ""; }; + 1BBAEC451F80237B0047DEA8 /* gen_context.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gen_context.c; sourceTree = ""; }; + 1BBAEC461F80237B0047DEA8 /* group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = group.h; sourceTree = ""; }; + 1BBAEC471F80237B0047DEA8 /* group_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = group_impl.h; sourceTree = ""; }; + 1BBAEC481F80237B0047DEA8 /* hash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = ""; }; + 1BBAEC491F80237B0047DEA8 /* hash_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hash_impl.h; sourceTree = ""; }; + 1BBAEC4D1F80237B0047DEA8 /* NativeSecp256k1.java */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.java; path = NativeSecp256k1.java; sourceTree = ""; }; + 1BBAEC4E1F80237B0047DEA8 /* NativeSecp256k1Test.java */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.java; path = NativeSecp256k1Test.java; sourceTree = ""; }; + 1BBAEC4F1F80237B0047DEA8 /* NativeSecp256k1Util.java */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.java; path = NativeSecp256k1Util.java; sourceTree = ""; }; + 1BBAEC501F80237B0047DEA8 /* Secp256k1Context.java */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.java; path = Secp256k1Context.java; sourceTree = ""; }; + 1BBAEC511F80237B0047DEA8 /* org_bitcoin_NativeSecp256k1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = org_bitcoin_NativeSecp256k1.c; sourceTree = ""; }; + 1BBAEC521F80237B0047DEA8 /* org_bitcoin_NativeSecp256k1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = org_bitcoin_NativeSecp256k1.h; sourceTree = ""; }; + 1BBAEC531F80237B0047DEA8 /* org_bitcoin_Secp256k1Context.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = org_bitcoin_Secp256k1Context.c; sourceTree = ""; }; + 1BBAEC541F80237B0047DEA8 /* org_bitcoin_Secp256k1Context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = org_bitcoin_Secp256k1Context.h; sourceTree = ""; }; + 1BBAEC571F80237B0047DEA8 /* main_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = main_impl.h; sourceTree = ""; }; + 1BBAEC581F80237B0047DEA8 /* Makefile.am.include */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am.include; sourceTree = ""; }; + 1BBAEC591F80237B0047DEA8 /* tests_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tests_impl.h; sourceTree = ""; }; + 1BBAEC5B1F80237B0047DEA8 /* main_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = main_impl.h; sourceTree = ""; }; + 1BBAEC5C1F80237B0047DEA8 /* Makefile.am.include */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am.include; sourceTree = ""; }; + 1BBAEC5D1F80237B0047DEA8 /* tests_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tests_impl.h; sourceTree = ""; }; + 1BBAEC5E1F80237B0047DEA8 /* num.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = num.h; sourceTree = ""; }; + 1BBAEC5F1F80237B0047DEA8 /* num_gmp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = num_gmp.h; sourceTree = ""; }; + 1BBAEC601F80237B0047DEA8 /* num_gmp_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = num_gmp_impl.h; sourceTree = ""; }; + 1BBAEC611F80237B0047DEA8 /* num_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = num_impl.h; sourceTree = ""; }; + 1BBAEC621F80237B0047DEA8 /* scalar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar.h; sourceTree = ""; }; + 1BBAEC631F80237B0047DEA8 /* scalar_4x64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_4x64.h; sourceTree = ""; }; + 1BBAEC641F80237B0047DEA8 /* scalar_4x64_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_4x64_impl.h; sourceTree = ""; }; + 1BBAEC651F80237B0047DEA8 /* scalar_8x32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_8x32.h; sourceTree = ""; }; + 1BBAEC661F80237B0047DEA8 /* scalar_8x32_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_8x32_impl.h; sourceTree = ""; }; + 1BBAEC671F80237B0047DEA8 /* scalar_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_impl.h; sourceTree = ""; }; + 1BBAEC681F80237B0047DEA8 /* scalar_low.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_low.h; sourceTree = ""; }; + 1BBAEC691F80237B0047DEA8 /* scalar_low_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scalar_low_impl.h; sourceTree = ""; }; + 1BBAEC6A1F80237B0047DEA8 /* secp256k1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = secp256k1.c; sourceTree = ""; }; + 1BBAEC6B1F80237B0047DEA8 /* testrand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = testrand.h; sourceTree = ""; }; + 1BBAEC6C1F80237B0047DEA8 /* testrand_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = testrand_impl.h; sourceTree = ""; }; + 1BBAEC6D1F80237B0047DEA8 /* tests.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tests.c; sourceTree = ""; }; + 1BBAEC6E1F80237B0047DEA8 /* tests_exhaustive.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tests_exhaustive.c; sourceTree = ""; }; + 1BBAEC6F1F80237B0047DEA8 /* util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + 1BBAEC701F80237C0047DEA8 /* TODO */ = {isa = PBXFileReference; lastKnownFileType = text; path = TODO; sourceTree = ""; }; + 1BBAEC711F80237C0047DEA8 /* test.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = test.c; sourceTree = ""; }; + 1BBAEC7D1F8025020047DEA8 /* BRCrypto.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BRCrypto.c; sourceTree = ""; }; + 22122B711F0B8996000E9AB9 /* BRAPIClient+Events.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BRAPIClient+Events.swift"; sourceTree = ""; }; + 222319B11F279B3C00008F20 /* POSTBouncer.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = POSTBouncer.html; sourceTree = ""; }; + 2228734E1E916FC30044BA15 /* BRAPIClient+Wallet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BRAPIClient+Wallet.swift"; sourceTree = ""; }; + 222C424F1E90492800078EB5 /* BRAPIClient+KV.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BRAPIClient+KV.swift"; sourceTree = ""; }; + 223DB2171DF691260076A151 /* BRSocketHelpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BRSocketHelpers.c; path = Platform/BRSocketHelpers.c; sourceTree = ""; }; + 223DB2181DF691260076A151 /* BRSocketHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BRSocketHelpers.h; path = Platform/BRSocketHelpers.h; sourceTree = ""; }; + 22A9A9321DF61945000F0016 /* BRAPIClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BRAPIClient.swift; path = Platform/BRAPIClient.swift; sourceTree = ""; }; + 22A9A9371DF61945000F0016 /* BRCoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BRCoding.swift; path = Platform/BRCoding.swift; sourceTree = ""; }; + 22A9A93D1DF61945000F0016 /* TxMetaData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TxMetaData.swift; path = Platform/TxMetaData.swift; sourceTree = ""; }; + 22A9A9401DF61945000F0016 /* BRReplicatedKVStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BRReplicatedKVStore.swift; path = Platform/BRReplicatedKVStore.swift; sourceTree = ""; }; + 22A9A9451DF61945000F0016 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Platform/Extensions.swift; sourceTree = ""; }; + 22A9A95D1DF61FD0000F0016 /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; }; + 22A9A95F1DF61FD8000F0016 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 22A9A9611DF61FE0000F0016 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 22A9A9631DF61FE7000F0016 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 22A9A9651DF61FEE000F0016 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 22A9A9671DF61FF8000F0016 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; + 22A9A9A91DF64B97000F0016 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Modules/libbz2/Info.plist; sourceTree = SOURCE_ROOT; }; + 22A9A9AA1DF64B97000F0016 /* iphone.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = iphone.modulemap; path = Modules/libbz2/iphone.modulemap; sourceTree = SOURCE_ROOT; }; + 22A9A9AB1DF64B97000F0016 /* iphonesim.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = iphonesim.modulemap; path = Modules/libbz2/iphonesim.modulemap; sourceTree = SOURCE_ROOT; }; + 24016D8F23F913C1006A6791 /* LWAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LWAnalytics.swift; sourceTree = ""; }; + 2427342B2381C21800E2D22F /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; + 24306796238F3DF900EBEA99 /* BartyCrouch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BartyCrouch.swift; sourceTree = ""; }; + 24306799238F479500EBEA99 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; + 2430679B238F5A2900EBEA99 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 24313C732381E73200A83F69 /* TransactionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionManager.swift; sourceTree = ""; }; + 24313C7923820BC200A83F69 /* SendLTCViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendLTCViewController.swift; sourceTree = ""; }; + 24313C7C23820C1900A83F69 /* TransactionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionsViewController.swift; sourceTree = ""; }; + 24313C8223820C4B00A83F69 /* ReceiveLTCViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveLTCViewController.swift; sourceTree = ""; }; + 24313C8523821B8C00A83F69 /* PromptTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptTableViewCell.swift; sourceTree = ""; }; + 24313C902382433700A83F69 /* LFModalReceiveQRViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LFModalReceiveQRViewController.swift; sourceTree = ""; }; + 24313C9323824F5700A83F69 /* Transactions.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Transactions.storyboard; sourceTree = ""; }; + 24313C9423824F5700A83F69 /* Alerts.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Alerts.storyboard; sourceTree = ""; }; + 24313C9523824F5700A83F69 /* Animate.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Animate.storyboard; sourceTree = ""; }; + 24313C9623824F5800A83F69 /* Receive.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Receive.storyboard; sourceTree = ""; }; + 24313C9723824F5800A83F69 /* Send.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Send.storyboard; sourceTree = ""; }; + 24313C9823824F5800A83F69 /* Buy.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Buy.storyboard; sourceTree = ""; }; + 24313CA823824F9800A83F69 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + 2437530E238AE08A00E1B2AE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = de; path = de.lproj/BIP39Words.plist; sourceTree = ""; }; + 24375311238AE09100E1B2AE /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = id; path = id.lproj/BIP39Words.plist; sourceTree = ""; }; + 24375314238AE09700E1B2AE /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = pt; path = pt.lproj/BIP39Words.plist; sourceTree = ""; }; + 24375315238AE09900E1B2AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = ru; path = ru.lproj/BIP39Words.plist; sourceTree = ""; }; + 24393B5B23C259400075218D /* Phrase.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Phrase.storyboard; sourceTree = ""; }; + 24470E2023A5DA9700ADDA27 /* APIManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIManagerTests.swift; sourceTree = ""; }; + 24470E2223A5DB7D00ADDA27 /* WalletManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletManagerTests.swift; sourceTree = ""; }; + 24470E2923A5F33000ADDA27 /* BRReplicatedKVStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRReplicatedKVStoreTests.swift; sourceTree = ""; }; + 24470E2B23A5F43B00ADDA27 /* DefaultFiatCurrencyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultFiatCurrencyTests.swift; sourceTree = ""; }; + 24470E2D23A5F4FF00ADDA27 /* BRCoderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRCoderTests.swift; sourceTree = ""; }; + 24470E3123A5F5B100ADDA27 /* NSDataExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSDataExtensionTests.swift; sourceTree = ""; }; + 24470E3323A5F5E600ADDA27 /* PaymentRequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentRequestTests.swift; sourceTree = ""; }; + 24470E3523A5FDE800ADDA27 /* PhraseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhraseTests.swift; sourceTree = ""; }; + 24470E3723A5FEF200ADDA27 /* SpendingLimitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpendingLimitTests.swift; sourceTree = ""; }; + 24470E3923A5FF5700ADDA27 /* TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHelpers.swift; sourceTree = ""; }; + 24470E3B23A5FFD700ADDA27 /* TouchIdEnabledTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchIdEnabledTests.swift; sourceTree = ""; }; + 24470E3D23A6000900ADDA27 /* WalletAuthenticationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletAuthenticationTests.swift; sourceTree = ""; }; + 24470E3F23A6004800ADDA27 /* WalletCreationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletCreationTests.swift; sourceTree = ""; }; + 24470E4123A6007200ADDA27 /* WalletInfoTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletInfoTest.swift; sourceTree = ""; }; + 24470E4423A608A700ADDA27 /* AmountTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountTests.swift; sourceTree = ""; }; + 24470E4623A6B6E900ADDA27 /* MockSeeds.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSeeds.swift; sourceTree = ""; }; + 2464B6DA238A53FC00B2A2CB /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "zh-Hant"; path = "zh-Hant.lproj/BIP39Words.plist"; sourceTree = ""; }; + 2464B6DB238A543300B2A2CB /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = fr; path = fr.lproj/BIP39Words.plist; sourceTree = ""; }; + 2464B6DC238A543800B2A2CB /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = ja; path = ja.lproj/BIP39Words.plist; sourceTree = ""; }; + 2464B6DD238A543D00B2A2CB /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = ko; path = ko.lproj/BIP39Words.plist; sourceTree = ""; }; + 2464B6DF238A586600B2A2CB /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = es; path = es.lproj/BIP39Words.plist; sourceTree = ""; }; + 2465873623A5AAD000A32E9E /* litewalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = litewalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 2465873A23A5AAD100A32E9E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 24670EAC2368EDE7006093E0 /* LFColorPalette.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = LFColorPalette.xcassets; sourceTree = ""; }; + 2485F7CE23728C19005962F1 /* RELEASE_NOTES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = RELEASE_NOTES.md; sourceTree = ""; }; + 248BFE2523AB302200CE1A71 /* BuyWKWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyWKWebViewController.swift; sourceTree = ""; }; + 2494037523AD35C000369261 /* BuyWKWebVCTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyWKWebVCTests.swift; sourceTree = ""; }; + 2494037723AD53B900369261 /* ChildViewTransitioningDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChildViewTransitioningDelegate.swift; sourceTree = ""; }; + 2494037C23AE0C7100369261 /* SyncProgressHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncProgressHeaderView.swift; sourceTree = ""; }; + 2494037D23AE0C7100369261 /* SyncProgressHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SyncProgressHeaderView.xib; sourceTree = ""; }; + 2494038023AF208F00369261 /* PromptModalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptModalViewController.swift; sourceTree = ""; }; + 249F9770236F862C0045087A /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/MainInterface.strings; sourceTree = ""; }; + 24A6DCFA2230BD9000505F44 /* WipeEmptyWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WipeEmptyWalletViewController.swift; sourceTree = ""; }; + 24AF00FC221B331D00FF636F /* WarningConfirmation.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = WarningConfirmation.storyboard; sourceTree = ""; }; + 24AF00FF221B349100FF636F /* WarningConfirmationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningConfirmationViewController.swift; sourceTree = ""; }; + 24B523AE238A53DC0030594D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = en; path = en.lproj/BIP39Words.plist; sourceTree = ""; }; + 24B523B0238A53E40030594D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "zh-Hans"; path = "zh-Hans.lproj/BIP39Words.plist"; sourceTree = ""; }; + 24B8FAC3216128A000A155B1 /* PartnerData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnerData.swift; sourceTree = ""; }; + 24B8FAD12162B10200A155B1 /* BuyCenterWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyCenterWebViewController.swift; sourceTree = ""; }; + 24B8FADE2163C4D400A155B1 /* Currency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Currency.swift; sourceTree = ""; }; + 24B9621723BA66CC00ECD938 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/MainInterface.strings; sourceTree = ""; }; + 24B9621923BA66CE00ECD938 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MainInterface.strings"; sourceTree = ""; }; + 24B9621B23BA66CF00ECD938 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainInterface.strings; sourceTree = ""; }; + 24BA90C52410129E001E3825 /* FeeSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeeSelectorView.swift; sourceTree = ""; }; + 24D5F22522599C0900225462 /* BarlowSemiCondensed-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-Italic.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-Italic.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F22622599C0A00225462 /* BarlowSemiCondensed-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-Bold.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-Bold.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F22D22599C0A00225462 /* BarlowSemiCondensed-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-Light.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-Light.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F23022599C0B00225462 /* BarlowSemiCondensed-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-Medium.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-Medium.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F23222599C0B00225462 /* BarlowSemiCondensed-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-Regular.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-Regular.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F23422599C0B00225462 /* BarlowSemiCondensed-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "BarlowSemiCondensed-SemiBold.ttf"; path = "litewallet/Fonts/BarlowSemiCondensed-SemiBold.ttf"; sourceTree = SOURCE_ROOT; }; + 24D5F26D225A5BEA00225462 /* ContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerViewController.swift; sourceTree = ""; }; + 24D91D0A2166923E0077A619 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; + 24D91D0D2166A5480077A619 /* TestnetData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestnetData.swift; sourceTree = ""; }; + 24DFCE6723B89CDE001F17F8 /* Settings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; + 584E24F22951C119005E0E8B /* Localization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Localization.swift; sourceTree = ""; }; + 584E24F42951D2DB005E0E8B /* BundleExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleExtension.swift; sourceTree = ""; }; + 584E24F72951D412005E0E8B /* LanguageSelectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSelectionViewController.swift; sourceTree = ""; }; + 584E24F92951D43A005E0E8B /* LanguageSelectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSelectionViewModel.swift; sourceTree = ""; }; + 584E24FB2951D476005E0E8B /* NSNotificationNameExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSNotificationNameExtension.swift; sourceTree = ""; }; + 584E24FD2951D752005E0E8B /* UITableViewExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewExtension.swift; sourceTree = ""; }; + 584E25002951DAAA005E0E8B /* LanguageSelectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSelectionTests.swift; sourceTree = ""; }; + 7503773C1DF57428005EB8AE /* WalletManager+Auth.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WalletManager+Auth.swift"; sourceTree = ""; }; + 7528D2971ECF655500925DBC /* PaymentProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaymentProtocol.swift; sourceTree = ""; }; + 752FB03B1DF8BE4B009086FB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 752FB03C1DF8BE4B009086FB /* iphone.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = iphone.modulemap; sourceTree = ""; }; + 752FB03D1DF8BE4B009086FB /* iphonesim.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = iphonesim.modulemap; sourceTree = ""; }; + 754AE0BB1DFE8A46007FD001 /* BRCore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BRCore.swift; sourceTree = ""; }; + 754AE0BD1DFE8E5A007FD001 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = Platform/module.modulemap; sourceTree = ""; }; + 75519F331DC7D20500EDF66C /* WalletManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletManager.swift; sourceTree = ""; }; + 755CD38B1DAA0E3E0075898E /* cachedb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cachedb.c; sourceTree = ""; }; + 755CD38C1DAA0E3E0075898E /* cachedb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cachedb.h; sourceTree = ""; }; + 755CD38E1DAA0E3E0075898E /* arc4_lock.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = arc4_lock.c; sourceTree = ""; }; + 755CD38F1DAA0E3E0075898E /* arc4random.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = arc4random.c; sourceTree = ""; }; + 755CD3901DAA0E3E0075898E /* arc4random_uniform.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = arc4random_uniform.c; sourceTree = ""; }; + 755CD3911DAA0E3E0075898E /* chacha_private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chacha_private.h; sourceTree = ""; }; + 755CD3921DAA0E3E0075898E /* ctime_r.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ctime_r.c; sourceTree = ""; }; + 755CD3931DAA0E3E0075898E /* explicit_bzero.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = explicit_bzero.c; sourceTree = ""; }; + 755CD3941DAA0E3E0075898E /* fake-rfc2553.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "fake-rfc2553.c"; sourceTree = ""; }; + 755CD3951DAA0E3E0075898E /* fake-rfc2553.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "fake-rfc2553.h"; sourceTree = ""; }; + 755CD3961DAA0E3E0075898E /* getentropy_linux.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getentropy_linux.c; sourceTree = ""; }; + 755CD3971DAA0E3E0075898E /* getentropy_osx.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getentropy_osx.c; sourceTree = ""; }; + 755CD3981DAA0E3E0075898E /* getentropy_solaris.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getentropy_solaris.c; sourceTree = ""; }; + 755CD3991DAA0E3E0075898E /* getentropy_win.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getentropy_win.c; sourceTree = ""; }; + 755CD39A1DAA0E3E0075898E /* gmtime_r.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gmtime_r.c; sourceTree = ""; }; + 755CD39B1DAA0E3E0075898E /* inet_aton.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = inet_aton.c; sourceTree = ""; }; + 755CD39C1DAA0E3E0075898E /* inet_ntop.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = inet_ntop.c; sourceTree = ""; }; + 755CD39D1DAA0E3E0075898E /* inet_pton.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = inet_pton.c; sourceTree = ""; }; + 755CD39E1DAA0E3E0075898E /* isblank.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = isblank.c; sourceTree = ""; }; + 755CD39F1DAA0E3E0075898E /* malloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = malloc.c; sourceTree = ""; }; + 755CD3A01DAA0E3E0075898E /* memcmp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = memcmp.c; sourceTree = ""; }; + 755CD3A11DAA0E3E0075898E /* memcmp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memcmp.h; sourceTree = ""; }; + 755CD3A21DAA0E3E0075898E /* memmove.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = memmove.c; sourceTree = ""; }; + 755CD3A31DAA0E3E0075898E /* reallocarray.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = reallocarray.c; sourceTree = ""; }; + 755CD3A41DAA0E3E0075898E /* sha512.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha512.c; sourceTree = ""; }; + 755CD3A51DAA0E3E0075898E /* snprintf.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = snprintf.c; sourceTree = ""; }; + 755CD3A61DAA0E3E0075898E /* strlcat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = strlcat.c; sourceTree = ""; }; + 755CD3A71DAA0E3E0075898E /* strlcpy.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = strlcpy.c; sourceTree = ""; }; + 755CD3A81DAA0E3E0075898E /* strptime.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = strptime.c; sourceTree = ""; }; + 755CD3A91DAA0E3E0075898E /* strsep.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = strsep.c; sourceTree = ""; }; + 755CD3AB1DAA0E3E0075898E /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + 755CD3DB1DAA0E3E0075898E /* dns64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dns64.c; sourceTree = ""; }; + 755CD3DC1DAA0E3E0075898E /* dns64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dns64.h; sourceTree = ""; }; + 755CD3DE1DAA0E3E0075898E /* dnstap.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dnstap.c; sourceTree = ""; }; + 755CD3DF1DAA0E3E0075898E /* dnstap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dnstap.h; sourceTree = ""; }; + 755CD3E21DAA0E3E0075898E /* dnstap_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dnstap_config.h; sourceTree = ""; }; + 755CD3FD1DAA0E3E0075898E /* iter_delegpt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_delegpt.c; sourceTree = ""; }; + 755CD3FE1DAA0E3E0075898E /* iter_delegpt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_delegpt.h; sourceTree = ""; }; + 755CD3FF1DAA0E3E0075898E /* iter_donotq.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_donotq.c; sourceTree = ""; }; + 755CD4001DAA0E3E0075898E /* iter_donotq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_donotq.h; sourceTree = ""; }; + 755CD4011DAA0E3E0075898E /* iter_fwd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_fwd.c; sourceTree = ""; }; + 755CD4021DAA0E3E0075898E /* iter_fwd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_fwd.h; sourceTree = ""; }; + 755CD4031DAA0E3E0075898E /* iter_hints.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_hints.c; sourceTree = ""; }; + 755CD4041DAA0E3E0075898E /* iter_hints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_hints.h; sourceTree = ""; }; + 755CD4051DAA0E3E0075898E /* iter_priv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_priv.c; sourceTree = ""; }; + 755CD4061DAA0E3E0075898E /* iter_priv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_priv.h; sourceTree = ""; }; + 755CD4071DAA0E3E0075898E /* iter_resptype.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_resptype.c; sourceTree = ""; }; + 755CD4081DAA0E3E0075898E /* iter_resptype.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_resptype.h; sourceTree = ""; }; + 755CD4091DAA0E3E0075898E /* iter_scrub.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_scrub.c; sourceTree = ""; }; + 755CD40A1DAA0E3E0075898E /* iter_scrub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_scrub.h; sourceTree = ""; }; + 755CD40B1DAA0E3E0075898E /* iter_utils.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iter_utils.c; sourceTree = ""; }; + 755CD40C1DAA0E3E0075898E /* iter_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iter_utils.h; sourceTree = ""; }; + 755CD40D1DAA0E3E0075898E /* iterator.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = iterator.c; sourceTree = ""; }; + 755CD40E1DAA0E3E0075898E /* iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = ""; }; + 755CD4101DAA0E3E0075898E /* context.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = context.c; sourceTree = ""; }; + 755CD4111DAA0E3E0075898E /* context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = context.h; sourceTree = ""; }; + 755CD4121DAA0E3E0075898E /* libunbound.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libunbound.c; sourceTree = ""; }; + 755CD4131DAA0E3E0075898E /* libworker.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libworker.c; sourceTree = ""; }; + 755CD4141DAA0E3E0075898E /* libworker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libworker.h; sourceTree = ""; }; + 755CD43D1DAA0E3E0075898E /* unbound-event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "unbound-event.h"; sourceTree = ""; }; + 755CD43E1DAA0E3E0075898E /* unbound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unbound.h; sourceTree = ""; }; + 755CD43F1DAA0E3E0075898E /* worker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = worker.h; sourceTree = ""; }; + 755CD4441DAA0E3E0075898E /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; + 755CD4751DAA0E3E0075898E /* dns.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dns.c; sourceTree = ""; }; + 755CD4761DAA0E3E0075898E /* dns.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dns.h; sourceTree = ""; }; + 755CD4771DAA0E3E0075898E /* infra.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = infra.c; sourceTree = ""; }; + 755CD4781DAA0E3E0075898E /* infra.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = infra.h; sourceTree = ""; }; + 755CD4791DAA0E3E0075898E /* rrset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rrset.c; sourceTree = ""; }; + 755CD47A1DAA0E3E0075898E /* rrset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rrset.h; sourceTree = ""; }; + 755CD47B1DAA0E3E0075898E /* listen_dnsport.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = listen_dnsport.c; sourceTree = ""; }; + 755CD47C1DAA0E3E0075898E /* listen_dnsport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = listen_dnsport.h; sourceTree = ""; }; + 755CD47D1DAA0E3E0075898E /* localzone.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = localzone.c; sourceTree = ""; }; + 755CD47E1DAA0E3E0075898E /* localzone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = localzone.h; sourceTree = ""; }; + 755CD47F1DAA0E3E0075898E /* mesh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mesh.c; sourceTree = ""; }; + 755CD4801DAA0E3E0075898E /* mesh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mesh.h; sourceTree = ""; }; + 755CD4811DAA0E3E0075898E /* modstack.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = modstack.c; sourceTree = ""; }; + 755CD4821DAA0E3E0075898E /* modstack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = modstack.h; sourceTree = ""; }; + 755CD4831DAA0E3E0075898E /* outbound_list.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = outbound_list.c; sourceTree = ""; }; + 755CD4841DAA0E3E0075898E /* outbound_list.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = outbound_list.h; sourceTree = ""; }; + 755CD4851DAA0E3E0075898E /* outside_network.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = outside_network.c; sourceTree = ""; }; + 755CD4861DAA0E3E0075898E /* outside_network.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = outside_network.h; sourceTree = ""; }; + 755CD4881DAA0E3E0075898E /* keyraw.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = keyraw.c; sourceTree = ""; }; + 755CD4891DAA0E3E0075898E /* keyraw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keyraw.h; sourceTree = ""; }; + 755CD48A1DAA0E3E0075898E /* parse.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = ""; }; + 755CD48B1DAA0E3E0075898E /* parse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = ""; }; + 755CD48C1DAA0E3E0075898E /* parseutil.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = parseutil.c; sourceTree = ""; }; + 755CD48D1DAA0E3E0075898E /* parseutil.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parseutil.h; sourceTree = ""; }; + 755CD48E1DAA0E3E0075898E /* pkthdr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pkthdr.h; sourceTree = ""; }; + 755CD48F1DAA0E3E0075898E /* rrdef.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rrdef.c; sourceTree = ""; }; + 755CD4901DAA0E3E0075898E /* rrdef.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rrdef.h; sourceTree = ""; }; + 755CD4911DAA0E3E0075898E /* sbuffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sbuffer.c; sourceTree = ""; }; + 755CD4921DAA0E3E0075898E /* sbuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sbuffer.h; sourceTree = ""; }; + 755CD4931DAA0E3E0075898E /* str2wire.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = str2wire.c; sourceTree = ""; }; + 755CD4941DAA0E3E0075898E /* str2wire.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str2wire.h; sourceTree = ""; }; + 755CD4951DAA0E3E0075898E /* wire2str.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = wire2str.c; sourceTree = ""; }; + 755CD4961DAA0E3E0075898E /* wire2str.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wire2str.h; sourceTree = ""; }; + 755CD6761DAA0E400075898E /* alloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = alloc.c; sourceTree = ""; }; + 755CD6771DAA0E400075898E /* alloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = alloc.h; sourceTree = ""; }; + 755CD6781DAA0E400075898E /* as112.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = as112.c; sourceTree = ""; }; + 755CD6791DAA0E400075898E /* as112.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = as112.h; sourceTree = ""; }; + 755CD67A1DAA0E400075898E /* config_file.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = config_file.c; sourceTree = ""; }; + 755CD67B1DAA0E400075898E /* config_file.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config_file.h; sourceTree = ""; }; + 755CD67C1DAA0E400075898E /* configlexer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = configlexer.c; sourceTree = ""; }; + 755CD67E1DAA0E400075898E /* configparser.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = configparser.c; sourceTree = ""; }; + 755CD67F1DAA0E400075898E /* configparser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = configparser.h; sourceTree = ""; }; + 755CD6811DAA0E400075898E /* configyyrename.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = configyyrename.h; sourceTree = ""; }; + 755CD6831DAA0E400075898E /* dname.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dname.c; sourceTree = ""; }; + 755CD6841DAA0E400075898E /* dname.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dname.h; sourceTree = ""; }; + 755CD6851DAA0E400075898E /* msgencode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = msgencode.c; sourceTree = ""; }; + 755CD6861DAA0E400075898E /* msgencode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = msgencode.h; sourceTree = ""; }; + 755CD6871DAA0E400075898E /* msgparse.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = msgparse.c; sourceTree = ""; }; + 755CD6881DAA0E400075898E /* msgparse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = msgparse.h; sourceTree = ""; }; + 755CD6891DAA0E400075898E /* msgreply.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = msgreply.c; sourceTree = ""; }; + 755CD68A1DAA0E400075898E /* msgreply.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = msgreply.h; sourceTree = ""; }; + 755CD68B1DAA0E400075898E /* packed_rrset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = packed_rrset.c; sourceTree = ""; }; + 755CD68C1DAA0E400075898E /* packed_rrset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = packed_rrset.h; sourceTree = ""; }; + 755CD68D1DAA0E400075898E /* fptr_wlist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fptr_wlist.c; sourceTree = ""; }; + 755CD68E1DAA0E400075898E /* fptr_wlist.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fptr_wlist.h; sourceTree = ""; }; + 755CD6901DAA0E400075898E /* locks.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = locks.c; sourceTree = ""; }; + 755CD6911DAA0E400075898E /* locks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = locks.h; sourceTree = ""; }; + 755CD6921DAA0E400075898E /* log.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = ""; }; + 755CD6931DAA0E400075898E /* log.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + 755CD6941DAA0E400075898E /* mini_event.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mini_event.c; sourceTree = ""; }; + 755CD6951DAA0E400075898E /* mini_event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mini_event.h; sourceTree = ""; }; + 755CD6961DAA0E400075898E /* module.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = module.c; sourceTree = ""; }; + 755CD6971DAA0E400075898E /* module.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = module.h; sourceTree = ""; }; + 755CD6981DAA0E400075898E /* net_help.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = net_help.c; sourceTree = ""; }; + 755CD6991DAA0E400075898E /* net_help.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = net_help.h; sourceTree = ""; }; + 755CD69A1DAA0E400075898E /* netevent.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = netevent.c; sourceTree = ""; }; + 755CD69B1DAA0E400075898E /* netevent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = netevent.h; sourceTree = ""; }; + 755CD69C1DAA0E400075898E /* random.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = random.c; sourceTree = ""; }; + 755CD69D1DAA0E400075898E /* random.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = ""; }; + 755CD69E1DAA0E400075898E /* rbtree.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rbtree.c; sourceTree = ""; }; + 755CD69F1DAA0E400075898E /* rbtree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rbtree.h; sourceTree = ""; }; + 755CD6A01DAA0E400075898E /* regional.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = regional.c; sourceTree = ""; }; + 755CD6A11DAA0E400075898E /* regional.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = regional.h; sourceTree = ""; }; + 755CD6A21DAA0E400075898E /* rtt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rtt.c; sourceTree = ""; }; + 755CD6A31DAA0E400075898E /* rtt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtt.h; sourceTree = ""; }; + 755CD6A51DAA0E400075898E /* dnstree.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dnstree.c; sourceTree = ""; }; + 755CD6A61DAA0E400075898E /* dnstree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dnstree.h; sourceTree = ""; }; + 755CD6A71DAA0E400075898E /* lookup3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lookup3.c; sourceTree = ""; }; + 755CD6A81DAA0E400075898E /* lookup3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lookup3.h; sourceTree = ""; }; + 755CD6A91DAA0E400075898E /* lruhash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = lruhash.c; sourceTree = ""; }; + 755CD6AA1DAA0E400075898E /* lruhash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lruhash.h; sourceTree = ""; }; + 755CD6AB1DAA0E400075898E /* slabhash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = slabhash.c; sourceTree = ""; }; + 755CD6AC1DAA0E400075898E /* slabhash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = slabhash.h; sourceTree = ""; }; + 755CD6AD1DAA0E400075898E /* timehist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = timehist.c; sourceTree = ""; }; + 755CD6AE1DAA0E400075898E /* timehist.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = timehist.h; sourceTree = ""; }; + 755CD6AF1DAA0E400075898E /* tube.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tube.c; sourceTree = ""; }; + 755CD6B01DAA0E400075898E /* tube.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tube.h; sourceTree = ""; }; + 755CD6B11DAA0E400075898E /* ub_event.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ub_event.c; sourceTree = ""; }; + 755CD6B21DAA0E400075898E /* ub_event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ub_event.h; sourceTree = ""; }; + 755CD6B31DAA0E400075898E /* ub_event_pluggable.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ub_event_pluggable.c; sourceTree = ""; }; + 755CD6B71DAA0E400075898E /* autotrust.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = autotrust.c; sourceTree = ""; }; + 755CD6B81DAA0E400075898E /* autotrust.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = autotrust.h; sourceTree = ""; }; + 755CD6B91DAA0E400075898E /* val_anchor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_anchor.c; sourceTree = ""; }; + 755CD6BA1DAA0E400075898E /* val_anchor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_anchor.h; sourceTree = ""; }; + 755CD6BB1DAA0E400075898E /* val_kcache.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_kcache.c; sourceTree = ""; }; + 755CD6BC1DAA0E400075898E /* val_kcache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_kcache.h; sourceTree = ""; }; + 755CD6BD1DAA0E400075898E /* val_kentry.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_kentry.c; sourceTree = ""; }; + 755CD6BE1DAA0E400075898E /* val_kentry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_kentry.h; sourceTree = ""; }; + 755CD6BF1DAA0E400075898E /* val_neg.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_neg.c; sourceTree = ""; }; + 755CD6C01DAA0E400075898E /* val_neg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_neg.h; sourceTree = ""; }; + 755CD6C11DAA0E400075898E /* val_nsec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_nsec.c; sourceTree = ""; }; + 755CD6C21DAA0E400075898E /* val_nsec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_nsec.h; sourceTree = ""; }; + 755CD6C31DAA0E400075898E /* val_nsec3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_nsec3.c; sourceTree = ""; }; + 755CD6C41DAA0E400075898E /* val_nsec3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_nsec3.h; sourceTree = ""; }; + 755CD6C51DAA0E400075898E /* val_secalgo.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_secalgo.c; sourceTree = ""; }; + 755CD6C61DAA0E400075898E /* val_secalgo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_secalgo.h; sourceTree = ""; }; + 755CD6C71DAA0E400075898E /* val_sigcrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_sigcrypt.c; sourceTree = ""; }; + 755CD6C81DAA0E400075898E /* val_sigcrypt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_sigcrypt.h; sourceTree = ""; }; + 755CD6C91DAA0E400075898E /* val_utils.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = val_utils.c; sourceTree = ""; }; + 755CD6CA1DAA0E400075898E /* val_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = val_utils.h; sourceTree = ""; }; + 755CD6CB1DAA0E400075898E /* validator.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = validator.c; sourceTree = ""; }; + 755CD6CC1DAA0E400075898E /* validator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = validator.h; sourceTree = ""; }; + 755CD70A1DAA16810075898E /* aes-decrypt-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-decrypt-internal.c"; sourceTree = ""; }; + 755CD70B1DAA16810075898E /* aes-decrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-decrypt.c"; sourceTree = ""; }; + 755CD70C1DAA16810075898E /* aes-encrypt-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-encrypt-internal.c"; sourceTree = ""; }; + 755CD70D1DAA16810075898E /* aes-encrypt-table.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-encrypt-table.c"; sourceTree = ""; }; + 755CD70E1DAA16810075898E /* aes-encrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-encrypt.c"; sourceTree = ""; }; + 755CD70F1DAA16810075898E /* aes-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "aes-internal.h"; sourceTree = ""; }; + 755CD7101DAA16810075898E /* aes-invert-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-invert-internal.c"; sourceTree = ""; }; + 755CD7111DAA16810075898E /* aes-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-set-decrypt-key.c"; sourceTree = ""; }; + 755CD7121DAA16810075898E /* aes-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-set-encrypt-key.c"; sourceTree = ""; }; + 755CD7131DAA16810075898E /* aes-set-key-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes-set-key-internal.c"; sourceTree = ""; }; + 755CD7141DAA16810075898E /* aes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; + 755CD7151DAA16810075898E /* aes128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes128-meta.c"; sourceTree = ""; }; + 755CD7161DAA16810075898E /* aes128-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes128-set-decrypt-key.c"; sourceTree = ""; }; + 755CD7171DAA16810075898E /* aes128-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes128-set-encrypt-key.c"; sourceTree = ""; }; + 755CD7181DAA16810075898E /* aes192-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes192-meta.c"; sourceTree = ""; }; + 755CD7191DAA16810075898E /* aes192-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes192-set-decrypt-key.c"; sourceTree = ""; }; + 755CD71A1DAA16810075898E /* aes192-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes192-set-encrypt-key.c"; sourceTree = ""; }; + 755CD71B1DAA16810075898E /* aes256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes256-meta.c"; sourceTree = ""; }; + 755CD71C1DAA16810075898E /* aes256-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes256-set-decrypt-key.c"; sourceTree = ""; }; + 755CD71D1DAA16810075898E /* aes256-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "aes256-set-encrypt-key.c"; sourceTree = ""; }; + 755CD71E1DAA16810075898E /* aesdata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = aesdata.c; sourceTree = ""; }; + 755CD71F1DAA16810075898E /* arcfour-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "arcfour-crypt.c"; sourceTree = ""; }; + 755CD7201DAA16810075898E /* arcfour.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = arcfour.c; sourceTree = ""; }; + 755CD7211DAA16810075898E /* arcfour.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = arcfour.h; sourceTree = ""; }; + 755CD7221DAA16810075898E /* arctwo-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "arctwo-meta.c"; sourceTree = ""; }; + 755CD7231DAA16810075898E /* arctwo.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = arctwo.c; sourceTree = ""; }; + 755CD7241DAA16810075898E /* arctwo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = arctwo.h; sourceTree = ""; }; + 755CD74B1DAA16810075898E /* asn1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = ""; }; + 755CD74D1DAA16810075898E /* base16-decode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base16-decode.c"; sourceTree = ""; }; + 755CD74E1DAA16810075898E /* base16-encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base16-encode.c"; sourceTree = ""; }; + 755CD74F1DAA16810075898E /* base16-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base16-meta.c"; sourceTree = ""; }; + 755CD7501DAA16810075898E /* base16.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = base16.h; sourceTree = ""; }; + 755CD7511DAA16810075898E /* base64-decode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64-decode.c"; sourceTree = ""; }; + 755CD7521DAA16810075898E /* base64-encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64-encode.c"; sourceTree = ""; }; + 755CD7531DAA16810075898E /* base64-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64-meta.c"; sourceTree = ""; }; + 755CD7541DAA16810075898E /* base64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; + 755CD7551DAA16810075898E /* base64url-decode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64url-decode.c"; sourceTree = ""; }; + 755CD7561DAA16810075898E /* base64url-encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64url-encode.c"; sourceTree = ""; }; + 755CD7571DAA16810075898E /* base64url-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "base64url-meta.c"; sourceTree = ""; }; + 755CD7581DAA16810075898E /* bignum-random-prime.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "bignum-random-prime.c"; sourceTree = ""; }; + 755CD7591DAA16810075898E /* bignum-random.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "bignum-random.c"; sourceTree = ""; }; + 755CD75A1DAA16810075898E /* bignum.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bignum.c; sourceTree = ""; }; + 755CD75B1DAA16810075898E /* bignum.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bignum.h; sourceTree = ""; }; + 755CD75C1DAA16810075898E /* blowfish.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = blowfish.c; sourceTree = ""; }; + 755CD75D1DAA16810075898E /* blowfish.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; + 755CD75E1DAA16810075898E /* buffer-init.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "buffer-init.c"; sourceTree = ""; }; + 755CD75F1DAA16810075898E /* buffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = ""; }; + 755CD7601DAA16810075898E /* buffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = ""; }; + 755CD7611DAA16810075898E /* camellia-absorb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia-absorb.c"; sourceTree = ""; }; + 755CD7621DAA16810075898E /* camellia-crypt-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia-crypt-internal.c"; sourceTree = ""; }; + 755CD7631DAA16810075898E /* camellia-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "camellia-internal.h"; sourceTree = ""; }; + 755CD7641DAA16810075898E /* camellia-invert-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia-invert-key.c"; sourceTree = ""; }; + 755CD7651DAA16810075898E /* camellia-table.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia-table.c"; sourceTree = ""; }; + 755CD7661DAA16810075898E /* camellia.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = ""; }; + 755CD7671DAA16810075898E /* camellia128-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia128-crypt.c"; sourceTree = ""; }; + 755CD7681DAA16810075898E /* camellia128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia128-meta.c"; sourceTree = ""; }; + 755CD7691DAA16810075898E /* camellia128-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia128-set-decrypt-key.c"; sourceTree = ""; }; + 755CD76A1DAA16810075898E /* camellia128-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia128-set-encrypt-key.c"; sourceTree = ""; }; + 755CD76B1DAA16810075898E /* camellia192-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia192-meta.c"; sourceTree = ""; }; + 755CD76C1DAA16810075898E /* camellia256-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia256-crypt.c"; sourceTree = ""; }; + 755CD76D1DAA16810075898E /* camellia256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia256-meta.c"; sourceTree = ""; }; + 755CD76E1DAA16810075898E /* camellia256-set-decrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia256-set-decrypt-key.c"; sourceTree = ""; }; + 755CD76F1DAA16810075898E /* camellia256-set-encrypt-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "camellia256-set-encrypt-key.c"; sourceTree = ""; }; + 755CD7701DAA16810075898E /* cast128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "cast128-meta.c"; sourceTree = ""; }; + 755CD7711DAA16810075898E /* cast128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cast128.c; sourceTree = ""; }; + 755CD7721DAA16810075898E /* cast128.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cast128.h; sourceTree = ""; }; + 755CD7731DAA16810075898E /* cast128_sboxes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cast128_sboxes.h; sourceTree = ""; }; + 755CD7741DAA16810075898E /* cbc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = cbc.c; sourceTree = ""; }; + 755CD7751DAA16810075898E /* cbc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cbc.h; sourceTree = ""; }; + 755CD7761DAA16810075898E /* ccm-aes128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ccm-aes128.c"; sourceTree = ""; }; + 755CD7771DAA16810075898E /* ccm-aes192.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ccm-aes192.c"; sourceTree = ""; }; + 755CD7781DAA16810075898E /* ccm-aes256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ccm-aes256.c"; sourceTree = ""; }; + 755CD7791DAA16810075898E /* ccm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ccm.c; sourceTree = ""; }; + 755CD77A1DAA16810075898E /* ccm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ccm.h; sourceTree = ""; }; + 755CD77B1DAA16810075898E /* chacha-core-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-core-internal.c"; sourceTree = ""; }; + 755CD77C1DAA16810075898E /* chacha-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-crypt.c"; sourceTree = ""; }; + 755CD77D1DAA16810075898E /* chacha-poly1305-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-poly1305-meta.c"; sourceTree = ""; }; + 755CD77E1DAA16810075898E /* chacha-poly1305.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-poly1305.c"; sourceTree = ""; }; + 755CD77F1DAA16810075898E /* chacha-poly1305.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "chacha-poly1305.h"; sourceTree = ""; }; + 755CD7801DAA16810075898E /* chacha-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-set-key.c"; sourceTree = ""; }; + 755CD7811DAA16810075898E /* chacha-set-nonce.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "chacha-set-nonce.c"; sourceTree = ""; }; + 755CD7821DAA16810075898E /* chacha.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chacha.h; sourceTree = ""; }; + 755CD7841DAA16810075898E /* cnd-copy.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "cnd-copy.c"; sourceTree = ""; }; + 755CD7861DAA16810075898E /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + 755CD78E1DAA16810075898E /* ctr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ctr.c; sourceTree = ""; }; + 755CD78F1DAA16810075898E /* ctr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ctr.h; sourceTree = ""; }; + 755CD7901DAA16810075898E /* curve25519-eh-to-x.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "curve25519-eh-to-x.c"; sourceTree = ""; }; + 755CD7911DAA16810075898E /* curve25519-mul-g.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "curve25519-mul-g.c"; sourceTree = ""; }; + 755CD7921DAA16810075898E /* curve25519-mul.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "curve25519-mul.c"; sourceTree = ""; }; + 755CD7931DAA16810075898E /* curve25519.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = curve25519.h; sourceTree = ""; }; + 755CD7941DAA16810075898E /* der-iterator.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "der-iterator.c"; sourceTree = ""; }; + 755CD7951DAA16810075898E /* der2dsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = der2dsa.c; sourceTree = ""; }; + 755CD7961DAA16810075898E /* der2rsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = der2rsa.c; sourceTree = ""; }; + 755CD7971DAA16810075898E /* des-compat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "des-compat.c"; sourceTree = ""; }; + 755CD7981DAA16810075898E /* des-compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "des-compat.h"; sourceTree = ""; }; + 755CD7991DAA16810075898E /* des.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = des.c; sourceTree = ""; }; + 755CD79A1DAA16810075898E /* des.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = ""; }; + 755CD79B1DAA16810075898E /* des3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = des3.c; sourceTree = ""; }; + 755CD79C1DAA16810075898E /* desCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = desCode.h; sourceTree = ""; }; + 755CD79E1DAA16810075898E /* desdata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = desdata.c; sourceTree = ""; }; + 755CD79F1DAA16810075898E /* desinfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = desinfo.h; sourceTree = ""; }; + 755CD7A01DAA16810075898E /* dsa-compat-keygen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-compat-keygen.c"; sourceTree = ""; }; + 755CD7A11DAA16810075898E /* dsa-compat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-compat.c"; sourceTree = ""; }; + 755CD7A21DAA16810075898E /* dsa-compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "dsa-compat.h"; sourceTree = ""; }; + 755CD7A31DAA16810075898E /* dsa-gen-params.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-gen-params.c"; sourceTree = ""; }; + 755CD7A41DAA16810075898E /* dsa-hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-hash.c"; sourceTree = ""; }; + 755CD7A51DAA16810075898E /* dsa-keygen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-keygen.c"; sourceTree = ""; }; + 755CD7A61DAA16810075898E /* dsa-sha1-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-sha1-sign.c"; sourceTree = ""; }; + 755CD7A71DAA16810075898E /* dsa-sha1-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-sha1-verify.c"; sourceTree = ""; }; + 755CD7A81DAA16810075898E /* dsa-sha256-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-sha256-sign.c"; sourceTree = ""; }; + 755CD7A91DAA16810075898E /* dsa-sha256-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-sha256-verify.c"; sourceTree = ""; }; + 755CD7AA1DAA16810075898E /* dsa-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-sign.c"; sourceTree = ""; }; + 755CD7AB1DAA16810075898E /* dsa-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "dsa-verify.c"; sourceTree = ""; }; + 755CD7AC1DAA16810075898E /* dsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dsa.c; sourceTree = ""; }; + 755CD7AD1DAA16810075898E /* dsa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = ""; }; + 755CD7AE1DAA16810075898E /* dsa2sexp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dsa2sexp.c; sourceTree = ""; }; + 755CD7AF1DAA16810075898E /* eax-aes128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eax-aes128-meta.c"; sourceTree = ""; }; + 755CD7B01DAA16810075898E /* eax-aes128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eax-aes128.c"; sourceTree = ""; }; + 755CD7B11DAA16810075898E /* eax.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = eax.c; sourceTree = ""; }; + 755CD7B21DAA16810075898E /* eax.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = eax.h; sourceTree = ""; }; + 755CD7B31DAA16810075898E /* ecc-192.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-192.c"; sourceTree = ""; }; + 755CD7B41DAA16810075898E /* ecc-224.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-224.c"; sourceTree = ""; }; + 755CD7B51DAA16810075898E /* ecc-25519.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-25519.c"; sourceTree = ""; }; + 755CD7B61DAA16810075898E /* ecc-256-32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-256-32.h"; sourceTree = ""; }; + 755CD7B71DAA16810075898E /* ecc-256-64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-256-64.h"; sourceTree = ""; }; + 755CD7B81DAA16810075898E /* ecc-256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-256.c"; sourceTree = ""; }; + 755CD7B91DAA16810075898E /* ecc-256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-256.h"; sourceTree = ""; }; + 755CD7BA1DAA16810075898E /* ecc-384-32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-384-32.h"; sourceTree = ""; }; + 755CD7BB1DAA16810075898E /* ecc-384-64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-384-64.h"; sourceTree = ""; }; + 755CD7BC1DAA16810075898E /* ecc-384.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-384.c"; sourceTree = ""; }; + 755CD7BD1DAA16810075898E /* ecc-384.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-384.h"; sourceTree = ""; }; + 755CD7BE1DAA16810075898E /* ecc-521.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-521.c"; sourceTree = ""; }; + 755CD7BF1DAA16810075898E /* ecc-a-to-j.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-a-to-j.c"; sourceTree = ""; }; + 755CD7C01DAA16810075898E /* ecc-add-eh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-add-eh.c"; sourceTree = ""; }; + 755CD7C11DAA16810075898E /* ecc-add-ehh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-add-ehh.c"; sourceTree = ""; }; + 755CD7C21DAA16810075898E /* ecc-add-jja.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-add-jja.c"; sourceTree = ""; }; + 755CD7C31DAA16810075898E /* ecc-add-jjj.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-add-jjj.c"; sourceTree = ""; }; + 755CD7C41DAA16810075898E /* ecc-curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-curve.h"; sourceTree = ""; }; + 755CD7C51DAA16810075898E /* ecc-dup-eh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-dup-eh.c"; sourceTree = ""; }; + 755CD7C61DAA16810075898E /* ecc-dup-jj.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-dup-jj.c"; sourceTree = ""; }; + 755CD7C71DAA16810075898E /* ecc-ecdsa-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-ecdsa-sign.c"; sourceTree = ""; }; + 755CD7C81DAA16810075898E /* ecc-ecdsa-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-ecdsa-verify.c"; sourceTree = ""; }; + 755CD7C91DAA16810075898E /* ecc-eh-to-a.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-eh-to-a.c"; sourceTree = ""; }; + 755CD7CA1DAA16810075898E /* ecc-hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-hash.c"; sourceTree = ""; }; + 755CD7CB1DAA16810075898E /* ecc-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ecc-internal.h"; sourceTree = ""; }; + 755CD7CC1DAA16810075898E /* ecc-j-to-a.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-j-to-a.c"; sourceTree = ""; }; + 755CD7CD1DAA16810075898E /* ecc-mod-arith.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mod-arith.c"; sourceTree = ""; }; + 755CD7CE1DAA16810075898E /* ecc-mod-inv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mod-inv.c"; sourceTree = ""; }; + 755CD7CF1DAA16810075898E /* ecc-mod.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mod.c"; sourceTree = ""; }; + 755CD7D01DAA16810075898E /* ecc-mul-a-eh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mul-a-eh.c"; sourceTree = ""; }; + 755CD7D11DAA16810075898E /* ecc-mul-a.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mul-a.c"; sourceTree = ""; }; + 755CD7D21DAA16810075898E /* ecc-mul-g-eh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mul-g-eh.c"; sourceTree = ""; }; + 755CD7D31DAA16810075898E /* ecc-mul-g.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-mul-g.c"; sourceTree = ""; }; + 755CD7D41DAA16810075898E /* ecc-pm1-redc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-pm1-redc.c"; sourceTree = ""; }; + 755CD7D51DAA16810075898E /* ecc-point-mul-g.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-point-mul-g.c"; sourceTree = ""; }; + 755CD7D61DAA16810075898E /* ecc-point-mul.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-point-mul.c"; sourceTree = ""; }; + 755CD7D71DAA16810075898E /* ecc-point.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-point.c"; sourceTree = ""; }; + 755CD7D81DAA16810075898E /* ecc-pp1-redc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-pp1-redc.c"; sourceTree = ""; }; + 755CD7D91DAA16810075898E /* ecc-random.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-random.c"; sourceTree = ""; }; + 755CD7DA1DAA16810075898E /* ecc-scalar.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-scalar.c"; sourceTree = ""; }; + 755CD7DB1DAA16810075898E /* ecc-size.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecc-size.c"; sourceTree = ""; }; + 755CD7DC1DAA16810075898E /* ecc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ecc.h; sourceTree = ""; }; + 755CD7DD1DAA16810075898E /* eccdata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = eccdata.c; sourceTree = ""; }; + 755CD7DE1DAA16810075898E /* ecdsa-keygen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecdsa-keygen.c"; sourceTree = ""; }; + 755CD7DF1DAA16810075898E /* ecdsa-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecdsa-sign.c"; sourceTree = ""; }; + 755CD7E01DAA16810075898E /* ecdsa-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ecdsa-verify.c"; sourceTree = ""; }; + 755CD7E21DAA16810075898E /* ed25519-sha512-pubkey.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ed25519-sha512-pubkey.c"; sourceTree = ""; }; + 755CD7E31DAA16810075898E /* ed25519-sha512-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ed25519-sha512-sign.c"; sourceTree = ""; }; + 755CD7E41DAA16810075898E /* ed25519-sha512-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ed25519-sha512-verify.c"; sourceTree = ""; }; + 755CD7E51DAA16810075898E /* eddsa-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-compress.c"; sourceTree = ""; }; + 755CD7E61DAA16810075898E /* eddsa-decompress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-decompress.c"; sourceTree = ""; }; + 755CD7E71DAA16810075898E /* eddsa-expand.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-expand.c"; sourceTree = ""; }; + 755CD7E81DAA16810075898E /* eddsa-hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-hash.c"; sourceTree = ""; }; + 755CD7E91DAA16810075898E /* eddsa-pubkey.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-pubkey.c"; sourceTree = ""; }; + 755CD7EA1DAA16810075898E /* eddsa-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-sign.c"; sourceTree = ""; }; + 755CD7EB1DAA16810075898E /* eddsa-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "eddsa-verify.c"; sourceTree = ""; }; + 755CD7EC1DAA16810075898E /* eddsa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = eddsa.h; sourceTree = ""; }; + 755CD80B1DAA16810075898E /* fat-arm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "fat-arm.c"; sourceTree = ""; }; + 755CD80C1DAA16810075898E /* fat-setup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "fat-setup.h"; sourceTree = ""; }; + 755CD80D1DAA16810075898E /* fat-x86_64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "fat-x86_64.c"; sourceTree = ""; }; + 755CD80E1DAA16810075898E /* gcm-aes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes.c"; sourceTree = ""; }; + 755CD80F1DAA16810075898E /* gcm-aes128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes128-meta.c"; sourceTree = ""; }; + 755CD8101DAA16810075898E /* gcm-aes128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes128.c"; sourceTree = ""; }; + 755CD8111DAA16810075898E /* gcm-aes192-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes192-meta.c"; sourceTree = ""; }; + 755CD8121DAA16810075898E /* gcm-aes192.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes192.c"; sourceTree = ""; }; + 755CD8131DAA16810075898E /* gcm-aes256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes256-meta.c"; sourceTree = ""; }; + 755CD8141DAA16810075898E /* gcm-aes256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-aes256.c"; sourceTree = ""; }; + 755CD8151DAA16810075898E /* gcm-camellia128-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-camellia128-meta.c"; sourceTree = ""; }; + 755CD8161DAA16810075898E /* gcm-camellia128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-camellia128.c"; sourceTree = ""; }; + 755CD8171DAA16810075898E /* gcm-camellia256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-camellia256-meta.c"; sourceTree = ""; }; + 755CD8181DAA16810075898E /* gcm-camellia256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gcm-camellia256.c"; sourceTree = ""; }; + 755CD8191DAA16810075898E /* gcm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gcm.c; sourceTree = ""; }; + 755CD81A1DAA16810075898E /* gcm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gcm.h; sourceTree = ""; }; + 755CD81B1DAA16810075898E /* gcmdata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gcmdata.c; sourceTree = ""; }; + 755CD81C1DAA16810075898E /* getopt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = ""; }; + 755CD81D1DAA16810075898E /* getopt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; + 755CD81E1DAA16810075898E /* getopt1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getopt1.c; sourceTree = ""; }; + 755CD81F1DAA16810075898E /* getopt_int.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = getopt_int.h; sourceTree = ""; }; + 755CD8201DAA16810075898E /* gmp-glue.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gmp-glue.c"; sourceTree = ""; }; + 755CD8211DAA16810075898E /* gmp-glue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gmp-glue.h"; sourceTree = ""; }; + 755CD8221DAA16810075898E /* gosthash94-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "gosthash94-meta.c"; sourceTree = ""; }; + 755CD8231DAA16810075898E /* gosthash94.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gosthash94.c; sourceTree = ""; }; + 755CD8241DAA16810075898E /* gosthash94.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gosthash94.h; sourceTree = ""; }; + 755CD8251DAA16810075898E /* hmac-md5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-md5.c"; sourceTree = ""; }; + 755CD8261DAA16810075898E /* hmac-ripemd160.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-ripemd160.c"; sourceTree = ""; }; + 755CD8271DAA16810075898E /* hmac-sha1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-sha1.c"; sourceTree = ""; }; + 755CD8281DAA16810075898E /* hmac-sha224.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-sha224.c"; sourceTree = ""; }; + 755CD8291DAA16810075898E /* hmac-sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-sha256.c"; sourceTree = ""; }; + 755CD82A1DAA16810075898E /* hmac-sha384.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-sha384.c"; sourceTree = ""; }; + 755CD82B1DAA16810075898E /* hmac-sha512.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "hmac-sha512.c"; sourceTree = ""; }; + 755CD82C1DAA16810075898E /* hmac.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hmac.c; sourceTree = ""; }; + 755CD82D1DAA16810075898E /* hmac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = ""; }; + 755CD8321DAA16820075898E /* knuth-lfib.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "knuth-lfib.c"; sourceTree = ""; }; + 755CD8331DAA16820075898E /* knuth-lfib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "knuth-lfib.h"; sourceTree = ""; }; + 755CD8371DAA16820075898E /* macros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = macros.h; sourceTree = ""; }; + 755CD8391DAA16820075898E /* md2-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "md2-meta.c"; sourceTree = ""; }; + 755CD83A1DAA16820075898E /* md2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = md2.c; sourceTree = ""; }; + 755CD83B1DAA16820075898E /* md2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = md2.h; sourceTree = ""; }; + 755CD83C1DAA16820075898E /* md4-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "md4-meta.c"; sourceTree = ""; }; + 755CD83D1DAA16820075898E /* md4.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = md4.c; sourceTree = ""; }; + 755CD83E1DAA16820075898E /* md4.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = ""; }; + 755CD83F1DAA16820075898E /* md5-compat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "md5-compat.c"; sourceTree = ""; }; + 755CD8401DAA16820075898E /* md5-compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "md5-compat.h"; sourceTree = ""; }; + 755CD8411DAA16820075898E /* md5-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "md5-compress.c"; sourceTree = ""; }; + 755CD8421DAA16820075898E /* md5-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "md5-meta.c"; sourceTree = ""; }; + 755CD8431DAA16820075898E /* md5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + 755CD8441DAA16820075898E /* md5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + 755CD8451DAA16820075898E /* memeql-sec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "memeql-sec.c"; sourceTree = ""; }; + 755CD8461DAA16820075898E /* memops.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memops.h; sourceTree = ""; }; + 755CD8471DAA16820075898E /* memxor-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "memxor-internal.h"; sourceTree = ""; }; + 755CD8481DAA16820075898E /* memxor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = memxor.c; sourceTree = ""; }; + 755CD8491DAA16820075898E /* memxor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memxor.h; sourceTree = ""; }; + 755CD84A1DAA16820075898E /* memxor3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = memxor3.c; sourceTree = ""; }; + 755CD84B1DAA16820075898E /* mini-gmp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "mini-gmp.c"; sourceTree = ""; }; + 755CD84C1DAA16820075898E /* mini-gmp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "mini-gmp.h"; sourceTree = ""; }; + 755CD8731DAA16820075898E /* nettle-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-internal.c"; sourceTree = ""; }; + 755CD8741DAA16820075898E /* nettle-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "nettle-internal.h"; sourceTree = ""; }; + 755CD8751DAA16820075898E /* nettle-meta-aeads.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-meta-aeads.c"; sourceTree = ""; }; + 755CD8761DAA16820075898E /* nettle-meta-armors.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-meta-armors.c"; sourceTree = ""; }; + 755CD8771DAA16820075898E /* nettle-meta-ciphers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-meta-ciphers.c"; sourceTree = ""; }; + 755CD8781DAA16820075898E /* nettle-meta-hashes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-meta-hashes.c"; sourceTree = ""; }; + 755CD8791DAA16820075898E /* nettle-meta.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "nettle-meta.h"; sourceTree = ""; }; + 755CD87A1DAA16820075898E /* nettle-stdint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "nettle-stdint.h"; sourceTree = ""; }; + 755CD87B1DAA16820075898E /* nettle-types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "nettle-types.h"; sourceTree = ""; }; + 755CD87C1DAA16820075898E /* nettle-write.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "nettle-write.h"; sourceTree = ""; }; + 755CD8801DAA16820075898E /* pbkdf2-hmac-sha1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pbkdf2-hmac-sha1.c"; sourceTree = ""; }; + 755CD8811DAA16820075898E /* pbkdf2-hmac-sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pbkdf2-hmac-sha256.c"; sourceTree = ""; }; + 755CD8821DAA16820075898E /* pbkdf2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pbkdf2.c; sourceTree = ""; }; + 755CD8831DAA16820075898E /* pbkdf2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pbkdf2.h; sourceTree = ""; }; + 755CD8841DAA16820075898E /* pgp-encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pgp-encode.c"; sourceTree = ""; }; + 755CD8851DAA16820075898E /* pgp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pgp.h; sourceTree = ""; }; + 755CD8861DAA16820075898E /* pkcs1-decrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-decrypt.c"; sourceTree = ""; }; + 755CD8871DAA16820075898E /* pkcs1-encrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-encrypt.c"; sourceTree = ""; }; + 755CD8881DAA16820075898E /* pkcs1-rsa-digest.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-rsa-digest.c"; sourceTree = ""; }; + 755CD8891DAA16820075898E /* pkcs1-rsa-md5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-rsa-md5.c"; sourceTree = ""; }; + 755CD88A1DAA16820075898E /* pkcs1-rsa-sha1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-rsa-sha1.c"; sourceTree = ""; }; + 755CD88B1DAA16820075898E /* pkcs1-rsa-sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-rsa-sha256.c"; sourceTree = ""; }; + 755CD88C1DAA16820075898E /* pkcs1-rsa-sha512.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-rsa-sha512.c"; sourceTree = ""; }; + 755CD88D1DAA16820075898E /* pkcs1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pkcs1.c; sourceTree = ""; }; + 755CD88E1DAA16820075898E /* pkcs1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pkcs1.h; sourceTree = ""; }; + 755CD88F1DAA16820075898E /* poly1305-aes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "poly1305-aes.c"; sourceTree = ""; }; + 755CD8901DAA16820075898E /* poly1305-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "poly1305-internal.c"; sourceTree = ""; }; + 755CD8911DAA16820075898E /* poly1305.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = poly1305.h; sourceTree = ""; }; + 755CD8931DAA16820075898E /* realloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = realloc.c; sourceTree = ""; }; + 755CD8941DAA16820075898E /* realloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = realloc.h; sourceTree = ""; }; + 755CD8951DAA16820075898E /* ripemd160-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ripemd160-compress.c"; sourceTree = ""; }; + 755CD8961DAA16820075898E /* ripemd160-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "ripemd160-meta.c"; sourceTree = ""; }; + 755CD8971DAA16820075898E /* ripemd160.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ripemd160.c; sourceTree = ""; }; + 755CD8981DAA16820075898E /* ripemd160.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ripemd160.h; sourceTree = ""; }; + 755CD8991DAA16820075898E /* rsa-blind.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-blind.c"; sourceTree = ""; }; + 755CD89A1DAA16820075898E /* rsa-decrypt-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-decrypt-tr.c"; sourceTree = ""; }; + 755CD89B1DAA16820075898E /* rsa-decrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-decrypt.c"; sourceTree = ""; }; + 755CD89C1DAA16820075898E /* rsa-encrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-encrypt.c"; sourceTree = ""; }; + 755CD89D1DAA16820075898E /* rsa-keygen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-keygen.c"; sourceTree = ""; }; + 755CD89E1DAA16820075898E /* rsa-md5-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-md5-sign-tr.c"; sourceTree = ""; }; + 755CD89F1DAA16820075898E /* rsa-md5-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-md5-sign.c"; sourceTree = ""; }; + 755CD8A01DAA16820075898E /* rsa-md5-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-md5-verify.c"; sourceTree = ""; }; + 755CD8A11DAA16820075898E /* rsa-pkcs1-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-pkcs1-sign-tr.c"; sourceTree = ""; }; + 755CD8A21DAA16820075898E /* rsa-pkcs1-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-pkcs1-sign.c"; sourceTree = ""; }; + 755CD8A31DAA16820075898E /* rsa-pkcs1-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-pkcs1-verify.c"; sourceTree = ""; }; + 755CD8A41DAA16820075898E /* rsa-sha1-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha1-sign-tr.c"; sourceTree = ""; }; + 755CD8A51DAA16820075898E /* rsa-sha1-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha1-sign.c"; sourceTree = ""; }; + 755CD8A61DAA16820075898E /* rsa-sha1-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha1-verify.c"; sourceTree = ""; }; + 755CD8A71DAA16820075898E /* rsa-sha256-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha256-sign-tr.c"; sourceTree = ""; }; + 755CD8A81DAA16820075898E /* rsa-sha256-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha256-sign.c"; sourceTree = ""; }; + 755CD8A91DAA16820075898E /* rsa-sha256-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha256-verify.c"; sourceTree = ""; }; + 755CD8AA1DAA16820075898E /* rsa-sha512-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha512-sign-tr.c"; sourceTree = ""; }; + 755CD8AB1DAA16820075898E /* rsa-sha512-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha512-sign.c"; sourceTree = ""; }; + 755CD8AC1DAA16820075898E /* rsa-sha512-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sha512-verify.c"; sourceTree = ""; }; + 755CD8AD1DAA16820075898E /* rsa-sign-tr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sign-tr.c"; sourceTree = ""; }; + 755CD8AE1DAA16820075898E /* rsa-sign.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-sign.c"; sourceTree = ""; }; + 755CD8AF1DAA16820075898E /* rsa-verify.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "rsa-verify.c"; sourceTree = ""; }; + 755CD8B01DAA16820075898E /* rsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rsa.c; sourceTree = ""; }; + 755CD8B11DAA16820075898E /* rsa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = ""; }; + 755CD8B21DAA16820075898E /* rsa2openpgp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rsa2openpgp.c; sourceTree = ""; }; + 755CD8B31DAA16820075898E /* rsa2sexp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rsa2sexp.c; sourceTree = ""; }; + 755CD8B51DAA16820075898E /* salsa20-128-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-128-set-key.c"; sourceTree = ""; }; + 755CD8B61DAA16820075898E /* salsa20-256-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-256-set-key.c"; sourceTree = ""; }; + 755CD8B71DAA16820075898E /* salsa20-core-internal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-core-internal.c"; sourceTree = ""; }; + 755CD8B81DAA16820075898E /* salsa20-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-crypt.c"; sourceTree = ""; }; + 755CD8B91DAA16820075898E /* salsa20-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-set-key.c"; sourceTree = ""; }; + 755CD8BA1DAA16820075898E /* salsa20-set-nonce.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20-set-nonce.c"; sourceTree = ""; }; + 755CD8BB1DAA16820075898E /* salsa20.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = salsa20.h; sourceTree = ""; }; + 755CD8BC1DAA16820075898E /* salsa20r12-crypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "salsa20r12-crypt.c"; sourceTree = ""; }; + 755CD8BD1DAA16820075898E /* sec-add-1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sec-add-1.c"; sourceTree = ""; }; + 755CD8BE1DAA16820075898E /* sec-sub-1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sec-sub-1.c"; sourceTree = ""; }; + 755CD8BF1DAA16820075898E /* sec-tabselect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sec-tabselect.c"; sourceTree = ""; }; + 755CD8C01DAA16820075898E /* serpent-decrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "serpent-decrypt.c"; sourceTree = ""; }; + 755CD8C11DAA16820075898E /* serpent-encrypt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "serpent-encrypt.c"; sourceTree = ""; }; + 755CD8C21DAA16820075898E /* serpent-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "serpent-internal.h"; sourceTree = ""; }; + 755CD8C31DAA16820075898E /* serpent-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "serpent-meta.c"; sourceTree = ""; }; + 755CD8C41DAA16820075898E /* serpent-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "serpent-set-key.c"; sourceTree = ""; }; + 755CD8C51DAA16820075898E /* serpent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = serpent.h; sourceTree = ""; }; + 755CD8C61DAA16820075898E /* sexp-format.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sexp-format.c"; sourceTree = ""; }; + 755CD8C71DAA16820075898E /* sexp-transport-format.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sexp-transport-format.c"; sourceTree = ""; }; + 755CD8C81DAA16820075898E /* sexp-transport.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sexp-transport.c"; sourceTree = ""; }; + 755CD8C91DAA16820075898E /* sexp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sexp.c; sourceTree = ""; }; + 755CD8CA1DAA16820075898E /* sexp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sexp.h; sourceTree = ""; }; + 755CD8CB1DAA16820075898E /* sexp2bignum.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sexp2bignum.c; sourceTree = ""; }; + 755CD8CC1DAA16820075898E /* sexp2dsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sexp2dsa.c; sourceTree = ""; }; + 755CD8CD1DAA16820075898E /* sexp2rsa.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sexp2rsa.c; sourceTree = ""; }; + 755CD8CE1DAA16820075898E /* sha-example.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha-example.c"; sourceTree = ""; }; + 755CD8CF1DAA16820075898E /* sha.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = ""; }; + 755CD8D01DAA16820075898E /* sha1-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha1-compress.c"; sourceTree = ""; }; + 755CD8D11DAA16820075898E /* sha1-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha1-meta.c"; sourceTree = ""; }; + 755CD8D21DAA16820075898E /* sha1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha1.c; sourceTree = ""; }; + 755CD8D31DAA16820075898E /* sha1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha1.h; sourceTree = ""; }; + 755CD8D41DAA16820075898E /* sha2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha2.h; sourceTree = ""; }; + 755CD8D51DAA16820075898E /* sha224-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha224-meta.c"; sourceTree = ""; }; + 755CD8D61DAA16820075898E /* sha256-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha256-compress.c"; sourceTree = ""; }; + 755CD8D71DAA16820075898E /* sha256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha256-meta.c"; sourceTree = ""; }; + 755CD8D81DAA16820075898E /* sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = ""; }; + 755CD8D91DAA16820075898E /* sha3-224-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-224-meta.c"; sourceTree = ""; }; + 755CD8DA1DAA16820075898E /* sha3-224.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-224.c"; sourceTree = ""; }; + 755CD8DB1DAA16820075898E /* sha3-256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-256-meta.c"; sourceTree = ""; }; + 755CD8DC1DAA16820075898E /* sha3-256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-256.c"; sourceTree = ""; }; + 755CD8DD1DAA16820075898E /* sha3-384-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-384-meta.c"; sourceTree = ""; }; + 755CD8DE1DAA16820075898E /* sha3-384.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-384.c"; sourceTree = ""; }; + 755CD8DF1DAA16820075898E /* sha3-512-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-512-meta.c"; sourceTree = ""; }; + 755CD8E01DAA16820075898E /* sha3-512.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-512.c"; sourceTree = ""; }; + 755CD8E11DAA16820075898E /* sha3-permute.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha3-permute.c"; sourceTree = ""; }; + 755CD8E21DAA16820075898E /* sha3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha3.c; sourceTree = ""; }; + 755CD8E31DAA16820075898E /* sha3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha3.h; sourceTree = ""; }; + 755CD8E41DAA16820075898E /* sha384-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha384-meta.c"; sourceTree = ""; }; + 755CD8E51DAA16820075898E /* sha512-224-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha512-224-meta.c"; sourceTree = ""; }; + 755CD8E61DAA16820075898E /* sha512-256-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha512-256-meta.c"; sourceTree = ""; }; + 755CD8E71DAA16820075898E /* sha512-compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha512-compress.c"; sourceTree = ""; }; + 755CD8E81DAA16820075898E /* sha512-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sha512-meta.c"; sourceTree = ""; }; + 755CD8E91DAA16820075898E /* sha512.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha512.c; sourceTree = ""; }; + 755CD8EA1DAA16820075898E /* shadata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = shadata.c; sourceTree = ""; }; + 755CD9631DAA16830075898E /* input.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = input.c; sourceTree = ""; }; + 755CD9641DAA16830075898E /* input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = input.h; sourceTree = ""; }; + 755CD9661DAA16830075898E /* misc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = misc.c; sourceTree = ""; }; + 755CD9671DAA16830075898E /* misc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = misc.h; sourceTree = ""; }; + 755CD9681DAA16830075898E /* nettle-hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-hash.c"; sourceTree = ""; }; + 755CD9691DAA16830075898E /* nettle-lfib-stream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-lfib-stream.c"; sourceTree = ""; }; + 755CD96A1DAA16830075898E /* nettle-pbkdf2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "nettle-pbkdf2.c"; sourceTree = ""; }; + 755CD96B1DAA16830075898E /* output.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = output.c; sourceTree = ""; }; + 755CD96C1DAA16830075898E /* output.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = output.h; sourceTree = ""; }; + 755CD96D1DAA16830075898E /* parse.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = ""; }; + 755CD96E1DAA16830075898E /* parse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = ""; }; + 755CD96F1DAA16830075898E /* pkcs1-conv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "pkcs1-conv.c"; sourceTree = ""; }; + 755CD9701DAA16830075898E /* sexp-conv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "sexp-conv.c"; sourceTree = ""; }; + 755CD9711DAA16830075898E /* twofish-meta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "twofish-meta.c"; sourceTree = ""; }; + 755CD9721DAA16830075898E /* twofish.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = twofish.c; sourceTree = ""; }; + 755CD9731DAA16830075898E /* twofish.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = twofish.h; sourceTree = ""; }; + 755CD9741DAA16830075898E /* twofishdata.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = twofishdata.c; sourceTree = ""; }; + 755CD9751DAA16830075898E /* umac-l2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-l2.c"; sourceTree = ""; }; + 755CD9761DAA16830075898E /* umac-l3.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-l3.c"; sourceTree = ""; }; + 755CD9771DAA16830075898E /* umac-nh-n.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-nh-n.c"; sourceTree = ""; }; + 755CD9781DAA16830075898E /* umac-nh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-nh.c"; sourceTree = ""; }; + 755CD9791DAA16830075898E /* umac-poly128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-poly128.c"; sourceTree = ""; }; + 755CD97A1DAA16830075898E /* umac-poly64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-poly64.c"; sourceTree = ""; }; + 755CD97B1DAA16830075898E /* umac-set-key.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "umac-set-key.c"; sourceTree = ""; }; + 755CD97C1DAA16830075898E /* umac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = umac.h; sourceTree = ""; }; + 755CD97D1DAA16830075898E /* umac128.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = umac128.c; sourceTree = ""; }; + 755CD97E1DAA16830075898E /* umac32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = umac32.c; sourceTree = ""; }; + 755CD97F1DAA16830075898E /* umac64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = umac64.c; sourceTree = ""; }; + 755CD9801DAA16830075898E /* umac96.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = umac96.c; sourceTree = ""; }; + 755CD9811DAA16830075898E /* version.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; + 755CD9821DAA16830075898E /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 755CD9841DAA16830075898E /* write-be32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "write-be32.c"; sourceTree = ""; }; + 755CD9851DAA16830075898E /* write-le32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "write-le32.c"; sourceTree = ""; }; + 755CD9861DAA16830075898E /* write-le64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "write-le64.c"; sourceTree = ""; }; + 755CD9BD1DAA16830075898E /* yarrow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = yarrow.h; sourceTree = ""; }; + 755CD9BE1DAA16830075898E /* yarrow256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = yarrow256.c; sourceTree = ""; }; + 755CD9BF1DAA16830075898E /* yarrow_key_event.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = yarrow_key_event.c; sourceTree = ""; }; + 755CD9C41DAA18420075898E /* libunbound.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libunbound.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 755CD9D11DAA197C0075898E /* libBRCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBRCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 759DA09F1DAB838D008CC49B /* view.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = view.c; sourceTree = ""; }; + 759DA0A01DAB838D008CC49B /* view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = view.h; sourceTree = ""; }; + 75A2A7901DA5934300A983D8 /* Litewallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Litewallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 75A2A7931DA5934300A983D8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 75A2A79A1DA5934300A983D8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 75A2A79D1DA5934300A983D8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 75A2A79F1DA5934300A983D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 75A2A7F21DA5935F00A983D8 /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; }; + 75A2A8081DA5936F00A983D8 /* TodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TodayExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 75A2A8091DA5936F00A983D8 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; + 75A2A80F1DA5936F00A983D8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 75A2A8111DA5936F00A983D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 75A2A82B1DA59B2A00A983D8 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A8301DA59B2F00A983D8 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A8351DA59B3600A983D8 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; + 75A2A83A1DA59B3C00A983D8 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A83F1DA59B4500A983D8 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A84E1DA59B5700A983D8 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A8671DA59BFB00A983D8 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainInterface.strings; sourceTree = ""; }; + 75A2A87C1DA59E4E00A983D8 /* litewallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = litewallet.entitlements; sourceTree = ""; }; + 75C735AF1DAA1C9F00251ECF /* libnettle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libnettle.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 75FEFD1B1DAED56E00203D3A /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + C30029E125D0185500F08C2B /* StandardDividerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StandardDividerView.swift; sourceTree = ""; }; + C30029EA25D019BC00F08C2B /* CopyButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyButtonView.swift; sourceTree = ""; }; + C3019EE22B8FEFED00FAF648 /* AssociatedObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssociatedObject.swift; sourceTree = ""; }; + C316CF48261887FC00E4C09B /* UIApplication+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Extension.swift"; sourceTree = ""; }; + C3188E2526431E750008ADD1 /* Debug-GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Debug-GoogleService-Info.plist"; sourceTree = ""; }; + C31891C226733FD400ECE25C /* TabBarViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarViewControllerTests.swift; sourceTree = ""; }; + C31C27662BA327640047F855 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + C32142E925C97CD900BECCD0 /* TransactionCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionCellView.swift; sourceTree = ""; }; + C32142F925C988C800BECCD0 /* TransactionCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionCellViewModel.swift; sourceTree = ""; }; + C32DAE0625925B7E003FC978 /* Color+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Extension.swift"; sourceTree = ""; }; + C32DB42E26488CAA00017D26 /* TabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarViewController.swift; sourceTree = ""; }; + C33685082BECE8B10069CBC7 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + C339752027001BEC0071FED6 /* EmailValidation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailValidation.swift; sourceTree = ""; }; + C3423C192B79039D0051BD6D /* LaunchCardHostingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchCardHostingController.swift; sourceTree = ""; }; + C3423C1B2B7903CA0051BD6D /* LaunchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchView.swift; sourceTree = ""; }; + C3423C1D2B7904070051BD6D /* StartHostingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartHostingController.swift; sourceTree = ""; }; + C3423C1F2B79046A0051BD6D /* StartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartView.swift; sourceTree = ""; }; + C3423C212B79047D0051BD6D /* StartViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartViewModel.swift; sourceTree = ""; }; + C3423C232B7904B80051BD6D /* SeedWordView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeedWordView.swift; sourceTree = ""; }; + C3423C252B7904E30051BD6D /* AnnounceUpdatesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnnounceUpdatesView.swift; sourceTree = ""; }; + C3423C272B7905330051BD6D /* SafariServices+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "SafariServices+Extension.swift"; path = "Extensions/SafariServices+Extension.swift"; sourceTree = ""; }; + C3423C282B7905330051BD6D /* SignupWebViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignupWebViewModel.swift; sourceTree = ""; }; + C3423C292B7905330051BD6D /* SignupWebView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignupWebView.swift; sourceTree = ""; }; + C3423C302B796D820051BD6D /* ę—„ęœ¬čŖž.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "ę—„ęœ¬čŖž.mp3"; sourceTree = ""; }; + C3423C312B796D820051BD6D /* Pt.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Pt.mp3; sourceTree = ""; }; + C3423C322B796D820051BD6D /* De.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = De.mp3; sourceTree = ""; }; + C3423C332B796D820051BD6D /* En.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = En.mp3; sourceTree = ""; }; + C3423C342B796D820051BD6D /* coinflip.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; path = coinflip.aiff; sourceTree = ""; }; + C3423C352B796D820051BD6D /* Uk.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Uk.mp3; sourceTree = ""; }; + C3423C362B796D820051BD6D /* Fr.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Fr.mp3; sourceTree = ""; }; + C3423C372B796D820051BD6D /* äø­åœ‹äŗŗ.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "äø­åœ‹äŗŗ.mp3"; sourceTree = ""; }; + C3423C382B796D820051BD6D /* Id.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Id.mp3; sourceTree = ""; }; + C3423C392B796D820051BD6D /* Tr.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Tr.mp3; sourceTree = ""; }; + C3423C3A2B796D820051BD6D /* Es.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Es.mp3; sourceTree = ""; }; + C3423C3B2B796D820051BD6D /* Ko.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Ko.mp3; sourceTree = ""; }; + C3423C3C2B796D820051BD6D /* It.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = It.mp3; sourceTree = ""; }; + C3423C3D2B796D820051BD6D /* Ru.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Ru.mp3; sourceTree = ""; }; + C350788727DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/LaunchScreen.strings; sourceTree = ""; }; + C350788827DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MainInterface.strings; sourceTree = ""; }; + C350788927DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; + C350788A27DCAAA100A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = uk; path = uk.lproj/BIP39Words.plist; sourceTree = ""; }; + C350788B27DCB10700A50819 /* TextView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TextView+Extension.swift"; sourceTree = ""; }; + C3543A26264AFE490005D17A /* LocaleChangeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocaleChangeView.swift; sourceTree = ""; }; + C3543A28264AFE720005D17A /* LocaleChangeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocaleChangeViewModel.swift; sourceTree = ""; }; + C35ABD222574070A002BB9BB /* PartnersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnersView.swift; sourceTree = ""; }; + C35ABD322574073F002BB9BB /* PartnersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartnersViewModel.swift; sourceTree = ""; }; + C361F48128B368BC00E9798F /* AddressFieldView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressFieldView.swift; sourceTree = ""; }; + C36375A228BD38A500CFB3D8 /* SendButtonHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendButtonHostingController.swift; sourceTree = ""; }; + C36375A428BD390C00CFB3D8 /* SendButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendButtonView.swift; sourceTree = ""; }; + C36DBF5E28F18D2C00FBCB24 /* LocalWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalWebView.swift; sourceTree = ""; }; + C36DBF6028F1988900FBCB24 /* LocalWebViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalWebViewModel.swift; sourceTree = ""; }; + C39443F8269DDAD3002703E9 /* LitewalletIconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LitewalletIconView.swift; sourceTree = ""; }; + C39A71462608CB4300E7B640 /* EmptyTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyTableViewCell.swift; sourceTree = ""; }; + C3ACF2DE25DED601008671D4 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; + C3B419CA2BFCF14100EBD935 /* BuyHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyHostingController.swift; sourceTree = ""; }; + C3B419CC2BFCF17600EBD935 /* BuyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyView.swift; sourceTree = ""; }; + C3B7C3B8255EABBF00E98A64 /* SupportSafariViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportSafariViewModel.swift; sourceTree = ""; }; + C3B7C3ED255FF59200E98A64 /* ConstantsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantsTests.swift; sourceTree = ""; }; + C3BD4A5225975C6000D97079 /* View+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Extension.swift"; sourceTree = ""; }; + C3BDB42626CC028F004DAE77 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = tr; path = tr.lproj/BIP39Words.plist; sourceTree = ""; }; + C3BDB42726CC028F004DAE77 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MainInterface.strings; sourceTree = ""; }; + C3BDB42826CC0338004DAE77 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; + C3C8973725CD6B9300241FBE /* HostingTransactionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostingTransactionCell.swift; sourceTree = ""; }; + C3D4379E2566EA3E00F423E1 /* LWActivityIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LWActivityIndicator.swift; sourceTree = ""; }; + C3DBBE302BFE15AF00B95939 /* BuyTileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyTileView.swift; sourceTree = ""; }; + C3E5A9042BFDEEF1002FBE04 /* BuyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyViewModel.swift; sourceTree = ""; }; + C3E751C12AF689BA005571CA /* BRKeyExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRKeyExtension.swift; sourceTree = ""; }; + C3E751C32AF68A50005571CA /* BRAddressExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRAddressExtension.swift; sourceTree = ""; }; + C3E751C52AF68A8E005571CA /* BRTxInputExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRTxInputExtension.swift; sourceTree = ""; }; + C3E751C72AF68AEB005571CA /* UnsafeMutablePointerExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsafeMutablePointerExtension.swift; sourceTree = ""; }; + C3E751CA2AF68B47005571CA /* BRPeerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPeerManager.swift; sourceTree = ""; }; + C3E751CC2AF68B93005571CA /* BRWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRWallet.swift; sourceTree = ""; }; + C3E751CE2AF68C18005571CA /* BRCalculationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRCalculationExtension.swift; sourceTree = ""; }; + C3E751D02AF68C84005571CA /* BRMasterKeyExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRMasterKeyExtension.swift; sourceTree = ""; }; + C3E751D22AF68CD1005571CA /* BRTxOutputExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRTxOutputExtension.swift; sourceTree = ""; }; + C3EFA9A02650807B005C59B5 /* LockScreenHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenHeaderView.swift; sourceTree = ""; }; + C3EFA9A2265080FF005C59B5 /* LockScreenHeaderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenHeaderViewModel.swift; sourceTree = ""; }; + C3EFA9A52651A808005C59B5 /* LockScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenTests.swift; sourceTree = ""; }; + C3F7BD0225FEC77100694C28 /* TransactionModalView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionModalView.swift; sourceTree = ""; }; + C3F8F13B2C049A4A006C3211 /* LocaleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocaleTests.swift; sourceTree = ""; }; + C3F8F13D2C04C3A7006C3211 /* MoonpayHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoonpayHelper.swift; sourceTree = ""; }; + C3F8F1412C04DEA2006C3211 /* NoBuyTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoBuyTabBarViewController.swift; sourceTree = ""; }; + C3F8F1432C04F6BE006C3211 /* Dakar, Senegal.gpx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Dakar, Senegal.gpx"; sourceTree = ""; }; + C3F8F1452C05269A006C3211 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + C3FF4D5E28AC5A5800713139 /* SendAddressCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendAddressCellView.swift; sourceTree = ""; }; + C3FF4D6028AC5AC100713139 /* SendAddressCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendAddressCellViewModel.swift; sourceTree = ""; }; + C7FD407E2C48FAF60010C0E6 /* partner-keys.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "partner-keys.plist"; sourceTree = ""; }; + CE03EC731EF256AC0038E3A8 /* SimpleUTXO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SimpleUTXO.swift; path = Models/SimpleUTXO.swift; sourceTree = ""; }; + CE0CD1581DBFBCF5004023DA /* ModalPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ModalPresenter.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CE0FC0F81F72417200E7C626 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + CE124CF71E67A8E500DFA146 /* TransactionDirection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TransactionDirection.swift; path = ViewModels/TransactionDirection.swift; sourceTree = ""; }; + CE124CFB1E68932C00DFA146 /* FeeManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeeManager.swift; sourceTree = ""; }; + CE124CFD1E68F57700DFA146 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Extensions/Async.swift; sourceTree = ""; }; + CE124CFF1E69170900DFA146 /* SyncingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SyncingView.swift; path = Views/SyncingView.swift; sourceTree = ""; }; + CE1280F51EEA855C00D27649 /* Date+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Date+Additions.swift"; path = "Extensions/Date+Additions.swift"; sourceTree = ""; }; + CE1D84B51EAEB2F4002A5D7B /* UIBarButtonItem+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+Additions.swift"; path = "Extensions/UIBarButtonItem+Additions.swift"; sourceTree = ""; }; + CE1E5F251EF083A600BD0F72 /* StartImportViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StartImportViewController.swift; path = ViewControllers/Import/StartImportViewController.swift; sourceTree = ""; }; + CE20C8F11DBAF71500C8397A /* ApplicationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplicationController.swift; sourceTree = ""; }; + CE20C8F51DBAF77D00C8397A /* UIViewController+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+BRWAdditions.swift"; path = "Extensions/UIViewController+BRWAdditions.swift"; sourceTree = ""; }; + CE20C8FB1DBB0F3A00C8397A /* UIColor+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIColor+Extension.swift"; path = "Extensions/UIColor+Extension.swift"; sourceTree = ""; }; + CE20C8FD1DBB133A00C8397A /* SimpleRedux.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleRedux.swift; sourceTree = ""; }; + CE20C9001DBBFFF800C8397A /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Actions.swift; path = SimpleRedux/Actions.swift; sourceTree = ""; }; + CE20C9061DBC587200C8397A /* StartViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StartViewController.swift; path = ViewControllers/StartViewController.swift; sourceTree = ""; }; + CE20C90B1DBC59E600C8397A /* StartFlowPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartFlowPresenter.swift; sourceTree = ""; }; + CE20C90D1DBE52B000C8397A /* UIView+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+BRWAdditions.swift"; path = "Extensions/UIView+BRWAdditions.swift"; sourceTree = ""; }; + CE20C9101DBE5B6F00C8397A /* Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Circle.swift; path = Views/Circle.swift; sourceTree = ""; }; + CE20C9161DBE6F2A00C8397A /* UIButton+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIButton+BRWAdditions.swift"; path = "Extensions/UIButton+BRWAdditions.swift"; sourceTree = ""; }; + CE20C9181DBE7B8200C8397A /* ReduxState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReduxState.swift; path = SimpleRedux/ReduxState.swift; sourceTree = ""; }; + CE25BF8C1DF3B8A500BC67B6 /* InViewAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InViewAlert.swift; path = Views/InViewAlert.swift; sourceTree = ""; }; + CE25BF901DF9ADE700BC67B6 /* UIImage+Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIImage+Utils.swift"; path = "Extensions/UIImage+Utils.swift"; sourceTree = ""; }; + CE25BF921DFDA7A500BC67B6 /* MessageUIPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageUIPresenter.swift; sourceTree = ""; }; + CE27074B1F016B6B00431BBC /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + CE27074C1F016B6D00431BBC /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + CE27074E1F016D2400431BBC /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; + CE27F9581E2C8EA300F7F7F2 /* Amount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Amount.swift; path = ViewModels/Amount.swift; sourceTree = ""; }; + CE29901B1EFD6DE50093A0F2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; + CE29901F1EFD6E060093A0F2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + CE2990201EFD6F3E0093A0F2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + CE2990221EFD6F500093A0F2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + CE36454B1E7B42850079D0CF /* PinPadCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinPadCells.swift; path = Views/PinPadCells/PinPadCells.swift; sourceTree = ""; }; + CE3D4C561EF5D5740016B1C8 /* ReachabilityMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReachabilityMonitor.swift; sourceTree = ""; }; + CE3D4C581EF743EF0016B1C8 /* Functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Functions.swift; path = Constants/Functions.swift; sourceTree = ""; }; + CE44BA1A1F33BFC500392A1A /* NodeSelectorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NodeSelectorViewController.swift; path = ViewControllers/NodeSelectorViewController.swift; sourceTree = ""; }; + CE45C1F81E74B400002C3847 /* ManageWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ManageWalletViewController.swift; path = ViewControllers/RootModals/ManageWalletViewController.swift; sourceTree = ""; }; + CE45C1FA1E74F89C002C3847 /* WalletInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WalletInfo.swift; path = Platform/WalletInfo.swift; sourceTree = ""; }; + CE45C1FC1E7650F5002C3847 /* KVStoreCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KVStoreCoordinator.swift; sourceTree = ""; }; + CE47A8DF1F7DA54000FF35BA /* UIScreen+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "UIScreen+Additions.swift"; path = "Extensions/UIScreen+Additions.swift"; sourceTree = ""; }; + CE4B6C191E219CA600CF935B /* WalletCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletCoordinator.swift; sourceTree = ""; }; + CE4C1CC51ED65D830063E184 /* DrawableCircle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DrawableCircle.swift; path = Views/DrawableCircle.swift; sourceTree = ""; }; + CE4C1CC71ED88B600063E184 /* URLController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = URLController.swift; path = FlowControllers/URLController.swift; sourceTree = ""; }; + CE4CA7BB1EE3649100373F11 /* BRActivityView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BRActivityView.swift; path = Platform/BRActivityView.swift; sourceTree = ""; }; + CE4DFB2B1E9BE5880014009E /* ReScanViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReScanViewController.swift; path = ViewControllers/ReScanViewController.swift; sourceTree = ""; }; + CE4DFB2D1E9C26DA0014009E /* ShareDataViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ShareDataViewController.swift; path = ViewControllers/ShareDataViewController.swift; sourceTree = ""; }; + CE5E6C931EB7964900A476DB /* WalletDisabledView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WalletDisabledView.swift; path = Views/WalletDisabledView.swift; sourceTree = ""; }; + CE5E6C991EB9135000A476DB /* Icon.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Icon.xcassets; sourceTree = ""; }; + CE5F21D81E4A922700C47B8E /* DismissLoginAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DismissLoginAnimator.swift; path = ViewControllers/ViewControllerTransitions/DismissLoginAnimator.swift; sourceTree = ""; }; + CE5F21DA1E4A93A500C47B8E /* LoginTransitionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoginTransitionDelegate.swift; path = ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift; sourceTree = ""; }; + CE6314821E08E5BB00D4AFE0 /* UIView+InitAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+InitAdditions.swift"; path = "Extensions/UIView+InitAdditions.swift"; sourceTree = ""; }; + CE6B6B491E54C0CA00B31405 /* SecurityCenterCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SecurityCenterCell.swift; path = Views/SecurityCenterCell.swift; sourceTree = ""; }; + CE6BCF5C1EE9E89A0029849C /* CustomTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CustomTitleView.swift; path = Extensions/CustomTitleView.swift; sourceTree = ""; }; + CE6D0E5B1E14BFA600137DF1 /* KeyboardNotificationInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = KeyboardNotificationInfo.swift; path = Models/KeyboardNotificationInfo.swift; sourceTree = ""; }; + CE6D0F961DE8B73A00BD4BCF /* ModalTransitionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ModalTransitionDelegate.swift; path = ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift; sourceTree = ""; }; + CE6D0F981DE8B75900BD4BCF /* DismissModalAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DismissModalAnimator.swift; path = ViewControllers/ViewControllerTransitions/DismissModalAnimator.swift; sourceTree = ""; }; + CE6DCC241E6001E50044257B /* UIControl+Callback.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIControl+Callback.swift"; path = "Extensions/UIControl+Callback.swift"; sourceTree = ""; }; + CE6DCC261E6108D50044257B /* EnterPhraseCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EnterPhraseCell.swift; path = Views/EnterPhraseCell.swift; sourceTree = ""; }; + CE6DCC2F1E6666470044257B /* NonScrollingCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NonScrollingCollectionView.swift; path = Views/NonScrollingCollectionView.swift; sourceTree = ""; }; + CE74F58C1E3BA85600ED5FA9 /* ExchangeUpdater.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ExchangeUpdater.swift; path = Wallet/ExchangeUpdater.swift; sourceTree = ""; }; + CE760EDA1E561DF900EFAC2B /* SecurityCenterViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SecurityCenterViewController.swift; path = ViewControllers/SecurityCenter/SecurityCenterViewController.swift; sourceTree = ""; }; + CE760EDB1E561DF900EFAC2B /* UpdatePinViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UpdatePinViewController.swift; path = ViewControllers/SecurityCenter/UpdatePinViewController.swift; sourceTree = ""; }; + CE83DE291E9EB7F600D07636 /* SendAmountCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SendAmountCell.swift; path = Views/SendAmountCell.swift; sourceTree = ""; }; + CE8644241F2C160200033129 /* ConfirmationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConfirmationViewController.swift; path = ViewControllers/ConfirmationViewController.swift; sourceTree = ""; }; + CE8CD8DC1E2D9EF200785E02 /* Sender.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Sender.swift; sourceTree = ""; }; + CE8CD8DE1E2E825000785E02 /* VerifyPinViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = VerifyPinViewController.swift; path = ViewControllers/VerifyPinViewController.swift; sourceTree = ""; }; + CE8CD8E01E31976800785E02 /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoginViewController.swift; path = ViewControllers/LoginViewController.swift; sourceTree = ""; }; + CE8F0AE21EB91BB500AA7642 /* SearchHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SearchHeaderView.swift; path = Views/SearchHeaderView.swift; sourceTree = ""; }; + CE9057171DFF0FA8006BA848 /* String+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "String+Additions.swift"; path = "Extensions/String+Additions.swift"; sourceTree = ""; }; + CE9057191DFF18B2006BA848 /* ScanViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ScanViewController.swift; path = ViewControllers/ScanViewController.swift; sourceTree = ""; }; + CE916E291EDA7E4400D641D6 /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = ""; }; + CE916E2B1EDA7E9100D641D6 /* BRAppGroupConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRAppGroupConstants.h; sourceTree = ""; }; + CE916E2C1EDA7ED000D641D6 /* BRBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRBubbleView.h; sourceTree = ""; }; + CE916E2D1EDA7ED000D641D6 /* BRBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRBubbleView.m; sourceTree = ""; }; + CE916E2F1EDA7F1400D641D6 /* UIImage+Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Utils.h"; sourceTree = ""; }; + CE916E301EDA7F1400D641D6 /* UIImage+Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Utils.m"; sourceTree = ""; }; + CE916E321EDA800E00D641D6 /* UserDefaultsUpdater.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsUpdater.swift; sourceTree = ""; }; + CE916E341EDA848B00D641D6 /* TodayExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = TodayExtension.entitlements; sourceTree = ""; }; + CE916E351EDA855800D641D6 /* BRTodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRTodayViewController.h; sourceTree = ""; }; + CE916E361EDA855800D641D6 /* BRTodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRTodayViewController.m; sourceTree = ""; }; + CE92F9EF1DED0C790046B516 /* PresentModalAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PresentModalAnimator.swift; path = ViewControllers/ViewControllerTransitions/PresentModalAnimator.swift; sourceTree = ""; }; + CE92F9F31DED59E80046B516 /* UIView+AnimationAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+AnimationAdditions.swift"; path = "Extensions/UIView+AnimationAdditions.swift"; sourceTree = ""; }; + CE92F9F51DEDF6890046B516 /* UIViewControllerContextTransitioning+BRAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewControllerContextTransitioning+BRAdditions.swift"; path = "Extensions/UIViewControllerContextTransitioning+BRAdditions.swift"; sourceTree = ""; }; + CEA362671E00EE320061FC0E /* CameraGuideView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CameraGuideView.swift; path = Views/CameraGuideView.swift; sourceTree = ""; }; + CEA362691E01150D0061FC0E /* CGContext+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "CGContext+Additions.swift"; path = "Extensions/CGContext+Additions.swift"; sourceTree = ""; }; + CEAA9E8E1DC074410066731D /* StartPaperPhraseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StartPaperPhraseViewController.swift; path = ViewControllers/StartPaperPhraseViewController.swift; sourceTree = ""; }; + CEAA9E901DC0FDFE0066731D /* UIViewPropertyAnimator+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewPropertyAnimator+BRWAdditions.swift"; path = "Extensions/UIViewPropertyAnimator+BRWAdditions.swift"; sourceTree = ""; }; + CEAA9E921DC110E70066731D /* WritePaperPhraseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WritePaperPhraseViewController.swift; path = ViewControllers/WritePaperPhraseViewController.swift; sourceTree = ""; }; + CEAA9E941DC1659F0066731D /* UILabel+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UILabel+BRWAdditions.swift"; path = "Extensions/UILabel+BRWAdditions.swift"; sourceTree = ""; }; + CEAA9E961DC18E1F0066731D /* PhraseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PhraseView.swift; path = Views/PhraseView.swift; sourceTree = ""; }; + CEAA9E981DC262800066731D /* ConfirmPaperPhraseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConfirmPaperPhraseViewController.swift; path = ViewControllers/ConfirmPaperPhraseViewController.swift; sourceTree = ""; }; + CEAA9E9A1DC2B9320066731D /* ConfirmPhrase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ConfirmPhrase.swift; path = Views/ConfirmPhrase.swift; sourceTree = ""; }; + CEAA9E9F1DC2F9F50066731D /* UIFont+BRWAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIFont+BRWAdditions.swift"; path = "Extensions/UIFont+BRWAdditions.swift"; sourceTree = ""; }; + CEAA9EA51DC3246F0066731D /* StartNavigationDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StartNavigationDelegate.swift; sourceTree = ""; }; + CEAA9EA71DC3342E0066731D /* PinView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinView.swift; path = Views/PinView.swift; sourceTree = ""; }; + CEAFC8601E5D5B0500E4FD06 /* SegmentedButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SegmentedButton.swift; path = Controls/SegmentedButton.swift; sourceTree = ""; }; + CEB909F41E5FE63D001804DC /* EnterPhraseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EnterPhraseViewController.swift; path = ViewControllers/EnterPhraseViewController.swift; sourceTree = ""; }; + CEB909F61E5FE654001804DC /* EnterPhraseCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EnterPhraseCollectionViewController.swift; path = ViewControllers/EnterPhraseCollectionViewController.swift; sourceTree = ""; }; + CEB909F91E5FF242001804DC /* RecoverWalletIntroViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RecoverWalletIntroViewController.swift; path = ViewControllers/RecoverWalletIntroViewController.swift; sourceTree = ""; }; + CEBF292D1EF99E55005C330A /* LightWeightAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LightWeightAlert.swift; path = Views/LightWeightAlert.swift; sourceTree = ""; }; + CEBF292F1EF9D76F005C330A /* Environment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Environment.swift; sourceTree = ""; }; + CEBF32ED1DDBC30000348FC6 /* ShadowButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ShadowButton.swift; path = Views/ShadowButton.swift; sourceTree = ""; }; + CEBF33031DDE17A600348FC6 /* Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = Transaction.swift; path = ViewModels/Transaction.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CEC4CF061F0C48DD00E5C82E /* StartWipeWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = StartWipeWalletViewController.swift; path = ViewControllers/StartWipeWalletViewController.swift; sourceTree = ""; }; + CEC4CF081F0C84AB00E5C82E /* UIViewController+Alerts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Alerts.swift"; path = "Extensions/UIViewController+Alerts.swift"; sourceTree = ""; }; + CEC6AA381DEE10BA00EE5AFD /* UINavigationController+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Extension.swift"; path = "Extensions/UINavigationController+Extension.swift"; sourceTree = ""; }; + CEC6AA3A1DEE4EB000EE5AFD /* CGRect+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "CGRect+Additions.swift"; path = "Extensions/CGRect+Additions.swift"; sourceTree = ""; }; + CEC6AA3C1DEE687000EE5AFD /* RadialGradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RadialGradientView.swift; path = Views/RadialGradientView.swift; sourceTree = ""; }; + CEC6AA3F1DEFC87300EE5AFD /* SendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = SendViewController.swift; path = ViewControllers/RootModals/SendViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CEC6AA411DEFC88F00EE5AFD /* ReceiveViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReceiveViewController.swift; path = ViewControllers/RootModals/ReceiveViewController.swift; sourceTree = ""; }; + CEC6AA431DEFCDE900EE5AFD /* ModalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ModalViewController.swift; path = ViewControllers/RootModals/ModalViewController.swift; sourceTree = ""; }; + CEC6AA451DEFCE9200EE5AFD /* MenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MenuViewController.swift; path = ViewControllers/RootModals/MenuViewController.swift; sourceTree = ""; }; + CEC6AA481DEFD00100EE5AFD /* MenuButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MenuButton.swift; path = Controls/MenuButton.swift; sourceTree = ""; }; + CEC6AA4A1DEFD24C00EE5AFD /* MenuButtonType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MenuButtonType.swift; path = Controls/MenuButtonType.swift; sourceTree = ""; }; + CEC6AA4C1DF0741100EE5AFD /* ModalDisplayable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ModalDisplayable.swift; path = ViewControllers/RootModals/ModalDisplayable.swift; sourceTree = ""; }; + CEC6F8441E886723000795B8 /* PaymentRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaymentRequest.swift; sourceTree = ""; }; + CECCE5A41E02408300D99448 /* UIView+FrameChangeBlocking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+FrameChangeBlocking.swift"; path = "Extensions/UIView+FrameChangeBlocking.swift"; sourceTree = ""; }; + CECCE5A81E0378FB00D99448 /* PinPadViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinPadViewController.swift; path = ViewControllers/PinPadViewController.swift; sourceTree = ""; }; + CECCE5AD1E04AD6300D99448 /* AddressCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AddressCell.swift; path = Views/SendViewCells/AddressCell.swift; sourceTree = ""; }; + CECCE5AF1E04AD7600D99448 /* DescriptionSendCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DescriptionSendCell.swift; path = Views/SendViewCells/DescriptionSendCell.swift; sourceTree = ""; }; + CECCE5B11E04B00D00D99448 /* SendCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SendCell.swift; path = Views/SendViewCells/SendCell.swift; sourceTree = ""; }; + CED341321EF5A5C00014912A /* InAppAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InAppAlert.swift; path = Views/InAppAlert.swift; sourceTree = ""; }; + CEE0EF511EBD14B60018DB36 /* PinTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinTransitioningDelegate.swift; path = ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift; sourceTree = ""; }; + CEE1F5621DF13E5A00D733AD /* ModalHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ModalHeaderView.swift; path = Views/ModalHeaderView.swift; sourceTree = ""; }; + CEE20C2C1EA288FA0086F724 /* UpdatingLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UpdatingLabel.swift; path = Views/UpdatingLabel.swift; sourceTree = ""; }; + CEE20C2E1EA3E5820086F724 /* BlinkingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BlinkingView.swift; path = Views/BlinkingView.swift; sourceTree = ""; }; + CEE20C331EA5B4550086F724 /* ArticleIds.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ArticleIds.swift; path = Constants/ArticleIds.swift; sourceTree = ""; }; + CEE20C351EA5B4620086F724 /* Constants+Events.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Constants+Events.swift"; path = "Constants/Constants+Events.swift"; sourceTree = ""; }; + CEE20C371EA5B4680086F724 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Strings.swift; path = Constants/Strings.swift; sourceTree = ""; }; + CEE628291EA98B6D001035AA /* DispatchQueue+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Additions.swift"; path = "Extensions/DispatchQueue+Additions.swift"; sourceTree = ""; }; + CEE659E61F65A936001FF29D /* RetryTimer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RetryTimer.swift; sourceTree = ""; }; + CEE659E81F664C73001FF29D /* WelcomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WelcomeViewController.swift; path = ViewControllers/WelcomeViewController.swift; sourceTree = ""; }; + CEE659ED1F68AAB5001FF29D /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + CEE659EE1F68AAB9001FF29D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + CEE65DEF1E39056F0002994D /* Rate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Rate.swift; path = Models/Rate.swift; sourceTree = ""; }; + CEEC707E1E8D6B4100EF788E /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SettingsViewController.swift; path = ViewControllers/SettingsViewController.swift; sourceTree = ""; }; + CEEC70801E90C04700EF788E /* SeparatorCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SeparatorCell.swift; path = Views/SeparatorCell.swift; sourceTree = ""; }; + CEEC70821E90C07C00EF788E /* Setting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Setting.swift; path = Models/Setting.swift; sourceTree = ""; }; + CEEC70851E94397D00EF788E /* UserDefaults+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UserDefaults+Additions.swift"; path = "Extensions/UserDefaults+Additions.swift"; sourceTree = ""; }; + CEEC70891E945E3B00EF788E /* UnEditableTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UnEditableTextView.swift; path = Views/UnEditableTextView.swift; sourceTree = ""; }; + CEEC708B1E95461A00EF788E /* AboutViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AboutViewController.swift; path = ViewControllers/AboutViewController.swift; sourceTree = ""; }; + CEEC708D1E954AAB00EF788E /* AboutCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AboutCell.swift; path = Views/AboutCell.swift; sourceTree = ""; }; + CEEC70911E95DA4400EF788E /* GradientSwitch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GradientSwitch.swift; path = Views/GradientSwitch.swift; sourceTree = ""; }; + CEEC70931E96A24F00EF788E /* DefaultCurrencyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = DefaultCurrencyViewController.swift; path = Views/DefaultCurrencyViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CEEE92F01EBA7CBA00B7AC9C /* RequestAmountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = RequestAmountViewController.swift; path = ViewControllers/RequestAmountViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CEF3D2DC1E8CBA790070178E /* LAContext+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "LAContext+Extensions.swift"; path = "Extensions/LAContext+Extensions.swift"; sourceTree = ""; }; + CEF3E82A1DE51612007C0A9E /* GradientCircle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GradientCircle.swift; path = Views/GradientCircle.swift; sourceTree = ""; }; + CEF3E82C1DE528BF007C0A9E /* AlertView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AlertView.swift; path = Views/AlertView.swift; sourceTree = ""; }; + CEF3E82E1DE534C5007C0A9E /* GradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GradientView.swift; path = Views/GradientView.swift; sourceTree = ""; }; + CEF3E8311DE55540007C0A9E /* CheckView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheckView.swift; path = Views/AnimatedIcons/CheckView.swift; sourceTree = ""; }; + CEF3E8331DE57166007C0A9E /* AnimatableIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AnimatableIcon.swift; path = Views/AnimatedIcons/AnimatableIcon.swift; sourceTree = ""; }; + CEF3E8351DE60222007C0A9E /* ModalNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ModalNavigationController.swift; path = ViewControllers/ModalNavigationController.swift; sourceTree = ""; }; + CEF61B111ECF52C700C7EA6A /* AmountViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = AmountViewController.swift; path = ViewControllers/AmountViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + CEF61B131ED0D10000C7EA6A /* Types.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Types.swift; path = Models/Types.swift; sourceTree = ""; }; + CEF61B151ED2056D00C7EA6A /* NumberFormatter+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "NumberFormatter+Additions.swift"; path = "Extensions/NumberFormatter+Additions.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2465873323A5AAD000A32E9E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9C11DAA18420075898E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9CE1DAA197C0075898E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A78D1DA5934300A983D8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 24D91D0B2166923E0077A619 /* UserNotifications.framework in Frameworks */, + C35C122A293D48340009022D /* KeychainAccess in Frameworks */, + 22A9A9661DF61FEE000F0016 /* WebKit.framework in Frameworks */, + 22A9A9641DF61FE7000F0016 /* Security.framework in Frameworks */, + 22A9A9621DF61FE0000F0016 /* SystemConfiguration.framework in Frameworks */, + 22A9A9601DF61FD8000F0016 /* CoreLocation.framework in Frameworks */, + 22A9A95E1DF61FD0000F0016 /* PushKit.framework in Frameworks */, + C3423C182B781C6B0051BD6D /* PushNotifications in Frameworks */, + C35C1222293D464A0009022D /* FirebaseAuth in Frameworks */, + C35C1224293D464A0009022D /* FirebaseCrashlytics in Frameworks */, + C35C1220293D464A0009022D /* FirebaseAnalytics in Frameworks */, + 759DA0BE1DAC36A3008CC49B /* libBRCore.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A8051DA5936F00A983D8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 75A2A80A1DA5936F00A983D8 /* NotificationCenter.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C735AC1DAA1C9F00251ECF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1BBAEBE51F80237B0047DEA8 /* loafwallet-core */ = { + isa = PBXGroup; + children = ( + 1BBAEBE81F80237B0047DEA8 /* BRAddress.c */, + 1BBAEBE91F80237B0047DEA8 /* BRAddress.h */, + 1BBAEBEA1F80237B0047DEA8 /* BRArray.h */, + 1BBAEBEB1F80237B0047DEA8 /* BRBase58.c */, + 1BBAEBEC1F80237B0047DEA8 /* BRBase58.h */, + 1BA9FE3C216F68A700BB2DE8 /* BRBech32.c */, + 1BA9FE3B216F68A600BB2DE8 /* BRBech32.h */, + 1BBAEBED1F80237B0047DEA8 /* BRBIP32Sequence.c */, + 1BBAEBEE1F80237B0047DEA8 /* BRBIP32Sequence.h */, + 1BBAEBEF1F80237B0047DEA8 /* BRBIP38Key.c */, + 1BBAEBF01F80237B0047DEA8 /* BRBIP38Key.h */, + 1BBAEBF11F80237B0047DEA8 /* BRBIP39Mnemonic.c */, + 1BBAEBF21F80237B0047DEA8 /* BRBIP39Mnemonic.h */, + 1BBAEBF31F80237B0047DEA8 /* BRBIP39WordsEn.h */, + 1BBAEBF41F80237B0047DEA8 /* BRBloomFilter.c */, + 1BBAEBF51F80237B0047DEA8 /* BRBloomFilter.h */, + 1BBAEC7D1F8025020047DEA8 /* BRCrypto.c */, + 1BBAEBF71F80237B0047DEA8 /* BRCrypto.h */, + 1BBAEBF81F80237B0047DEA8 /* BRInt.h */, + 1BBAEBF91F80237B0047DEA8 /* BRKey.c */, + 1BBAEBFA1F80237B0047DEA8 /* BRKey.h */, + 1BBAEBFB1F80237B0047DEA8 /* BRMerkleBlock.c */, + 1BBAEBFC1F80237B0047DEA8 /* BRMerkleBlock.h */, + 1BBAEBFD1F80237B0047DEA8 /* BRPaymentProtocol.c */, + 1BBAEBFE1F80237B0047DEA8 /* BRPaymentProtocol.h */, + 1BBAEBFF1F80237B0047DEA8 /* BRPeer.c */, + 1BBAEC001F80237B0047DEA8 /* BRPeer.h */, + 1BBAEC011F80237B0047DEA8 /* BRPeerManager.c */, + 1BBAEC021F80237B0047DEA8 /* BRPeerManager.h */, + 1BBAEC031F80237B0047DEA8 /* BRSet.c */, + 1BBAEC041F80237B0047DEA8 /* BRSet.h */, + 1BBAEC051F80237B0047DEA8 /* BRTransaction.c */, + 1BBAEC061F80237B0047DEA8 /* BRTransaction.h */, + 1BBAEC071F80237B0047DEA8 /* BRWallet.c */, + 1BBAEC081F80237B0047DEA8 /* BRWallet.h */, + 1BBAEC0A1F80237B0047DEA8 /* module.modulemap */, + 1BBAEC0B1F80237B0047DEA8 /* README.md */, + 1BBAEC0C1F80237B0047DEA8 /* secp256k1 */, + 1BBAEC711F80237C0047DEA8 /* test.c */, + ); + name = "loafwallet-core"; + path = "Modules/loafwallet-core"; + sourceTree = ""; + }; + 1BBAEC0C1F80237B0047DEA8 /* secp256k1 */ = { + isa = PBXGroup; + children = ( + 1BBAEC0D1F80237B0047DEA8 /* .gitignore */, + 1BBAEC0E1F80237B0047DEA8 /* .travis.yml */, + 1BBAEC0F1F80237B0047DEA8 /* autogen.sh */, + 1BBAEC101F80237B0047DEA8 /* build-aux */, + 1BBAEC151F80237B0047DEA8 /* configure.ac */, + 1BBAEC161F80237B0047DEA8 /* contrib */, + 1BBAEC1B1F80237B0047DEA8 /* COPYING */, + 1BBAEC1C1F80237B0047DEA8 /* include */, + 1BBAEC201F80237B0047DEA8 /* libsecp256k1.pc.in */, + 1BBAEC211F80237B0047DEA8 /* Makefile.am */, + 1BBAEC221F80237B0047DEA8 /* obj */, + 1BBAEC241F80237B0047DEA8 /* README.md */, + 1BBAEC251F80237B0047DEA8 /* sage */, + 1BBAEC291F80237B0047DEA8 /* src */, + 1BBAEC701F80237C0047DEA8 /* TODO */, + ); + path = secp256k1; + sourceTree = ""; + }; + 1BBAEC101F80237B0047DEA8 /* build-aux */ = { + isa = PBXGroup; + children = ( + 1BBAEC111F80237B0047DEA8 /* m4 */, + ); + path = "build-aux"; + sourceTree = ""; + }; + 1BBAEC111F80237B0047DEA8 /* m4 */ = { + isa = PBXGroup; + children = ( + 1BBAEC121F80237B0047DEA8 /* ax_jni_include_dir.m4 */, + 1BBAEC131F80237B0047DEA8 /* ax_prog_cc_for_build.m4 */, + 1BBAEC141F80237B0047DEA8 /* bitcoin_secp.m4 */, + ); + path = m4; + sourceTree = ""; + }; + 1BBAEC161F80237B0047DEA8 /* contrib */ = { + isa = PBXGroup; + children = ( + 1BBAEC171F80237B0047DEA8 /* lax_der_parsing.c */, + 1BBAEC181F80237B0047DEA8 /* lax_der_parsing.h */, + 1BBAEC191F80237B0047DEA8 /* lax_der_privatekey_parsing.c */, + 1BBAEC1A1F80237B0047DEA8 /* lax_der_privatekey_parsing.h */, + ); + path = contrib; + sourceTree = ""; + }; + 1BBAEC1C1F80237B0047DEA8 /* include */ = { + isa = PBXGroup; + children = ( + 1BBAEC1D1F80237B0047DEA8 /* secp256k1.h */, + 1BBAEC1E1F80237B0047DEA8 /* secp256k1_ecdh.h */, + 1BBAEC1F1F80237B0047DEA8 /* secp256k1_recovery.h */, + ); + path = include; + sourceTree = ""; + }; + 1BBAEC221F80237B0047DEA8 /* obj */ = { + isa = PBXGroup; + children = ( + 1BBAEC231F80237B0047DEA8 /* .gitignore */, + ); + path = obj; + sourceTree = ""; + }; + 1BBAEC251F80237B0047DEA8 /* sage */ = { + isa = PBXGroup; + children = ( + 1BBAEC261F80237B0047DEA8 /* group_prover.sage */, + 1BBAEC271F80237B0047DEA8 /* secp256k1.sage */, + 1BBAEC281F80237B0047DEA8 /* weierstrass_prover.sage */, + ); + path = sage; + sourceTree = ""; + }; + 1BBAEC291F80237B0047DEA8 /* src */ = { + isa = PBXGroup; + children = ( + 1BBAEC2A1F80237B0047DEA8 /* asm */, + 1BBAEC2C1F80237B0047DEA8 /* basic-config.h */, + 1BBAEC2D1F80237B0047DEA8 /* bench.h */, + 1BBAEC2E1F80237B0047DEA8 /* bench_ecdh.c */, + 1BBAEC2F1F80237B0047DEA8 /* bench_internal.c */, + 1BBAEC301F80237B0047DEA8 /* bench_recover.c */, + 1BBAEC311F80237B0047DEA8 /* bench_sign.c */, + 1BBAEC321F80237B0047DEA8 /* bench_verify.c */, + 1BBAEC331F80237B0047DEA8 /* ecdsa.h */, + 1BBAEC341F80237B0047DEA8 /* ecdsa_impl.h */, + 1BBAEC351F80237B0047DEA8 /* eckey.h */, + 1BBAEC361F80237B0047DEA8 /* eckey_impl.h */, + 1BBAEC371F80237B0047DEA8 /* ecmult.h */, + 1BBAEC381F80237B0047DEA8 /* ecmult_const.h */, + 1BBAEC391F80237B0047DEA8 /* ecmult_const_impl.h */, + 1BBAEC3A1F80237B0047DEA8 /* ecmult_gen.h */, + 1BBAEC3B1F80237B0047DEA8 /* ecmult_gen_impl.h */, + 1BBAEC3C1F80237B0047DEA8 /* ecmult_impl.h */, + 1BBAEC3D1F80237B0047DEA8 /* field.h */, + 1BBAEC3E1F80237B0047DEA8 /* field_10x26.h */, + 1BBAEC3F1F80237B0047DEA8 /* field_10x26_impl.h */, + 1BBAEC401F80237B0047DEA8 /* field_5x52.h */, + 1BBAEC411F80237B0047DEA8 /* field_5x52_asm_impl.h */, + 1BBAEC421F80237B0047DEA8 /* field_5x52_impl.h */, + 1BBAEC431F80237B0047DEA8 /* field_5x52_int128_impl.h */, + 1BBAEC441F80237B0047DEA8 /* field_impl.h */, + 1BBAEC451F80237B0047DEA8 /* gen_context.c */, + 1BBAEC461F80237B0047DEA8 /* group.h */, + 1BBAEC471F80237B0047DEA8 /* group_impl.h */, + 1BBAEC481F80237B0047DEA8 /* hash.h */, + 1BBAEC491F80237B0047DEA8 /* hash_impl.h */, + 1BBAEC4A1F80237B0047DEA8 /* java */, + 1BBAEC551F80237B0047DEA8 /* modules */, + 1BBAEC5E1F80237B0047DEA8 /* num.h */, + 1BBAEC5F1F80237B0047DEA8 /* num_gmp.h */, + 1BBAEC601F80237B0047DEA8 /* num_gmp_impl.h */, + 1BBAEC611F80237B0047DEA8 /* num_impl.h */, + 1BBAEC621F80237B0047DEA8 /* scalar.h */, + 1BBAEC631F80237B0047DEA8 /* scalar_4x64.h */, + 1BBAEC641F80237B0047DEA8 /* scalar_4x64_impl.h */, + 1BBAEC651F80237B0047DEA8 /* scalar_8x32.h */, + 1BBAEC661F80237B0047DEA8 /* scalar_8x32_impl.h */, + 1BBAEC671F80237B0047DEA8 /* scalar_impl.h */, + 1BBAEC681F80237B0047DEA8 /* scalar_low.h */, + 1BBAEC691F80237B0047DEA8 /* scalar_low_impl.h */, + 1BBAEC6A1F80237B0047DEA8 /* secp256k1.c */, + 1BBAEC6B1F80237B0047DEA8 /* testrand.h */, + 1BBAEC6C1F80237B0047DEA8 /* testrand_impl.h */, + 1BBAEC6D1F80237B0047DEA8 /* tests.c */, + 1BBAEC6E1F80237B0047DEA8 /* tests_exhaustive.c */, + 1BBAEC6F1F80237B0047DEA8 /* util.h */, + ); + path = src; + sourceTree = ""; + }; + 1BBAEC2A1F80237B0047DEA8 /* asm */ = { + isa = PBXGroup; + children = ( + 1BBAEC2B1F80237B0047DEA8 /* field_10x26_arm.s */, + ); + path = asm; + sourceTree = ""; + }; + 1BBAEC4A1F80237B0047DEA8 /* java */ = { + isa = PBXGroup; + children = ( + 1BBAEC4B1F80237B0047DEA8 /* org */, + 1BBAEC511F80237B0047DEA8 /* org_bitcoin_NativeSecp256k1.c */, + 1BBAEC521F80237B0047DEA8 /* org_bitcoin_NativeSecp256k1.h */, + 1BBAEC531F80237B0047DEA8 /* org_bitcoin_Secp256k1Context.c */, + 1BBAEC541F80237B0047DEA8 /* org_bitcoin_Secp256k1Context.h */, + ); + path = java; + sourceTree = ""; + }; + 1BBAEC4B1F80237B0047DEA8 /* org */ = { + isa = PBXGroup; + children = ( + 1BBAEC4C1F80237B0047DEA8 /* bitcoin */, + ); + path = org; + sourceTree = ""; + }; + 1BBAEC4C1F80237B0047DEA8 /* bitcoin */ = { + isa = PBXGroup; + children = ( + 1BBAEC4D1F80237B0047DEA8 /* NativeSecp256k1.java */, + 1BBAEC4E1F80237B0047DEA8 /* NativeSecp256k1Test.java */, + 1BBAEC4F1F80237B0047DEA8 /* NativeSecp256k1Util.java */, + 1BBAEC501F80237B0047DEA8 /* Secp256k1Context.java */, + ); + path = bitcoin; + sourceTree = ""; + }; + 1BBAEC551F80237B0047DEA8 /* modules */ = { + isa = PBXGroup; + children = ( + 1BBAEC561F80237B0047DEA8 /* ecdh */, + 1BBAEC5A1F80237B0047DEA8 /* recovery */, + ); + path = modules; + sourceTree = ""; + }; + 1BBAEC561F80237B0047DEA8 /* ecdh */ = { + isa = PBXGroup; + children = ( + 1BBAEC571F80237B0047DEA8 /* main_impl.h */, + 1BBAEC581F80237B0047DEA8 /* Makefile.am.include */, + 1BBAEC591F80237B0047DEA8 /* tests_impl.h */, + ); + path = ecdh; + sourceTree = ""; + }; + 1BBAEC5A1F80237B0047DEA8 /* recovery */ = { + isa = PBXGroup; + children = ( + 1BBAEC5B1F80237B0047DEA8 /* main_impl.h */, + 1BBAEC5C1F80237B0047DEA8 /* Makefile.am.include */, + 1BBAEC5D1F80237B0047DEA8 /* tests_impl.h */, + ); + path = recovery; + sourceTree = ""; + }; + 22A9A9311DF61930000F0016 /* Platform */ = { + isa = PBXGroup; + children = ( + CE4CA7BB1EE3649100373F11 /* BRActivityView.swift */, + 22A9A9321DF61945000F0016 /* BRAPIClient.swift */, + 222C424F1E90492800078EB5 /* BRAPIClient+KV.swift */, + 2228734E1E916FC30044BA15 /* BRAPIClient+Wallet.swift */, + 22122B711F0B8996000E9AB9 /* BRAPIClient+Events.swift */, + 22A9A9401DF61945000F0016 /* BRReplicatedKVStore.swift */, + 22A9A9371DF61945000F0016 /* BRCoding.swift */, + 22A9A9451DF61945000F0016 /* Extensions.swift */, + 223DB2171DF691260076A151 /* BRSocketHelpers.c */, + 223DB2181DF691260076A151 /* BRSocketHelpers.h */, + CE45C1FA1E74F89C002C3847 /* WalletInfo.swift */, + 22A9A93D1DF61945000F0016 /* TxMetaData.swift */, + 754AE0BD1DFE8E5A007FD001 /* module.modulemap */, + 222319B11F279B3C00008F20 /* POSTBouncer.html */, + ); + name = Platform; + sourceTree = ""; + }; + 22A9A9971DF63426000F0016 /* libbz2 */ = { + isa = PBXGroup; + children = ( + 22A9A9A91DF64B97000F0016 /* Info.plist */, + 22A9A9AA1DF64B97000F0016 /* iphone.modulemap */, + 22A9A9AB1DF64B97000F0016 /* iphonesim.modulemap */, + ); + name = libbz2; + path = Modules/libbz2; + sourceTree = ""; + }; + 24306795238F3DDF00EBEA99 /* BartyCrouch */ = { + isa = PBXGroup; + children = ( + 24306796238F3DF900EBEA99 /* BartyCrouch.swift */, + ); + name = BartyCrouch; + sourceTree = ""; + }; + 24313C8823823B9F00A83F69 /* Receive */ = { + isa = PBXGroup; + children = ( + 24313C8223820C4B00A83F69 /* ReceiveLTCViewController.swift */, + 24313C902382433700A83F69 /* LFModalReceiveQRViewController.swift */, + ); + name = Receive; + sourceTree = ""; + }; + 24313C8923823BB700A83F69 /* WipeWallet */ = { + isa = PBXGroup; + children = ( + 24A6DCFA2230BD9000505F44 /* WipeEmptyWalletViewController.swift */, + ); + name = WipeWallet; + sourceTree = ""; + }; + 24313C8A23823BC400A83F69 /* SendLTC */ = { + isa = PBXGroup; + children = ( + 24313C7923820BC200A83F69 /* SendLTCViewController.swift */, + ); + name = SendLTC; + sourceTree = ""; + }; + 24313C8B23823BDD00A83F69 /* Transactions */ = { + isa = PBXGroup; + children = ( + 24313C7C23820C1900A83F69 /* TransactionsViewController.swift */, + ); + name = Transactions; + sourceTree = ""; + }; + 24313C8C23823C0F00A83F69 /* Login */ = { + isa = PBXGroup; + children = ( + CE8CD8E01E31976800785E02 /* LoginViewController.swift */, + ); + name = Login; + sourceTree = ""; + }; + 24313C8D23823C2B00A83F69 /* Pin */ = { + isa = PBXGroup; + children = ( + CECCE5A81E0378FB00D99448 /* PinPadViewController.swift */, + CE8CD8DE1E2E825000785E02 /* VerifyPinViewController.swift */, + ); + name = Pin; + sourceTree = ""; + }; + 24313C8E23823C5D00A83F69 /* PaperPhrase */ = { + isa = PBXGroup; + children = ( + CEAA9E8E1DC074410066731D /* StartPaperPhraseViewController.swift */, + CEAA9E921DC110E70066731D /* WritePaperPhraseViewController.swift */, + ); + name = PaperPhrase; + sourceTree = ""; + }; + 24313C8F23823D8500A83F69 /* Main */ = { + isa = PBXGroup; + children = ( + 2427342B2381C21800E2D22F /* MainViewController.swift */, + C32DB42E26488CAA00017D26 /* TabBarViewController.swift */, + C3F8F1412C04DEA2006C3211 /* NoBuyTabBarViewController.swift */, + ); + name = Main; + sourceTree = ""; + }; + 24470E2823A5F2C000ADDA27 /* Legacy BRTests */ = { + isa = PBXGroup; + children = ( + 24470E2D23A5F4FF00ADDA27 /* BRCoderTests.swift */, + 24470E2923A5F33000ADDA27 /* BRReplicatedKVStoreTests.swift */, + 24470E2B23A5F43B00ADDA27 /* DefaultFiatCurrencyTests.swift */, + 24470E3123A5F5B100ADDA27 /* NSDataExtensionTests.swift */, + 24470E3523A5FDE800ADDA27 /* PhraseTests.swift */, + 24470E3323A5F5E600ADDA27 /* PaymentRequestTests.swift */, + 24470E3B23A5FFD700ADDA27 /* TouchIdEnabledTests.swift */, + 24470E3D23A6000900ADDA27 /* WalletAuthenticationTests.swift */, + 24470E3F23A6004800ADDA27 /* WalletCreationTests.swift */, + 24470E4123A6007200ADDA27 /* WalletInfoTest.swift */, + 24470E3723A5FEF200ADDA27 /* SpendingLimitTests.swift */, + ); + path = "Legacy BRTests"; + sourceTree = ""; + }; + 24470E4323A6088700ADDA27 /* Class Tests */ = { + isa = PBXGroup; + children = ( + 24470E4423A608A700ADDA27 /* AmountTests.swift */, + 2494037523AD35C000369261 /* BuyWKWebVCTests.swift */, + C31891C226733FD400ECE25C /* TabBarViewControllerTests.swift */, + ); + path = "Class Tests"; + sourceTree = ""; + }; + 2465873723A5AAD100A32E9E /* litewalletTests */ = { + isa = PBXGroup; + children = ( + 584E24FF2951DA97005E0E8B /* Language Selection Tests */, + C3EFA9A42651A7C4005C59B5 /* Lock Screen Tests */, + C3B7C3EC255FF56100E98A64 /* Constants Tests */, + 24470E3923A5FF5700ADDA27 /* TestHelpers.swift */, + 24470E4323A6088700ADDA27 /* Class Tests */, + 24470E2823A5F2C000ADDA27 /* Legacy BRTests */, + 24470E2023A5DA9700ADDA27 /* APIManagerTests.swift */, + 24470E2223A5DB7D00ADDA27 /* WalletManagerTests.swift */, + 2465873A23A5AAD100A32E9E /* Info.plist */, + ); + path = litewalletTests; + sourceTree = ""; + }; + 2494037923ADFBA200369261 /* XIBs */ = { + isa = PBXGroup; + children = ( + 2494037D23AE0C7100369261 /* SyncProgressHeaderView.xib */, + ); + path = XIBs; + sourceTree = ""; + }; + 24AF00FB221B32EC00FF636F /* Storyboards */ = { + isa = PBXGroup; + children = ( + 2494037923ADFBA200369261 /* XIBs */, + 24313CA823824F9800A83F69 /* Main.storyboard */, + 24313C9423824F5700A83F69 /* Alerts.storyboard */, + 24313C9523824F5700A83F69 /* Animate.storyboard */, + 24313C9823824F5800A83F69 /* Buy.storyboard */, + 24313C9623824F5800A83F69 /* Receive.storyboard */, + 24313C9723824F5800A83F69 /* Send.storyboard */, + 24393B5B23C259400075218D /* Phrase.storyboard */, + 24313C9323824F5700A83F69 /* Transactions.storyboard */, + 24DFCE6723B89CDE001F17F8 /* Settings.storyboard */, + 24AF00FC221B331D00FF636F /* WarningConfirmation.storyboard */, + ); + path = Storyboards; + sourceTree = ""; + }; + 24C516502158820E007CE038 /* Buy */ = { + isa = PBXGroup; + children = ( + 24B8FAD12162B10200A155B1 /* BuyCenterWebViewController.swift */, + 248BFE2523AB302200CE1A71 /* BuyWKWebViewController.swift */, + ); + name = Buy; + sourceTree = ""; + }; + 584E24F62951D400005E0E8B /* LanguageSelection */ = { + isa = PBXGroup; + children = ( + 584E24F72951D412005E0E8B /* LanguageSelectionViewController.swift */, + 584E24F92951D43A005E0E8B /* LanguageSelectionViewModel.swift */, + ); + name = LanguageSelection; + sourceTree = ""; + }; + 584E24FF2951DA97005E0E8B /* Language Selection Tests */ = { + isa = PBXGroup; + children = ( + 584E25002951DAAA005E0E8B /* LanguageSelectionTests.swift */, + C3F8F13B2C049A4A006C3211 /* LocaleTests.swift */, + ); + path = "Language Selection Tests"; + sourceTree = ""; + }; + 755CD3831DAA0E3E0075898E /* unbound */ = { + isa = PBXGroup; + children = ( + 755CD38A1DAA0E3E0075898E /* cachedb */, + 755CD38D1DAA0E3E0075898E /* compat */, + 755CD3AB1DAA0E3E0075898E /* config.h */, + 755CD3DA1DAA0E3E0075898E /* dns64 */, + 755CD3DD1DAA0E3E0075898E /* dnstap */, + 755CD3FC1DAA0E3E0075898E /* iterator */, + 755CD40F1DAA0E3E0075898E /* libunbound */, + 755CD4441DAA0E3E0075898E /* module.modulemap */, + 755CD4731DAA0E3E0075898E /* services */, + 755CD4871DAA0E3E0075898E /* sldns */, + 755CD6751DAA0E400075898E /* util */, + 755CD6B61DAA0E400075898E /* validator */, + ); + name = unbound; + path = Modules/unbound; + sourceTree = ""; + }; + 755CD38A1DAA0E3E0075898E /* cachedb */ = { + isa = PBXGroup; + children = ( + 755CD38B1DAA0E3E0075898E /* cachedb.c */, + 755CD38C1DAA0E3E0075898E /* cachedb.h */, + ); + path = cachedb; + sourceTree = ""; + }; + 755CD38D1DAA0E3E0075898E /* compat */ = { + isa = PBXGroup; + children = ( + 755CD38E1DAA0E3E0075898E /* arc4_lock.c */, + 755CD38F1DAA0E3E0075898E /* arc4random.c */, + 755CD3901DAA0E3E0075898E /* arc4random_uniform.c */, + 755CD3911DAA0E3E0075898E /* chacha_private.h */, + 755CD3921DAA0E3E0075898E /* ctime_r.c */, + 755CD3931DAA0E3E0075898E /* explicit_bzero.c */, + 755CD3941DAA0E3E0075898E /* fake-rfc2553.c */, + 755CD3951DAA0E3E0075898E /* fake-rfc2553.h */, + 755CD3961DAA0E3E0075898E /* getentropy_linux.c */, + 755CD3971DAA0E3E0075898E /* getentropy_osx.c */, + 755CD3981DAA0E3E0075898E /* getentropy_solaris.c */, + 755CD3991DAA0E3E0075898E /* getentropy_win.c */, + 755CD39A1DAA0E3E0075898E /* gmtime_r.c */, + 755CD39B1DAA0E3E0075898E /* inet_aton.c */, + 755CD39C1DAA0E3E0075898E /* inet_ntop.c */, + 755CD39D1DAA0E3E0075898E /* inet_pton.c */, + 755CD39E1DAA0E3E0075898E /* isblank.c */, + 755CD39F1DAA0E3E0075898E /* malloc.c */, + 755CD3A01DAA0E3E0075898E /* memcmp.c */, + 755CD3A11DAA0E3E0075898E /* memcmp.h */, + 755CD3A21DAA0E3E0075898E /* memmove.c */, + 755CD3A31DAA0E3E0075898E /* reallocarray.c */, + 755CD3A41DAA0E3E0075898E /* sha512.c */, + 755CD3A51DAA0E3E0075898E /* snprintf.c */, + 755CD3A61DAA0E3E0075898E /* strlcat.c */, + 755CD3A71DAA0E3E0075898E /* strlcpy.c */, + 755CD3A81DAA0E3E0075898E /* strptime.c */, + 755CD3A91DAA0E3E0075898E /* strsep.c */, + ); + path = compat; + sourceTree = ""; + }; + 755CD3DA1DAA0E3E0075898E /* dns64 */ = { + isa = PBXGroup; + children = ( + 755CD3DB1DAA0E3E0075898E /* dns64.c */, + 755CD3DC1DAA0E3E0075898E /* dns64.h */, + ); + path = dns64; + sourceTree = ""; + }; + 755CD3DD1DAA0E3E0075898E /* dnstap */ = { + isa = PBXGroup; + children = ( + 755CD3DE1DAA0E3E0075898E /* dnstap.c */, + 755CD3DF1DAA0E3E0075898E /* dnstap.h */, + 755CD3E21DAA0E3E0075898E /* dnstap_config.h */, + ); + path = dnstap; + sourceTree = ""; + }; + 755CD3FC1DAA0E3E0075898E /* iterator */ = { + isa = PBXGroup; + children = ( + 755CD3FD1DAA0E3E0075898E /* iter_delegpt.c */, + 755CD3FE1DAA0E3E0075898E /* iter_delegpt.h */, + 755CD3FF1DAA0E3E0075898E /* iter_donotq.c */, + 755CD4001DAA0E3E0075898E /* iter_donotq.h */, + 755CD4011DAA0E3E0075898E /* iter_fwd.c */, + 755CD4021DAA0E3E0075898E /* iter_fwd.h */, + 755CD4031DAA0E3E0075898E /* iter_hints.c */, + 755CD4041DAA0E3E0075898E /* iter_hints.h */, + 755CD4051DAA0E3E0075898E /* iter_priv.c */, + 755CD4061DAA0E3E0075898E /* iter_priv.h */, + 755CD4071DAA0E3E0075898E /* iter_resptype.c */, + 755CD4081DAA0E3E0075898E /* iter_resptype.h */, + 755CD4091DAA0E3E0075898E /* iter_scrub.c */, + 755CD40A1DAA0E3E0075898E /* iter_scrub.h */, + 755CD40B1DAA0E3E0075898E /* iter_utils.c */, + 755CD40C1DAA0E3E0075898E /* iter_utils.h */, + 755CD40D1DAA0E3E0075898E /* iterator.c */, + 755CD40E1DAA0E3E0075898E /* iterator.h */, + ); + path = iterator; + sourceTree = ""; + }; + 755CD40F1DAA0E3E0075898E /* libunbound */ = { + isa = PBXGroup; + children = ( + 755CD4101DAA0E3E0075898E /* context.c */, + 755CD4111DAA0E3E0075898E /* context.h */, + 755CD4121DAA0E3E0075898E /* libunbound.c */, + 755CD4131DAA0E3E0075898E /* libworker.c */, + 755CD4141DAA0E3E0075898E /* libworker.h */, + 755CD43D1DAA0E3E0075898E /* unbound-event.h */, + 755CD43E1DAA0E3E0075898E /* unbound.h */, + 755CD43F1DAA0E3E0075898E /* worker.h */, + ); + path = libunbound; + sourceTree = ""; + }; + 755CD4731DAA0E3E0075898E /* services */ = { + isa = PBXGroup; + children = ( + 755CD4741DAA0E3E0075898E /* cache */, + 755CD47B1DAA0E3E0075898E /* listen_dnsport.c */, + 755CD47C1DAA0E3E0075898E /* listen_dnsport.h */, + 755CD47D1DAA0E3E0075898E /* localzone.c */, + 755CD47E1DAA0E3E0075898E /* localzone.h */, + 755CD47F1DAA0E3E0075898E /* mesh.c */, + 755CD4801DAA0E3E0075898E /* mesh.h */, + 755CD4811DAA0E3E0075898E /* modstack.c */, + 755CD4821DAA0E3E0075898E /* modstack.h */, + 755CD4831DAA0E3E0075898E /* outbound_list.c */, + 755CD4841DAA0E3E0075898E /* outbound_list.h */, + 755CD4851DAA0E3E0075898E /* outside_network.c */, + 755CD4861DAA0E3E0075898E /* outside_network.h */, + 759DA09F1DAB838D008CC49B /* view.c */, + 759DA0A01DAB838D008CC49B /* view.h */, + ); + path = services; + sourceTree = ""; + }; + 755CD4741DAA0E3E0075898E /* cache */ = { + isa = PBXGroup; + children = ( + 755CD4751DAA0E3E0075898E /* dns.c */, + 755CD4761DAA0E3E0075898E /* dns.h */, + 755CD4771DAA0E3E0075898E /* infra.c */, + 755CD4781DAA0E3E0075898E /* infra.h */, + 755CD4791DAA0E3E0075898E /* rrset.c */, + 755CD47A1DAA0E3E0075898E /* rrset.h */, + ); + path = cache; + sourceTree = ""; + }; + 755CD4871DAA0E3E0075898E /* sldns */ = { + isa = PBXGroup; + children = ( + 755CD4881DAA0E3E0075898E /* keyraw.c */, + 755CD4891DAA0E3E0075898E /* keyraw.h */, + 755CD48A1DAA0E3E0075898E /* parse.c */, + 755CD48B1DAA0E3E0075898E /* parse.h */, + 755CD48C1DAA0E3E0075898E /* parseutil.c */, + 755CD48D1DAA0E3E0075898E /* parseutil.h */, + 755CD48E1DAA0E3E0075898E /* pkthdr.h */, + 755CD48F1DAA0E3E0075898E /* rrdef.c */, + 755CD4901DAA0E3E0075898E /* rrdef.h */, + 755CD4911DAA0E3E0075898E /* sbuffer.c */, + 755CD4921DAA0E3E0075898E /* sbuffer.h */, + 755CD4931DAA0E3E0075898E /* str2wire.c */, + 755CD4941DAA0E3E0075898E /* str2wire.h */, + 755CD4951DAA0E3E0075898E /* wire2str.c */, + 755CD4961DAA0E3E0075898E /* wire2str.h */, + ); + path = sldns; + sourceTree = ""; + }; + 755CD6751DAA0E400075898E /* util */ = { + isa = PBXGroup; + children = ( + 755CD6761DAA0E400075898E /* alloc.c */, + 755CD6771DAA0E400075898E /* alloc.h */, + 755CD6781DAA0E400075898E /* as112.c */, + 755CD6791DAA0E400075898E /* as112.h */, + 755CD67A1DAA0E400075898E /* config_file.c */, + 755CD67B1DAA0E400075898E /* config_file.h */, + 755CD67C1DAA0E400075898E /* configlexer.c */, + 755CD67E1DAA0E400075898E /* configparser.c */, + 755CD67F1DAA0E400075898E /* configparser.h */, + 755CD6811DAA0E400075898E /* configyyrename.h */, + 755CD6821DAA0E400075898E /* data */, + 755CD68D1DAA0E400075898E /* fptr_wlist.c */, + 755CD68E1DAA0E400075898E /* fptr_wlist.h */, + 755CD6901DAA0E400075898E /* locks.c */, + 755CD6911DAA0E400075898E /* locks.h */, + 755CD6921DAA0E400075898E /* log.c */, + 755CD6931DAA0E400075898E /* log.h */, + 755CD6941DAA0E400075898E /* mini_event.c */, + 755CD6951DAA0E400075898E /* mini_event.h */, + 755CD6961DAA0E400075898E /* module.c */, + 755CD6971DAA0E400075898E /* module.h */, + 755CD6981DAA0E400075898E /* net_help.c */, + 755CD6991DAA0E400075898E /* net_help.h */, + 755CD69A1DAA0E400075898E /* netevent.c */, + 755CD69B1DAA0E400075898E /* netevent.h */, + 755CD69C1DAA0E400075898E /* random.c */, + 755CD69D1DAA0E400075898E /* random.h */, + 755CD69E1DAA0E400075898E /* rbtree.c */, + 755CD69F1DAA0E400075898E /* rbtree.h */, + 755CD6A01DAA0E400075898E /* regional.c */, + 755CD6A11DAA0E400075898E /* regional.h */, + 755CD6A21DAA0E400075898E /* rtt.c */, + 755CD6A31DAA0E400075898E /* rtt.h */, + 755CD6A41DAA0E400075898E /* storage */, + 755CD6AD1DAA0E400075898E /* timehist.c */, + 755CD6AE1DAA0E400075898E /* timehist.h */, + 755CD6AF1DAA0E400075898E /* tube.c */, + 755CD6B01DAA0E400075898E /* tube.h */, + 755CD6B11DAA0E400075898E /* ub_event.c */, + 755CD6B21DAA0E400075898E /* ub_event.h */, + 755CD6B31DAA0E400075898E /* ub_event_pluggable.c */, + ); + path = util; + sourceTree = ""; + }; + 755CD6821DAA0E400075898E /* data */ = { + isa = PBXGroup; + children = ( + 755CD6831DAA0E400075898E /* dname.c */, + 755CD6841DAA0E400075898E /* dname.h */, + 755CD6851DAA0E400075898E /* msgencode.c */, + 755CD6861DAA0E400075898E /* msgencode.h */, + 755CD6871DAA0E400075898E /* msgparse.c */, + 755CD6881DAA0E400075898E /* msgparse.h */, + 755CD6891DAA0E400075898E /* msgreply.c */, + 755CD68A1DAA0E400075898E /* msgreply.h */, + 755CD68B1DAA0E400075898E /* packed_rrset.c */, + 755CD68C1DAA0E400075898E /* packed_rrset.h */, + ); + path = data; + sourceTree = ""; + }; + 755CD6A41DAA0E400075898E /* storage */ = { + isa = PBXGroup; + children = ( + 755CD6A51DAA0E400075898E /* dnstree.c */, + 755CD6A61DAA0E400075898E /* dnstree.h */, + 755CD6A71DAA0E400075898E /* lookup3.c */, + 755CD6A81DAA0E400075898E /* lookup3.h */, + 755CD6A91DAA0E400075898E /* lruhash.c */, + 755CD6AA1DAA0E400075898E /* lruhash.h */, + 755CD6AB1DAA0E400075898E /* slabhash.c */, + 755CD6AC1DAA0E400075898E /* slabhash.h */, + ); + path = storage; + sourceTree = ""; + }; + 755CD6B61DAA0E400075898E /* validator */ = { + isa = PBXGroup; + children = ( + 755CD6B71DAA0E400075898E /* autotrust.c */, + 755CD6B81DAA0E400075898E /* autotrust.h */, + 755CD6B91DAA0E400075898E /* val_anchor.c */, + 755CD6BA1DAA0E400075898E /* val_anchor.h */, + 755CD6BB1DAA0E400075898E /* val_kcache.c */, + 755CD6BC1DAA0E400075898E /* val_kcache.h */, + 755CD6BD1DAA0E400075898E /* val_kentry.c */, + 755CD6BE1DAA0E400075898E /* val_kentry.h */, + 755CD6BF1DAA0E400075898E /* val_neg.c */, + 755CD6C01DAA0E400075898E /* val_neg.h */, + 755CD6C11DAA0E400075898E /* val_nsec.c */, + 755CD6C21DAA0E400075898E /* val_nsec.h */, + 755CD6C31DAA0E400075898E /* val_nsec3.c */, + 755CD6C41DAA0E400075898E /* val_nsec3.h */, + 755CD6C51DAA0E400075898E /* val_secalgo.c */, + 755CD6C61DAA0E400075898E /* val_secalgo.h */, + 755CD6C71DAA0E400075898E /* val_sigcrypt.c */, + 755CD6C81DAA0E400075898E /* val_sigcrypt.h */, + 755CD6C91DAA0E400075898E /* val_utils.c */, + 755CD6CA1DAA0E400075898E /* val_utils.h */, + 755CD6CB1DAA0E400075898E /* validator.c */, + 755CD6CC1DAA0E400075898E /* validator.h */, + ); + path = validator; + sourceTree = ""; + }; + 755CD7031DAA16810075898E /* nettle */ = { + isa = PBXGroup; + children = ( + 755CD70A1DAA16810075898E /* aes-decrypt-internal.c */, + 755CD70B1DAA16810075898E /* aes-decrypt.c */, + 755CD70C1DAA16810075898E /* aes-encrypt-internal.c */, + 755CD70D1DAA16810075898E /* aes-encrypt-table.c */, + 755CD70E1DAA16810075898E /* aes-encrypt.c */, + 755CD70F1DAA16810075898E /* aes-internal.h */, + 755CD7101DAA16810075898E /* aes-invert-internal.c */, + 755CD7111DAA16810075898E /* aes-set-decrypt-key.c */, + 755CD7121DAA16810075898E /* aes-set-encrypt-key.c */, + 755CD7131DAA16810075898E /* aes-set-key-internal.c */, + 755CD7141DAA16810075898E /* aes.h */, + 755CD7151DAA16810075898E /* aes128-meta.c */, + 755CD7161DAA16810075898E /* aes128-set-decrypt-key.c */, + 755CD7171DAA16810075898E /* aes128-set-encrypt-key.c */, + 755CD7181DAA16810075898E /* aes192-meta.c */, + 755CD7191DAA16810075898E /* aes192-set-decrypt-key.c */, + 755CD71A1DAA16810075898E /* aes192-set-encrypt-key.c */, + 755CD71B1DAA16810075898E /* aes256-meta.c */, + 755CD71C1DAA16810075898E /* aes256-set-decrypt-key.c */, + 755CD71D1DAA16810075898E /* aes256-set-encrypt-key.c */, + 755CD71E1DAA16810075898E /* aesdata.c */, + 755CD71F1DAA16810075898E /* arcfour-crypt.c */, + 755CD7201DAA16810075898E /* arcfour.c */, + 755CD7211DAA16810075898E /* arcfour.h */, + 755CD7221DAA16810075898E /* arctwo-meta.c */, + 755CD7231DAA16810075898E /* arctwo.c */, + 755CD7241DAA16810075898E /* arctwo.h */, + 755CD74B1DAA16810075898E /* asn1.h */, + 755CD74D1DAA16810075898E /* base16-decode.c */, + 755CD74E1DAA16810075898E /* base16-encode.c */, + 755CD74F1DAA16810075898E /* base16-meta.c */, + 755CD7501DAA16810075898E /* base16.h */, + 755CD7511DAA16810075898E /* base64-decode.c */, + 755CD7521DAA16810075898E /* base64-encode.c */, + 755CD7531DAA16810075898E /* base64-meta.c */, + 755CD7541DAA16810075898E /* base64.h */, + 755CD7551DAA16810075898E /* base64url-decode.c */, + 755CD7561DAA16810075898E /* base64url-encode.c */, + 755CD7571DAA16810075898E /* base64url-meta.c */, + 755CD7581DAA16810075898E /* bignum-random-prime.c */, + 755CD7591DAA16810075898E /* bignum-random.c */, + 755CD75A1DAA16810075898E /* bignum.c */, + 755CD75B1DAA16810075898E /* bignum.h */, + 755CD75C1DAA16810075898E /* blowfish.c */, + 755CD75D1DAA16810075898E /* blowfish.h */, + 755CD75E1DAA16810075898E /* buffer-init.c */, + 755CD75F1DAA16810075898E /* buffer.c */, + 755CD7601DAA16810075898E /* buffer.h */, + 755CD7611DAA16810075898E /* camellia-absorb.c */, + 755CD7621DAA16810075898E /* camellia-crypt-internal.c */, + 755CD7631DAA16810075898E /* camellia-internal.h */, + 755CD7641DAA16810075898E /* camellia-invert-key.c */, + 755CD7651DAA16810075898E /* camellia-table.c */, + 755CD7661DAA16810075898E /* camellia.h */, + 755CD7671DAA16810075898E /* camellia128-crypt.c */, + 755CD7681DAA16810075898E /* camellia128-meta.c */, + 755CD7691DAA16810075898E /* camellia128-set-decrypt-key.c */, + 755CD76A1DAA16810075898E /* camellia128-set-encrypt-key.c */, + 755CD76B1DAA16810075898E /* camellia192-meta.c */, + 755CD76C1DAA16810075898E /* camellia256-crypt.c */, + 755CD76D1DAA16810075898E /* camellia256-meta.c */, + 755CD76E1DAA16810075898E /* camellia256-set-decrypt-key.c */, + 755CD76F1DAA16810075898E /* camellia256-set-encrypt-key.c */, + 755CD7701DAA16810075898E /* cast128-meta.c */, + 755CD7711DAA16810075898E /* cast128.c */, + 755CD7721DAA16810075898E /* cast128.h */, + 755CD7731DAA16810075898E /* cast128_sboxes.h */, + 755CD7741DAA16810075898E /* cbc.c */, + 755CD7751DAA16810075898E /* cbc.h */, + 755CD7761DAA16810075898E /* ccm-aes128.c */, + 755CD7771DAA16810075898E /* ccm-aes192.c */, + 755CD7781DAA16810075898E /* ccm-aes256.c */, + 755CD7791DAA16810075898E /* ccm.c */, + 755CD77A1DAA16810075898E /* ccm.h */, + 755CD77B1DAA16810075898E /* chacha-core-internal.c */, + 755CD77C1DAA16810075898E /* chacha-crypt.c */, + 755CD77D1DAA16810075898E /* chacha-poly1305-meta.c */, + 755CD77E1DAA16810075898E /* chacha-poly1305.c */, + 755CD77F1DAA16810075898E /* chacha-poly1305.h */, + 755CD7801DAA16810075898E /* chacha-set-key.c */, + 755CD7811DAA16810075898E /* chacha-set-nonce.c */, + 755CD7821DAA16810075898E /* chacha.h */, + 755CD7841DAA16810075898E /* cnd-copy.c */, + 755CD7861DAA16810075898E /* config.h */, + 755CD78E1DAA16810075898E /* ctr.c */, + 755CD78F1DAA16810075898E /* ctr.h */, + 755CD7901DAA16810075898E /* curve25519-eh-to-x.c */, + 755CD7911DAA16810075898E /* curve25519-mul-g.c */, + 755CD7921DAA16810075898E /* curve25519-mul.c */, + 755CD7931DAA16810075898E /* curve25519.h */, + 755CD7941DAA16810075898E /* der-iterator.c */, + 755CD7951DAA16810075898E /* der2dsa.c */, + 755CD7961DAA16810075898E /* der2rsa.c */, + 755CD7971DAA16810075898E /* des-compat.c */, + 755CD7981DAA16810075898E /* des-compat.h */, + 755CD7991DAA16810075898E /* des.c */, + 755CD79A1DAA16810075898E /* des.h */, + 755CD79B1DAA16810075898E /* des3.c */, + 755CD79C1DAA16810075898E /* desCode.h */, + 755CD79E1DAA16810075898E /* desdata.c */, + 755CD79F1DAA16810075898E /* desinfo.h */, + 755CD7A01DAA16810075898E /* dsa-compat-keygen.c */, + 755CD7A11DAA16810075898E /* dsa-compat.c */, + 755CD7A21DAA16810075898E /* dsa-compat.h */, + 755CD7A31DAA16810075898E /* dsa-gen-params.c */, + 755CD7A41DAA16810075898E /* dsa-hash.c */, + 755CD7A51DAA16810075898E /* dsa-keygen.c */, + 755CD7A61DAA16810075898E /* dsa-sha1-sign.c */, + 755CD7A71DAA16810075898E /* dsa-sha1-verify.c */, + 755CD7A81DAA16810075898E /* dsa-sha256-sign.c */, + 755CD7A91DAA16810075898E /* dsa-sha256-verify.c */, + 755CD7AA1DAA16810075898E /* dsa-sign.c */, + 755CD7AB1DAA16810075898E /* dsa-verify.c */, + 755CD7AC1DAA16810075898E /* dsa.c */, + 755CD7AD1DAA16810075898E /* dsa.h */, + 755CD7AE1DAA16810075898E /* dsa2sexp.c */, + 755CD7AF1DAA16810075898E /* eax-aes128-meta.c */, + 755CD7B01DAA16810075898E /* eax-aes128.c */, + 755CD7B11DAA16810075898E /* eax.c */, + 755CD7B21DAA16810075898E /* eax.h */, + 755CD7B31DAA16810075898E /* ecc-192.c */, + 755CD7B41DAA16810075898E /* ecc-224.c */, + 755CD7B51DAA16810075898E /* ecc-25519.c */, + 755CD7B61DAA16810075898E /* ecc-256-32.h */, + 755CD7B71DAA16810075898E /* ecc-256-64.h */, + 755CD7B81DAA16810075898E /* ecc-256.c */, + 755CD7B91DAA16810075898E /* ecc-256.h */, + 755CD7BA1DAA16810075898E /* ecc-384-32.h */, + 755CD7BB1DAA16810075898E /* ecc-384-64.h */, + 755CD7BC1DAA16810075898E /* ecc-384.c */, + 755CD7BD1DAA16810075898E /* ecc-384.h */, + 755CD7BE1DAA16810075898E /* ecc-521.c */, + 755CD7BF1DAA16810075898E /* ecc-a-to-j.c */, + 755CD7C01DAA16810075898E /* ecc-add-eh.c */, + 755CD7C11DAA16810075898E /* ecc-add-ehh.c */, + 755CD7C21DAA16810075898E /* ecc-add-jja.c */, + 755CD7C31DAA16810075898E /* ecc-add-jjj.c */, + 755CD7C41DAA16810075898E /* ecc-curve.h */, + 755CD7C51DAA16810075898E /* ecc-dup-eh.c */, + 755CD7C61DAA16810075898E /* ecc-dup-jj.c */, + 755CD7C71DAA16810075898E /* ecc-ecdsa-sign.c */, + 755CD7C81DAA16810075898E /* ecc-ecdsa-verify.c */, + 755CD7C91DAA16810075898E /* ecc-eh-to-a.c */, + 755CD7CA1DAA16810075898E /* ecc-hash.c */, + 755CD7CB1DAA16810075898E /* ecc-internal.h */, + 755CD7CC1DAA16810075898E /* ecc-j-to-a.c */, + 755CD7CD1DAA16810075898E /* ecc-mod-arith.c */, + 755CD7CE1DAA16810075898E /* ecc-mod-inv.c */, + 755CD7CF1DAA16810075898E /* ecc-mod.c */, + 755CD7D01DAA16810075898E /* ecc-mul-a-eh.c */, + 755CD7D11DAA16810075898E /* ecc-mul-a.c */, + 755CD7D21DAA16810075898E /* ecc-mul-g-eh.c */, + 755CD7D31DAA16810075898E /* ecc-mul-g.c */, + 755CD7D41DAA16810075898E /* ecc-pm1-redc.c */, + 755CD7D51DAA16810075898E /* ecc-point-mul-g.c */, + 755CD7D61DAA16810075898E /* ecc-point-mul.c */, + 755CD7D71DAA16810075898E /* ecc-point.c */, + 755CD7D81DAA16810075898E /* ecc-pp1-redc.c */, + 755CD7D91DAA16810075898E /* ecc-random.c */, + 755CD7DA1DAA16810075898E /* ecc-scalar.c */, + 755CD7DB1DAA16810075898E /* ecc-size.c */, + 755CD7DC1DAA16810075898E /* ecc.h */, + 755CD7DD1DAA16810075898E /* eccdata.c */, + 755CD7DE1DAA16810075898E /* ecdsa-keygen.c */, + 755CD7DF1DAA16810075898E /* ecdsa-sign.c */, + 755CD7E01DAA16810075898E /* ecdsa-verify.c */, + 755CD7E21DAA16810075898E /* ed25519-sha512-pubkey.c */, + 755CD7E31DAA16810075898E /* ed25519-sha512-sign.c */, + 755CD7E41DAA16810075898E /* ed25519-sha512-verify.c */, + 755CD7E51DAA16810075898E /* eddsa-compress.c */, + 755CD7E61DAA16810075898E /* eddsa-decompress.c */, + 755CD7E71DAA16810075898E /* eddsa-expand.c */, + 755CD7E81DAA16810075898E /* eddsa-hash.c */, + 755CD7E91DAA16810075898E /* eddsa-pubkey.c */, + 755CD7EA1DAA16810075898E /* eddsa-sign.c */, + 755CD7EB1DAA16810075898E /* eddsa-verify.c */, + 755CD7EC1DAA16810075898E /* eddsa.h */, + 755CD80B1DAA16810075898E /* fat-arm.c */, + 755CD80C1DAA16810075898E /* fat-setup.h */, + 755CD80D1DAA16810075898E /* fat-x86_64.c */, + 755CD80E1DAA16810075898E /* gcm-aes.c */, + 755CD80F1DAA16810075898E /* gcm-aes128-meta.c */, + 755CD8101DAA16810075898E /* gcm-aes128.c */, + 755CD8111DAA16810075898E /* gcm-aes192-meta.c */, + 755CD8121DAA16810075898E /* gcm-aes192.c */, + 755CD8131DAA16810075898E /* gcm-aes256-meta.c */, + 755CD8141DAA16810075898E /* gcm-aes256.c */, + 755CD8151DAA16810075898E /* gcm-camellia128-meta.c */, + 755CD8161DAA16810075898E /* gcm-camellia128.c */, + 755CD8171DAA16810075898E /* gcm-camellia256-meta.c */, + 755CD8181DAA16810075898E /* gcm-camellia256.c */, + 755CD8191DAA16810075898E /* gcm.c */, + 755CD81A1DAA16810075898E /* gcm.h */, + 755CD81B1DAA16810075898E /* gcmdata.c */, + 755CD81C1DAA16810075898E /* getopt.c */, + 755CD81D1DAA16810075898E /* getopt.h */, + 755CD81E1DAA16810075898E /* getopt1.c */, + 755CD81F1DAA16810075898E /* getopt_int.h */, + 755CD8201DAA16810075898E /* gmp-glue.c */, + 755CD8211DAA16810075898E /* gmp-glue.h */, + 755CD8221DAA16810075898E /* gosthash94-meta.c */, + 755CD8231DAA16810075898E /* gosthash94.c */, + 755CD8241DAA16810075898E /* gosthash94.h */, + 755CD8251DAA16810075898E /* hmac-md5.c */, + 755CD8261DAA16810075898E /* hmac-ripemd160.c */, + 755CD8271DAA16810075898E /* hmac-sha1.c */, + 755CD8281DAA16810075898E /* hmac-sha224.c */, + 755CD8291DAA16810075898E /* hmac-sha256.c */, + 755CD82A1DAA16810075898E /* hmac-sha384.c */, + 755CD82B1DAA16810075898E /* hmac-sha512.c */, + 755CD82C1DAA16810075898E /* hmac.c */, + 755CD82D1DAA16810075898E /* hmac.h */, + 755CD8321DAA16820075898E /* knuth-lfib.c */, + 755CD8331DAA16820075898E /* knuth-lfib.h */, + 755CD8371DAA16820075898E /* macros.h */, + 755CD8391DAA16820075898E /* md2-meta.c */, + 755CD83A1DAA16820075898E /* md2.c */, + 755CD83B1DAA16820075898E /* md2.h */, + 755CD83C1DAA16820075898E /* md4-meta.c */, + 755CD83D1DAA16820075898E /* md4.c */, + 755CD83E1DAA16820075898E /* md4.h */, + 755CD83F1DAA16820075898E /* md5-compat.c */, + 755CD8401DAA16820075898E /* md5-compat.h */, + 755CD8411DAA16820075898E /* md5-compress.c */, + 755CD8421DAA16820075898E /* md5-meta.c */, + 755CD8431DAA16820075898E /* md5.c */, + 755CD8441DAA16820075898E /* md5.h */, + 755CD8451DAA16820075898E /* memeql-sec.c */, + 755CD8461DAA16820075898E /* memops.h */, + 755CD8471DAA16820075898E /* memxor-internal.h */, + 755CD8481DAA16820075898E /* memxor.c */, + 755CD8491DAA16820075898E /* memxor.h */, + 755CD84A1DAA16820075898E /* memxor3.c */, + 755CD84B1DAA16820075898E /* mini-gmp.c */, + 755CD84C1DAA16820075898E /* mini-gmp.h */, + 755CD8731DAA16820075898E /* nettle-internal.c */, + 755CD8741DAA16820075898E /* nettle-internal.h */, + 755CD8751DAA16820075898E /* nettle-meta-aeads.c */, + 755CD8761DAA16820075898E /* nettle-meta-armors.c */, + 755CD8771DAA16820075898E /* nettle-meta-ciphers.c */, + 755CD8781DAA16820075898E /* nettle-meta-hashes.c */, + 755CD8791DAA16820075898E /* nettle-meta.h */, + 755CD87A1DAA16820075898E /* nettle-stdint.h */, + 755CD87B1DAA16820075898E /* nettle-types.h */, + 755CD87C1DAA16820075898E /* nettle-write.h */, + 755CD8801DAA16820075898E /* pbkdf2-hmac-sha1.c */, + 755CD8811DAA16820075898E /* pbkdf2-hmac-sha256.c */, + 755CD8821DAA16820075898E /* pbkdf2.c */, + 755CD8831DAA16820075898E /* pbkdf2.h */, + 755CD8841DAA16820075898E /* pgp-encode.c */, + 755CD8851DAA16820075898E /* pgp.h */, + 755CD8861DAA16820075898E /* pkcs1-decrypt.c */, + 755CD8871DAA16820075898E /* pkcs1-encrypt.c */, + 755CD8881DAA16820075898E /* pkcs1-rsa-digest.c */, + 755CD8891DAA16820075898E /* pkcs1-rsa-md5.c */, + 755CD88A1DAA16820075898E /* pkcs1-rsa-sha1.c */, + 755CD88B1DAA16820075898E /* pkcs1-rsa-sha256.c */, + 755CD88C1DAA16820075898E /* pkcs1-rsa-sha512.c */, + 755CD88D1DAA16820075898E /* pkcs1.c */, + 755CD88E1DAA16820075898E /* pkcs1.h */, + 755CD88F1DAA16820075898E /* poly1305-aes.c */, + 755CD8901DAA16820075898E /* poly1305-internal.c */, + 755CD8911DAA16820075898E /* poly1305.h */, + 755CD8931DAA16820075898E /* realloc.c */, + 755CD8941DAA16820075898E /* realloc.h */, + 755CD8951DAA16820075898E /* ripemd160-compress.c */, + 755CD8961DAA16820075898E /* ripemd160-meta.c */, + 755CD8971DAA16820075898E /* ripemd160.c */, + 755CD8981DAA16820075898E /* ripemd160.h */, + 755CD8991DAA16820075898E /* rsa-blind.c */, + 755CD89A1DAA16820075898E /* rsa-decrypt-tr.c */, + 755CD89B1DAA16820075898E /* rsa-decrypt.c */, + 755CD89C1DAA16820075898E /* rsa-encrypt.c */, + 755CD89D1DAA16820075898E /* rsa-keygen.c */, + 755CD89E1DAA16820075898E /* rsa-md5-sign-tr.c */, + 755CD89F1DAA16820075898E /* rsa-md5-sign.c */, + 755CD8A01DAA16820075898E /* rsa-md5-verify.c */, + 755CD8A11DAA16820075898E /* rsa-pkcs1-sign-tr.c */, + 755CD8A21DAA16820075898E /* rsa-pkcs1-sign.c */, + 755CD8A31DAA16820075898E /* rsa-pkcs1-verify.c */, + 755CD8A41DAA16820075898E /* rsa-sha1-sign-tr.c */, + 755CD8A51DAA16820075898E /* rsa-sha1-sign.c */, + 755CD8A61DAA16820075898E /* rsa-sha1-verify.c */, + 755CD8A71DAA16820075898E /* rsa-sha256-sign-tr.c */, + 755CD8A81DAA16820075898E /* rsa-sha256-sign.c */, + 755CD8A91DAA16820075898E /* rsa-sha256-verify.c */, + 755CD8AA1DAA16820075898E /* rsa-sha512-sign-tr.c */, + 755CD8AB1DAA16820075898E /* rsa-sha512-sign.c */, + 755CD8AC1DAA16820075898E /* rsa-sha512-verify.c */, + 755CD8AD1DAA16820075898E /* rsa-sign-tr.c */, + 755CD8AE1DAA16820075898E /* rsa-sign.c */, + 755CD8AF1DAA16820075898E /* rsa-verify.c */, + 755CD8B01DAA16820075898E /* rsa.c */, + 755CD8B11DAA16820075898E /* rsa.h */, + 755CD8B21DAA16820075898E /* rsa2openpgp.c */, + 755CD8B31DAA16820075898E /* rsa2sexp.c */, + 755CD8B51DAA16820075898E /* salsa20-128-set-key.c */, + 755CD8B61DAA16820075898E /* salsa20-256-set-key.c */, + 755CD8B71DAA16820075898E /* salsa20-core-internal.c */, + 755CD8B81DAA16820075898E /* salsa20-crypt.c */, + 755CD8B91DAA16820075898E /* salsa20-set-key.c */, + 755CD8BA1DAA16820075898E /* salsa20-set-nonce.c */, + 755CD8BB1DAA16820075898E /* salsa20.h */, + 755CD8BC1DAA16820075898E /* salsa20r12-crypt.c */, + 755CD8BD1DAA16820075898E /* sec-add-1.c */, + 755CD8BE1DAA16820075898E /* sec-sub-1.c */, + 755CD8BF1DAA16820075898E /* sec-tabselect.c */, + 755CD8C01DAA16820075898E /* serpent-decrypt.c */, + 755CD8C11DAA16820075898E /* serpent-encrypt.c */, + 755CD8C21DAA16820075898E /* serpent-internal.h */, + 755CD8C31DAA16820075898E /* serpent-meta.c */, + 755CD8C41DAA16820075898E /* serpent-set-key.c */, + 755CD8C51DAA16820075898E /* serpent.h */, + 755CD8C61DAA16820075898E /* sexp-format.c */, + 755CD8C71DAA16820075898E /* sexp-transport-format.c */, + 755CD8C81DAA16820075898E /* sexp-transport.c */, + 755CD8C91DAA16820075898E /* sexp.c */, + 755CD8CA1DAA16820075898E /* sexp.h */, + 755CD8CB1DAA16820075898E /* sexp2bignum.c */, + 755CD8CC1DAA16820075898E /* sexp2dsa.c */, + 755CD8CD1DAA16820075898E /* sexp2rsa.c */, + 755CD8CE1DAA16820075898E /* sha-example.c */, + 755CD8CF1DAA16820075898E /* sha.h */, + 755CD8D01DAA16820075898E /* sha1-compress.c */, + 755CD8D11DAA16820075898E /* sha1-meta.c */, + 755CD8D21DAA16820075898E /* sha1.c */, + 755CD8D31DAA16820075898E /* sha1.h */, + 755CD8D41DAA16820075898E /* sha2.h */, + 755CD8D51DAA16820075898E /* sha224-meta.c */, + 755CD8D61DAA16820075898E /* sha256-compress.c */, + 755CD8D71DAA16820075898E /* sha256-meta.c */, + 755CD8D81DAA16820075898E /* sha256.c */, + 755CD8D91DAA16820075898E /* sha3-224-meta.c */, + 755CD8DA1DAA16820075898E /* sha3-224.c */, + 755CD8DB1DAA16820075898E /* sha3-256-meta.c */, + 755CD8DC1DAA16820075898E /* sha3-256.c */, + 755CD8DD1DAA16820075898E /* sha3-384-meta.c */, + 755CD8DE1DAA16820075898E /* sha3-384.c */, + 755CD8DF1DAA16820075898E /* sha3-512-meta.c */, + 755CD8E01DAA16820075898E /* sha3-512.c */, + 755CD8E11DAA16820075898E /* sha3-permute.c */, + 755CD8E21DAA16820075898E /* sha3.c */, + 755CD8E31DAA16820075898E /* sha3.h */, + 755CD8E41DAA16820075898E /* sha384-meta.c */, + 755CD8E51DAA16820075898E /* sha512-224-meta.c */, + 755CD8E61DAA16820075898E /* sha512-256-meta.c */, + 755CD8E71DAA16820075898E /* sha512-compress.c */, + 755CD8E81DAA16820075898E /* sha512-meta.c */, + 755CD8E91DAA16820075898E /* sha512.c */, + 755CD8EA1DAA16820075898E /* shadata.c */, + 755CD95F1DAA16830075898E /* tools */, + 755CD9711DAA16830075898E /* twofish-meta.c */, + 755CD9721DAA16830075898E /* twofish.c */, + 755CD9731DAA16830075898E /* twofish.h */, + 755CD9741DAA16830075898E /* twofishdata.c */, + 755CD9751DAA16830075898E /* umac-l2.c */, + 755CD9761DAA16830075898E /* umac-l3.c */, + 755CD9771DAA16830075898E /* umac-nh-n.c */, + 755CD9781DAA16830075898E /* umac-nh.c */, + 755CD9791DAA16830075898E /* umac-poly128.c */, + 755CD97A1DAA16830075898E /* umac-poly64.c */, + 755CD97B1DAA16830075898E /* umac-set-key.c */, + 755CD97C1DAA16830075898E /* umac.h */, + 755CD97D1DAA16830075898E /* umac128.c */, + 755CD97E1DAA16830075898E /* umac32.c */, + 755CD97F1DAA16830075898E /* umac64.c */, + 755CD9801DAA16830075898E /* umac96.c */, + 755CD9811DAA16830075898E /* version.c */, + 755CD9821DAA16830075898E /* version.h */, + 755CD9841DAA16830075898E /* write-be32.c */, + 755CD9851DAA16830075898E /* write-le32.c */, + 755CD9861DAA16830075898E /* write-le64.c */, + 755CD9BD1DAA16830075898E /* yarrow.h */, + 755CD9BE1DAA16830075898E /* yarrow256.c */, + 755CD9BF1DAA16830075898E /* yarrow_key_event.c */, + ); + name = nettle; + path = Modules/nettle; + sourceTree = ""; + }; + 755CD95F1DAA16830075898E /* tools */ = { + isa = PBXGroup; + children = ( + 755CD9631DAA16830075898E /* input.c */, + 755CD9641DAA16830075898E /* input.h */, + 755CD9661DAA16830075898E /* misc.c */, + 755CD9671DAA16830075898E /* misc.h */, + 755CD9681DAA16830075898E /* nettle-hash.c */, + 755CD9691DAA16830075898E /* nettle-lfib-stream.c */, + 755CD96A1DAA16830075898E /* nettle-pbkdf2.c */, + 755CD96B1DAA16830075898E /* output.c */, + 755CD96C1DAA16830075898E /* output.h */, + 755CD96D1DAA16830075898E /* parse.c */, + 755CD96E1DAA16830075898E /* parse.h */, + 755CD96F1DAA16830075898E /* pkcs1-conv.c */, + 755CD9701DAA16830075898E /* sexp-conv.c */, + ); + path = tools; + sourceTree = ""; + }; + 75A2A7871DA5934300A983D8 = { + isa = PBXGroup; + children = ( + C3F8F1432C04F6BE006C3211 /* Dakar, Senegal.gpx */, + C33685082BECE8B10069CBC7 /* PrivacyInfo.xcprivacy */, + 75A2A7921DA5934300A983D8 /* litewallet */, + 2465873723A5AAD100A32E9E /* litewalletTests */, + 75A2A80B1DA5936F00A983D8 /* TodayExtension */, + 75B6F52F1DA71DCC0031A93F /* Modules */, + 75A2A7F11DA5935F00A983D8 /* Frameworks */, + 75A2A7911DA5934300A983D8 /* Products */, + ); + sourceTree = ""; + }; + 75A2A7911DA5934300A983D8 /* Products */ = { + isa = PBXGroup; + children = ( + 75A2A7901DA5934300A983D8 /* Litewallet.app */, + 75A2A8081DA5936F00A983D8 /* TodayExtension.appex */, + 755CD9C41DAA18420075898E /* libunbound.a */, + 755CD9D11DAA197C0075898E /* libBRCore.a */, + 75C735AF1DAA1C9F00251ECF /* libnettle.a */, + 2465873623A5AAD000A32E9E /* litewalletTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 75A2A7921DA5934300A983D8 /* litewallet */ = { + isa = PBXGroup; + children = ( + C3055B662B8E593A002A0882 /* LaunchDataResources */, + C3423C2F2B796D820051BD6D /* Sounds */, + C35ABD07257404C6002BB9BB /* SwiftUI+UIKit */, + 75A2A87C1DA59E4E00A983D8 /* litewallet.entitlements */, + 75A2A7931DA5934300A983D8 /* AppDelegate.swift */, + CE20C8F11DBAF71500C8397A /* ApplicationController.swift */, + 754AE0BB1DFE8A46007FD001 /* BRCore.swift */, + C3E751C92AF68B2F005571CA /* BRCoreClasses */, + C3E751C02AF689A0005571CA /* BRExtensions */, + 75519F331DC7D20500EDF66C /* WalletManager.swift */, + 7503773C1DF57428005EB8AE /* WalletManager+Auth.swift */, + CE4B6C191E219CA600CF935B /* WalletCoordinator.swift */, + CEE659E61F65A936001FF29D /* RetryTimer.swift */, + CE8CD8DC1E2D9EF200785E02 /* Sender.swift */, + CE74F58C1E3BA85600ED5FA9 /* ExchangeUpdater.swift */, + CE124CFB1E68932C00DFA146 /* FeeManager.swift */, + CE45C1FC1E7650F5002C3847 /* KVStoreCoordinator.swift */, + CEC6F8441E886723000795B8 /* PaymentRequest.swift */, + 7528D2971ECF655500925DBC /* PaymentProtocol.swift */, + CE4C1CC71ED88B600063E184 /* URLController.swift */, + CE916E321EDA800E00D641D6 /* UserDefaultsUpdater.swift */, + CE3D4C561EF5D5740016B1C8 /* ReachabilityMonitor.swift */, + CE2990171EFD6DAF0093A0F2 /* Strings */, + 24306795238F3DDF00EBEA99 /* BartyCrouch */, + 24AF00FB221B32EC00FF636F /* Storyboards */, + CE20C90A1DBC59C500C8397A /* FlowControllers */, + CEE20C321EA5B2EC0086F724 /* Constants */, + CE20C8EF1DBAF6D300C8397A /* ViewControllers */, + CE20C90F1DBE5B5100C8397A /* Views */, + CEBF33021DDE177F00348FC6 /* ViewModels */, + CE6D0E5A1E14BF8400137DF1 /* Models */, + CE20C8F01DBAF6E100C8397A /* Extensions */, + 22A9A9311DF61930000F0016 /* Platform */, + CEAA9E9C1DC2F8270066731D /* Fonts */, + 24670EAC2368EDE7006093E0 /* LFColorPalette.xcassets */, + 75A2A79A1DA5934300A983D8 /* Assets.xcassets */, + CE5E6C991EB9135000A476DB /* Icon.xcassets */, + 75A2A79C1DA5934300A983D8 /* LaunchScreen.storyboard */, + 75A2A79F1DA5934300A983D8 /* Info.plist */, + C31C27662BA327640047F855 /* PrivacyInfo.xcprivacy */, + 24B523AF238A53DC0030594D /* BIP39Words.plist */, + 2485F7CE23728C19005962F1 /* RELEASE_NOTES.md */, + C3ACF2DE25DED601008671D4 /* CHANGELOG.md */, + ); + path = litewallet; + sourceTree = ""; + }; + 75A2A7F11DA5935F00A983D8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 24D91D0A2166923E0077A619 /* UserNotifications.framework */, + 22A9A9671DF61FF8000F0016 /* libbz2.tbd */, + 22A9A9651DF61FEE000F0016 /* WebKit.framework */, + 22A9A9631DF61FE7000F0016 /* Security.framework */, + 22A9A9611DF61FE0000F0016 /* SystemConfiguration.framework */, + 22A9A95F1DF61FD8000F0016 /* CoreLocation.framework */, + 22A9A95D1DF61FD0000F0016 /* PushKit.framework */, + 75FEFD1B1DAED56E00203D3A /* libsqlite3.tbd */, + 75A2A7F21DA5935F00A983D8 /* Messages.framework */, + 75A2A8091DA5936F00A983D8 /* NotificationCenter.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 75A2A80B1DA5936F00A983D8 /* TodayExtension */ = { + isa = PBXGroup; + children = ( + CE916E341EDA848B00D641D6 /* TodayExtension.entitlements */, + CE916E2C1EDA7ED000D641D6 /* BRBubbleView.h */, + CE916E2D1EDA7ED000D641D6 /* BRBubbleView.m */, + CE916E2B1EDA7E9100D641D6 /* BRAppGroupConstants.h */, + CE916E351EDA855800D641D6 /* BRTodayViewController.h */, + CE916E361EDA855800D641D6 /* BRTodayViewController.m */, + CE916E2F1EDA7F1400D641D6 /* UIImage+Utils.h */, + CE916E301EDA7F1400D641D6 /* UIImage+Utils.m */, + 75A2A80E1DA5936F00A983D8 /* MainInterface.storyboard */, + 75A2A8111DA5936F00A983D8 /* Info.plist */, + CE916E291EDA7E4400D641D6 /* Media.xcassets */, + ); + path = TodayExtension; + sourceTree = ""; + }; + 75B6F52F1DA71DCC0031A93F /* Modules */ = { + isa = PBXGroup; + children = ( + 1BBAEBE51F80237B0047DEA8 /* loafwallet-core */, + 22A9A9971DF63426000F0016 /* libbz2 */, + 755CD3831DAA0E3E0075898E /* unbound */, + 755CD7031DAA16810075898E /* nettle */, + 75FEFD1F1DAEE7A400203D3A /* sqlite3 */, + ); + name = Modules; + sourceTree = ""; + }; + 75FEFD1F1DAEE7A400203D3A /* sqlite3 */ = { + isa = PBXGroup; + children = ( + 752FB03B1DF8BE4B009086FB /* Info.plist */, + 752FB03C1DF8BE4B009086FB /* iphone.modulemap */, + 752FB03D1DF8BE4B009086FB /* iphonesim.modulemap */, + ); + name = sqlite3; + path = Modules/sqlite3; + sourceTree = ""; + }; + C3055B662B8E593A002A0882 /* LaunchDataResources */ = { + isa = PBXGroup; + children = ( + C7FD407E2C48FAF60010C0E6 /* partner-keys.plist */, + C3F8F1452C05269A006C3211 /* GoogleService-Info.plist */, + C3188E2526431E750008ADD1 /* Debug-GoogleService-Info.plist */, + ); + name = LaunchDataResources; + sourceTree = ""; + }; + C32142E825C97CB900BECCD0 /* Transactions */ = { + isa = PBXGroup; + children = ( + C32142E925C97CD900BECCD0 /* TransactionCellView.swift */, + C3C8973725CD6B9300241FBE /* HostingTransactionCell.swift */, + C32142F925C988C800BECCD0 /* TransactionCellViewModel.swift */, + C3F7BD0225FEC77100694C28 /* TransactionModalView.swift */, + ); + name = Transactions; + sourceTree = ""; + }; + C3423C2F2B796D820051BD6D /* Sounds */ = { + isa = PBXGroup; + children = ( + C3423C302B796D820051BD6D /* ę—„ęœ¬čŖž.mp3 */, + C3423C312B796D820051BD6D /* Pt.mp3 */, + C3423C322B796D820051BD6D /* De.mp3 */, + C3423C332B796D820051BD6D /* En.mp3 */, + C3423C342B796D820051BD6D /* coinflip.aiff */, + C3423C352B796D820051BD6D /* Uk.mp3 */, + C3423C362B796D820051BD6D /* Fr.mp3 */, + C3423C372B796D820051BD6D /* äø­åœ‹äŗŗ.mp3 */, + C3423C382B796D820051BD6D /* Id.mp3 */, + C3423C392B796D820051BD6D /* Tr.mp3 */, + C3423C3A2B796D820051BD6D /* Es.mp3 */, + C3423C3B2B796D820051BD6D /* Ko.mp3 */, + C3423C3C2B796D820051BD6D /* It.mp3 */, + C3423C3D2B796D820051BD6D /* Ru.mp3 */, + ); + path = Sounds; + sourceTree = ""; + }; + C3543A25264AFE190005D17A /* Settings */ = { + isa = PBXGroup; + children = ( + C3543A26264AFE490005D17A /* LocaleChangeView.swift */, + C3543A28264AFE720005D17A /* LocaleChangeViewModel.swift */, + ); + name = Settings; + sourceTree = ""; + }; + C35ABD07257404C6002BB9BB /* SwiftUI+UIKit */ = { + isa = PBXGroup; + children = ( + C3B419C92BFCF0C900EBD935 /* Buy */, + C3423C272B7905330051BD6D /* SafariServices+Extension.swift */, + C3423C292B7905330051BD6D /* SignupWebView.swift */, + C3423C282B7905330051BD6D /* SignupWebViewModel.swift */, + C3423C252B7904E30051BD6D /* AnnounceUpdatesView.swift */, + C3423C232B7904B80051BD6D /* SeedWordView.swift */, + C3423C1D2B7904070051BD6D /* StartHostingController.swift */, + C3423C212B79047D0051BD6D /* StartViewModel.swift */, + C3423C1F2B79046A0051BD6D /* StartView.swift */, + C3423C1B2B7903CA0051BD6D /* LaunchView.swift */, + C3423C192B79039D0051BD6D /* LaunchCardHostingController.swift */, + C3FF4D5D28AC5A2000713139 /* Send */, + C3543A25264AFE190005D17A /* Settings */, + C32142E825C97CB900BECCD0 /* Transactions */, + C35ABD08257404D2002BB9BB /* Partners */, + C35ABD0925740518002BB9BB /* About */, + C3D4379E2566EA3E00F423E1 /* LWActivityIndicator.swift */, + C30029E125D0185500F08C2B /* StandardDividerView.swift */, + C30029EA25D019BC00F08C2B /* CopyButtonView.swift */, + C3EFA9A02650807B005C59B5 /* LockScreenHeaderView.swift */, + C3EFA9A2265080FF005C59B5 /* LockScreenHeaderViewModel.swift */, + C350788B27DCB10700A50819 /* TextView+Extension.swift */, + ); + name = "SwiftUI+UIKit"; + sourceTree = ""; + }; + C35ABD08257404D2002BB9BB /* Partners */ = { + isa = PBXGroup; + children = ( + C35ABD222574070A002BB9BB /* PartnersView.swift */, + C35ABD322574073F002BB9BB /* PartnersViewModel.swift */, + ); + name = Partners; + sourceTree = ""; + }; + C35ABD0925740518002BB9BB /* About */ = { + isa = PBXGroup; + children = ( + ); + name = About; + sourceTree = ""; + }; + C3B419C92BFCF0C900EBD935 /* Buy */ = { + isa = PBXGroup; + children = ( + C3B419CA2BFCF14100EBD935 /* BuyHostingController.swift */, + C3B419CC2BFCF17600EBD935 /* BuyView.swift */, + C3DBBE302BFE15AF00B95939 /* BuyTileView.swift */, + C3E5A9042BFDEEF1002FBE04 /* BuyViewModel.swift */, + ); + name = Buy; + sourceTree = ""; + }; + C3B7C3EC255FF56100E98A64 /* Constants Tests */ = { + isa = PBXGroup; + children = ( + C3B7C3ED255FF59200E98A64 /* ConstantsTests.swift */, + ); + path = "Constants Tests"; + sourceTree = ""; + }; + C3E751C02AF689A0005571CA /* BRExtensions */ = { + isa = PBXGroup; + children = ( + C3E751C12AF689BA005571CA /* BRKeyExtension.swift */, + C3E751C32AF68A50005571CA /* BRAddressExtension.swift */, + C3E751C52AF68A8E005571CA /* BRTxInputExtension.swift */, + C3E751C72AF68AEB005571CA /* UnsafeMutablePointerExtension.swift */, + C3E751CE2AF68C18005571CA /* BRCalculationExtension.swift */, + C3E751D02AF68C84005571CA /* BRMasterKeyExtension.swift */, + C3E751D22AF68CD1005571CA /* BRTxOutputExtension.swift */, + ); + name = BRExtensions; + sourceTree = ""; + }; + C3E751C92AF68B2F005571CA /* BRCoreClasses */ = { + isa = PBXGroup; + children = ( + C3E751CA2AF68B47005571CA /* BRPeerManager.swift */, + C3E751CC2AF68B93005571CA /* BRWallet.swift */, + ); + name = BRCoreClasses; + sourceTree = ""; + }; + C3EFA9A42651A7C4005C59B5 /* Lock Screen Tests */ = { + isa = PBXGroup; + children = ( + C3EFA9A52651A808005C59B5 /* LockScreenTests.swift */, + ); + path = "Lock Screen Tests"; + sourceTree = ""; + }; + C3FF4D5D28AC5A2000713139 /* Send */ = { + isa = PBXGroup; + children = ( + C3FF4D5E28AC5A5800713139 /* SendAddressCellView.swift */, + C36375A228BD38A500CFB3D8 /* SendButtonHostingController.swift */, + C3FF4D6028AC5AC100713139 /* SendAddressCellViewModel.swift */, + C36375A428BD390C00CFB3D8 /* SendButtonView.swift */, + C361F48128B368BC00E9798F /* AddressFieldView.swift */, + ); + name = Send; + sourceTree = ""; + }; + CE1E5F241EF081F300BD0F72 /* Import */ = { + isa = PBXGroup; + children = ( + CE1E5F251EF083A600BD0F72 /* StartImportViewController.swift */, + ); + name = Import; + sourceTree = ""; + }; + CE20C8EF1DBAF6D300C8397A /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 584E24F62951D400005E0E8B /* LanguageSelection */, + 24313C8F23823D8500A83F69 /* Main */, + 24313C8E23823C5D00A83F69 /* PaperPhrase */, + 24313C8D23823C2B00A83F69 /* Pin */, + 24313C8C23823C0F00A83F69 /* Login */, + 24313C8B23823BDD00A83F69 /* Transactions */, + 24313C8A23823BC400A83F69 /* SendLTC */, + 24313C8923823BB700A83F69 /* WipeWallet */, + 24313C8823823B9F00A83F69 /* Receive */, + CE1E5F241EF081F300BD0F72 /* Import */, + CEEC70841E90CCA600EF788E /* Settings */, + CEB909F81E5FF20A001804DC /* Recover */, + CEC6AA3E1DEFC85700EE5AFD /* RootModals */, + CE6D0F951DE8B6B600BD4BCF /* ViewControllerTransitions */, + 24C516502158820E007CE038 /* Buy */, + CE760ED71E55F9E000EFAC2B /* SecurityCenter */, + CE20C9061DBC587200C8397A /* StartViewController.swift */, + 2494038023AF208F00369261 /* PromptModalViewController.swift */, + CEAA9E981DC262800066731D /* ConfirmPaperPhraseViewController.swift */, + CEF3E8351DE60222007C0A9E /* ModalNavigationController.swift */, + CE9057191DFF18B2006BA848 /* ScanViewController.swift */, + CE45C1F81E74B400002C3847 /* ManageWalletViewController.swift */, + CEEC708B1E95461A00EF788E /* AboutViewController.swift */, + CEEC70931E96A24F00EF788E /* DefaultCurrencyViewController.swift */, + CE4DFB2B1E9BE5880014009E /* ReScanViewController.swift */, + CE4DFB2D1E9C26DA0014009E /* ShareDataViewController.swift */, + CEEE92F01EBA7CBA00B7AC9C /* RequestAmountViewController.swift */, + CEF61B111ECF52C700C7EA6A /* AmountViewController.swift */, + CEC4CF061F0C48DD00E5C82E /* StartWipeWalletViewController.swift */, + CE8644241F2C160200033129 /* ConfirmationViewController.swift */, + CE44BA1A1F33BFC500392A1A /* NodeSelectorViewController.swift */, + CEE659E81F664C73001FF29D /* WelcomeViewController.swift */, + 1B3F74211FFB106200CCA50C /* BiometricsSettingsViewController.swift */, + 1B3F74221FFB106200CCA50C /* BiometricsSpendingLimitViewController.swift */, + 24AF00FF221B349100FF636F /* WarningConfirmationViewController.swift */, + 24D5F26D225A5BEA00225462 /* ContainerViewController.swift */, + ); + name = ViewControllers; + sourceTree = ""; + }; + CE20C8F01DBAF6E100C8397A /* Extensions */ = { + isa = PBXGroup; + children = ( + CE20C8F51DBAF77D00C8397A /* UIViewController+BRWAdditions.swift */, + C3BD4A5225975C6000D97079 /* View+Extension.swift */, + C32DAE0625925B7E003FC978 /* Color+Extension.swift */, + CE20C8FB1DBB0F3A00C8397A /* UIColor+Extension.swift */, + C316CF48261887FC00E4C09B /* UIApplication+Extension.swift */, + CE20C90D1DBE52B000C8397A /* UIView+BRWAdditions.swift */, + CE20C9161DBE6F2A00C8397A /* UIButton+BRWAdditions.swift */, + CEAA9E901DC0FDFE0066731D /* UIViewPropertyAnimator+BRWAdditions.swift */, + CEAA9E941DC1659F0066731D /* UILabel+BRWAdditions.swift */, + CEAA9E9F1DC2F9F50066731D /* UIFont+BRWAdditions.swift */, + CE92F9F31DED59E80046B516 /* UIView+AnimationAdditions.swift */, + CE92F9F51DEDF6890046B516 /* UIViewControllerContextTransitioning+BRAdditions.swift */, + CEC6AA381DEE10BA00EE5AFD /* UINavigationController+Extension.swift */, + CEC6AA3A1DEE4EB000EE5AFD /* CGRect+Additions.swift */, + CE25BF901DF9ADE700BC67B6 /* UIImage+Utils.swift */, + CE9057171DFF0FA8006BA848 /* String+Additions.swift */, + CEA362691E01150D0061FC0E /* CGContext+Additions.swift */, + CECCE5A41E02408300D99448 /* UIView+FrameChangeBlocking.swift */, + CE6314821E08E5BB00D4AFE0 /* UIView+InitAdditions.swift */, + CE6DCC241E6001E50044257B /* UIControl+Callback.swift */, + CE124CFD1E68F57700DFA146 /* Async.swift */, + CEF3D2DC1E8CBA790070178E /* LAContext+Extensions.swift */, + CEEC70851E94397D00EF788E /* UserDefaults+Additions.swift */, + CEE628291EA98B6D001035AA /* DispatchQueue+Additions.swift */, + CE1D84B51EAEB2F4002A5D7B /* UIBarButtonItem+Additions.swift */, + CEF61B151ED2056D00C7EA6A /* NumberFormatter+Additions.swift */, + CE1280F51EEA855C00D27649 /* Date+Additions.swift */, + CEC4CF081F0C84AB00E5C82E /* UIViewController+Alerts.swift */, + CE47A8DF1F7DA54000FF35BA /* UIScreen+Additions.swift */, + 584E24F42951D2DB005E0E8B /* BundleExtension.swift */, + 584E24FB2951D476005E0E8B /* NSNotificationNameExtension.swift */, + 584E24FD2951D752005E0E8B /* UITableViewExtension.swift */, + ); + name = Extensions; + sourceTree = ""; + }; + CE20C8FF1DBBFFDD00C8397A /* SimpleRedux */ = { + isa = PBXGroup; + children = ( + CE20C8FD1DBB133A00C8397A /* SimpleRedux.swift */, + CE20C9181DBE7B8200C8397A /* ReduxState.swift */, + CE20C9001DBBFFF800C8397A /* Actions.swift */, + ); + name = SimpleRedux; + sourceTree = ""; + }; + CE20C90A1DBC59C500C8397A /* FlowControllers */ = { + isa = PBXGroup; + children = ( + CE0CD1581DBFBCF5004023DA /* ModalPresenter.swift */, + CE25BF921DFDA7A500BC67B6 /* MessageUIPresenter.swift */, + CE20C90B1DBC59E600C8397A /* StartFlowPresenter.swift */, + CEAA9EA51DC3246F0066731D /* StartNavigationDelegate.swift */, + ); + name = FlowControllers; + sourceTree = ""; + }; + CE20C90F1DBE5B5100C8397A /* Views */ = { + isa = PBXGroup; + children = ( + 24BA90C52410129E001E3825 /* FeeSelectorView.swift */, + C39443F8269DDAD3002703E9 /* LitewalletIconView.swift */, + CE6BCF5C1EE9E89A0029849C /* CustomTitleView.swift */, + CED341321EF5A5C00014912A /* InAppAlert.swift */, + CE3645461E7B40280079D0CF /* PinPadCells */, + CECCE5AC1E04AD4100D99448 /* SendViewCells */, + CEBF32F71DDD191300348FC6 /* TransactionCells */, + CEF3E8301DE554F1007C0A9E /* AnimatedIcons */, + CEC6AA471DEFCFCD00EE5AFD /* Controls */, + CE20C9101DBE5B6F00C8397A /* Circle.swift */, + CEF3E82A1DE51612007C0A9E /* GradientCircle.swift */, + CEAA9E961DC18E1F0066731D /* PhraseView.swift */, + CEAA9E9A1DC2B9320066731D /* ConfirmPhrase.swift */, + CEAA9EA71DC3342E0066731D /* PinView.swift */, + CEBF32ED1DDBC30000348FC6 /* ShadowButton.swift */, + CEF3E82C1DE528BF007C0A9E /* AlertView.swift */, + CEF3E82E1DE534C5007C0A9E /* GradientView.swift */, + CEC6AA3C1DEE687000EE5AFD /* RadialGradientView.swift */, + CEE1F5621DF13E5A00D733AD /* ModalHeaderView.swift */, + CE25BF8C1DF3B8A500BC67B6 /* InViewAlert.swift */, + CEA362671E00EE320061FC0E /* CameraGuideView.swift */, + CE6B6B491E54C0CA00B31405 /* SecurityCenterCell.swift */, + CE6DCC261E6108D50044257B /* EnterPhraseCell.swift */, + CEAFC8601E5D5B0500E4FD06 /* SegmentedButton.swift */, + CE6DCC2F1E6666470044257B /* NonScrollingCollectionView.swift */, + CE124CFF1E69170900DFA146 /* SyncingView.swift */, + CEEC70801E90C04700EF788E /* SeparatorCell.swift */, + CEEC70891E945E3B00EF788E /* UnEditableTextView.swift */, + CEEC708D1E954AAB00EF788E /* AboutCell.swift */, + CEEC70911E95DA4400EF788E /* GradientSwitch.swift */, + CE83DE291E9EB7F600D07636 /* SendAmountCell.swift */, + CEE20C2C1EA288FA0086F724 /* UpdatingLabel.swift */, + CEE20C2E1EA3E5820086F724 /* BlinkingView.swift */, + CE5E6C931EB7964900A476DB /* WalletDisabledView.swift */, + CE8F0AE21EB91BB500AA7642 /* SearchHeaderView.swift */, + CE4C1CC51ED65D830063E184 /* DrawableCircle.swift */, + CEBF292D1EF99E55005C330A /* LightWeightAlert.swift */, + 2494037C23AE0C7100369261 /* SyncProgressHeaderView.swift */, + C36DBF5E28F18D2C00FBCB24 /* LocalWebView.swift */, + C36DBF6028F1988900FBCB24 /* LocalWebViewModel.swift */, + ); + name = Views; + sourceTree = ""; + }; + CE2990171EFD6DAF0093A0F2 /* Strings */ = { + isa = PBXGroup; + children = ( + CEE20C371EA5B4680086F724 /* Strings.swift */, + CE29901C1EFD6DE50093A0F2 /* Localizable.strings */, + ); + name = Strings; + sourceTree = ""; + }; + CE3645461E7B40280079D0CF /* PinPadCells */ = { + isa = PBXGroup; + children = ( + CE36454B1E7B42850079D0CF /* PinPadCells.swift */, + ); + name = PinPadCells; + sourceTree = ""; + }; + CE6D0E5A1E14BF8400137DF1 /* Models */ = { + isa = PBXGroup; + children = ( + CE20C8FF1DBBFFDD00C8397A /* SimpleRedux */, + CE6D0E5B1E14BFA600137DF1 /* KeyboardNotificationInfo.swift */, + CEE65DEF1E39056F0002994D /* Rate.swift */, + 24016D8F23F913C1006A6791 /* LWAnalytics.swift */, + CEEC70821E90C07C00EF788E /* Setting.swift */, + C339752027001BEC0071FED6 /* EmailValidation.swift */, + C3019EE22B8FEFED00FAF648 /* AssociatedObject.swift */, + CEF61B131ED0D10000C7EA6A /* Types.swift */, + CE03EC731EF256AC0038E3A8 /* SimpleUTXO.swift */, + 24D91D0D2166A5480077A619 /* TestnetData.swift */, + 24B8FAC3216128A000A155B1 /* PartnerData.swift */, + 24B8FADE2163C4D400A155B1 /* Currency.swift */, + 24313C732381E73200A83F69 /* TransactionManager.swift */, + 24470E4623A6B6E900ADDA27 /* MockSeeds.swift */, + 584E24F22951C119005E0E8B /* Localization.swift */, + ); + name = Models; + sourceTree = ""; + }; + CE6D0F951DE8B6B600BD4BCF /* ViewControllerTransitions */ = { + isa = PBXGroup; + children = ( + CE6D0F961DE8B73A00BD4BCF /* ModalTransitionDelegate.swift */, + CE6D0F981DE8B75900BD4BCF /* DismissModalAnimator.swift */, + CE92F9EF1DED0C790046B516 /* PresentModalAnimator.swift */, + CE5F21D81E4A922700C47B8E /* DismissLoginAnimator.swift */, + CE5F21DA1E4A93A500C47B8E /* LoginTransitionDelegate.swift */, + CEE0EF511EBD14B60018DB36 /* PinTransitioningDelegate.swift */, + 2494037723AD53B900369261 /* ChildViewTransitioningDelegate.swift */, + ); + name = ViewControllerTransitions; + sourceTree = ""; + }; + CE760ED71E55F9E000EFAC2B /* SecurityCenter */ = { + isa = PBXGroup; + children = ( + CE760EDA1E561DF900EFAC2B /* SecurityCenterViewController.swift */, + CE760EDB1E561DF900EFAC2B /* UpdatePinViewController.swift */, + ); + name = SecurityCenter; + sourceTree = ""; + }; + CEAA9E9C1DC2F8270066731D /* Fonts */ = { + isa = PBXGroup; + children = ( + 24D5F22622599C0A00225462 /* BarlowSemiCondensed-Bold.ttf */, + 24D5F22522599C0900225462 /* BarlowSemiCondensed-Italic.ttf */, + 24D5F22D22599C0A00225462 /* BarlowSemiCondensed-Light.ttf */, + 24D5F23022599C0B00225462 /* BarlowSemiCondensed-Medium.ttf */, + 24D5F23222599C0B00225462 /* BarlowSemiCondensed-Regular.ttf */, + 24D5F23422599C0B00225462 /* BarlowSemiCondensed-SemiBold.ttf */, + ); + name = Fonts; + sourceTree = ""; + }; + CEB909F81E5FF20A001804DC /* Recover */ = { + isa = PBXGroup; + children = ( + CEB909F41E5FE63D001804DC /* EnterPhraseViewController.swift */, + CEB909F61E5FE654001804DC /* EnterPhraseCollectionViewController.swift */, + CEB909F91E5FF242001804DC /* RecoverWalletIntroViewController.swift */, + ); + name = Recover; + sourceTree = ""; + }; + CEBF32F71DDD191300348FC6 /* TransactionCells */ = { + isa = PBXGroup; + children = ( + 24313C8523821B8C00A83F69 /* PromptTableViewCell.swift */, + C39A71462608CB4300E7B640 /* EmptyTableViewCell.swift */, + ); + name = TransactionCells; + sourceTree = ""; + }; + CEBF33021DDE177F00348FC6 /* ViewModels */ = { + isa = PBXGroup; + children = ( + C3B7C3B8255EABBF00E98A64 /* SupportSafariViewModel.swift */, + CEBF33031DDE17A600348FC6 /* Transaction.swift */, + CE27F9581E2C8EA300F7F7F2 /* Amount.swift */, + CE124CF71E67A8E500DFA146 /* TransactionDirection.swift */, + ); + name = ViewModels; + sourceTree = ""; + }; + CEC6AA3E1DEFC85700EE5AFD /* RootModals */ = { + isa = PBXGroup; + children = ( + CEC6AA431DEFCDE900EE5AFD /* ModalViewController.swift */, + CEC6AA3F1DEFC87300EE5AFD /* SendViewController.swift */, + CEC6AA411DEFC88F00EE5AFD /* ReceiveViewController.swift */, + CEC6AA451DEFCE9200EE5AFD /* MenuViewController.swift */, + CEC6AA4C1DF0741100EE5AFD /* ModalDisplayable.swift */, + ); + name = RootModals; + sourceTree = ""; + }; + CEC6AA471DEFCFCD00EE5AFD /* Controls */ = { + isa = PBXGroup; + children = ( + CEC6AA481DEFD00100EE5AFD /* MenuButton.swift */, + CEC6AA4A1DEFD24C00EE5AFD /* MenuButtonType.swift */, + ); + name = Controls; + sourceTree = ""; + }; + CECCE5AC1E04AD4100D99448 /* SendViewCells */ = { + isa = PBXGroup; + children = ( + CECCE5B11E04B00D00D99448 /* SendCell.swift */, + CECCE5AD1E04AD6300D99448 /* AddressCell.swift */, + CECCE5AF1E04AD7600D99448 /* DescriptionSendCell.swift */, + ); + name = SendViewCells; + sourceTree = ""; + }; + CEE20C321EA5B2EC0086F724 /* Constants */ = { + isa = PBXGroup; + children = ( + CEE20C351EA5B4620086F724 /* Constants+Events.swift */, + CEBF292F1EF9D76F005C330A /* Environment.swift */, + CEE20C331EA5B4550086F724 /* ArticleIds.swift */, + CE3D4C581EF743EF0016B1C8 /* Functions.swift */, + C3F8F13D2C04C3A7006C3211 /* MoonpayHelper.swift */, + ); + name = Constants; + sourceTree = ""; + }; + CEEC70841E90CCA600EF788E /* Settings */ = { + isa = PBXGroup; + children = ( + CEEC707E1E8D6B4100EF788E /* SettingsViewController.swift */, + ); + name = Settings; + sourceTree = ""; + }; + CEF3E8301DE554F1007C0A9E /* AnimatedIcons */ = { + isa = PBXGroup; + children = ( + CEF3E8311DE55540007C0A9E /* CheckView.swift */, + CEF3E8331DE57166007C0A9E /* AnimatableIcon.swift */, + ); + name = AnimatedIcons; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + 759DA0D71DAC8668008CC49B /* submodules */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-c 'git submodule init && git submodule update && git -C Modules/loafwallet-core submodule init && git -C Modules/loafwallet-core submodule update'"; + buildConfigurationList = 759DA0DA1DAC8668008CC49B /* Build configuration list for PBXLegacyTarget "submodules" */; + buildPhases = ( + ); + buildToolPath = /bin/sh; + buildWorkingDirectory = ""; + dependencies = ( + ); + name = submodules; + passBuildSettingsInEnvironment = 1; + productName = submodules; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + 2465873523A5AAD000A32E9E /* litewalletTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2465873D23A5AAD100A32E9E /* Build configuration list for PBXNativeTarget "litewalletTests" */; + buildPhases = ( + 2465873223A5AAD000A32E9E /* Sources */, + 2465873323A5AAD000A32E9E /* Frameworks */, + 2465873423A5AAD000A32E9E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2465873C23A5AAD100A32E9E /* PBXTargetDependency */, + ); + name = litewalletTests; + productName = litewalletTests; + productReference = 2465873623A5AAD000A32E9E /* litewalletTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 755CD9C31DAA18420075898E /* unbound */ = { + isa = PBXNativeTarget; + buildConfigurationList = 755CD9CA1DAA18420075898E /* Build configuration list for PBXNativeTarget "unbound" */; + buildPhases = ( + 755CD9C01DAA18420075898E /* Sources */, + 755CD9C11DAA18420075898E /* Frameworks */, + 755CD9C21DAA18420075898E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 759DA0DC1DAC86B5008CC49B /* PBXTargetDependency */, + ); + name = unbound; + productName = unbound; + productReference = 755CD9C41DAA18420075898E /* libunbound.a */; + productType = "com.apple.product-type.library.static"; + }; + 755CD9D01DAA197C0075898E /* BRCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 755CD9D71DAA197D0075898E /* Build configuration list for PBXNativeTarget "BRCore" */; + buildPhases = ( + 755CD9CD1DAA197C0075898E /* Sources */, + 755CD9CE1DAA197C0075898E /* Frameworks */, + 755CD9CF1DAA197C0075898E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 759DA0DE1DAC86BC008CC49B /* PBXTargetDependency */, + ); + name = BRCore; + productName = BRCore; + productReference = 755CD9D11DAA197C0075898E /* libBRCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 75A2A78F1DA5934300A983D8 /* litewallet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75A2A7E31DA5934400A983D8 /* Build configuration list for PBXNativeTarget "litewallet" */; + buildPhases = ( + 2430679A238F538C00EBEA99 /* Update Localizable using BartyCrouch */, + 583FE8702927ED5A009A6384 /* Run SwiftFormat */, + 58A9FE4829191E4700B75825 /* Check for unused code */, + 75A2A78C1DA5934300A983D8 /* Sources */, + 75A2A78D1DA5934300A983D8 /* Frameworks */, + 75A2A78E1DA5934300A983D8 /* Resources */, + 75A2A8031DA5935F00A983D8 /* Embed App Extensions */, + 22A9A9831DF63288000F0016 /* Embed Frameworks */, + C3A3FFB526FE46E8000FE955 /* Mark Dev Notes */, + 58A9FE4C291BC37400B75825 /* Count number of swift lines */, + ); + buildRules = ( + ); + dependencies = ( + 759DA0BD1DAC369C008CC49B /* PBXTargetDependency */, + 75A2A8131DA5936F00A983D8 /* PBXTargetDependency */, + ); + name = litewallet; + packageProductDependencies = ( + C35C121F293D464A0009022D /* FirebaseAnalytics */, + C35C1221293D464A0009022D /* FirebaseAuth */, + C35C1223293D464A0009022D /* FirebaseCrashlytics */, + C35C1229293D48340009022D /* KeychainAccess */, + C3423C172B781C6B0051BD6D /* PushNotifications */, + ); + productName = breadwallet; + productReference = 75A2A7901DA5934300A983D8 /* Litewallet.app */; + productType = "com.apple.product-type.application"; + }; + 75A2A8071DA5936F00A983D8 /* TodayExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75A2A8151DA5936F00A983D8 /* Build configuration list for PBXNativeTarget "TodayExtension" */; + buildPhases = ( + 75A2A8041DA5936F00A983D8 /* Sources */, + 75A2A8051DA5936F00A983D8 /* Frameworks */, + 75A2A8061DA5936F00A983D8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TodayExtension; + productName = TodayExtension; + productReference = 75A2A8081DA5936F00A983D8 /* TodayExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 75C735AE1DAA1C9F00251ECF /* nettle */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75C735B51DAA1C9F00251ECF /* Build configuration list for PBXNativeTarget "nettle" */; + buildPhases = ( + 75C735AB1DAA1C9F00251ECF /* Sources */, + 75C735AC1DAA1C9F00251ECF /* Frameworks */, + 75C735AD1DAA1C9F00251ECF /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 759DA0E01DAC86C3008CC49B /* PBXTargetDependency */, + ); + name = nettle; + productName = nettle; + productReference = 75C735AF1DAA1C9F00251ECF /* libnettle.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 75A2A7881DA5934300A983D8 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = ""; + KnownAssetTags = ( + "initial-resources", + speakTag, + ); + LastSwiftUpdateCheck = 1130; + LastUpgradeCheck = 1340; + ORGANIZATIONNAME = "Litecoin Foundation"; + TargetAttributes = { + 2465873523A5AAD000A32E9E = { + CreatedOnToolsVersion = 11.3; + TestTargetID = 75A2A78F1DA5934300A983D8; + }; + 755CD9C31DAA18420075898E = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + }; + 755CD9D01DAA197C0075898E = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + }; + 759DA0D71DAC8668008CC49B = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + }; + 75A2A78F1DA5934300A983D8 = { + CreatedOnToolsVersion = 8.0; + LastSwiftMigration = 0900; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + com.apple.BackgroundModes = { + enabled = 1; + }; + com.apple.DataProtection = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + 75A2A8071DA5936F00A983D8 = { + CreatedOnToolsVersion = 8.0; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + }; + }; + 75C735AE1DAA1C9F00251ECF = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 75A2A78B1DA5934300A983D8 /* Build configuration list for PBXProject "litewallet" */; + compatibilityVersion = "Xcode 10.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + fr, + es, + ja, + "zh-Hans", + de, + ru, + pt, + ko, + "zh-Hant", + id, + Base, + tr, + uk, + ); + mainGroup = 75A2A7871DA5934300A983D8; + packageReferences = ( + C35C121E293D464A0009022D /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + C35C1228293D48330009022D /* XCRemoteSwiftPackageReference "KeychainAccess" */, + C3423C162B7816EA0051BD6D /* XCRemoteSwiftPackageReference "push-notifications-swift" */, + ); + productRefGroup = 75A2A7911DA5934300A983D8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 75A2A78F1DA5934300A983D8 /* litewallet */, + 2465873523A5AAD000A32E9E /* litewalletTests */, + 75A2A8071DA5936F00A983D8 /* TodayExtension */, + 755CD9C31DAA18420075898E /* unbound */, + 755CD9D01DAA197C0075898E /* BRCore */, + 75C735AE1DAA1C9F00251ECF /* nettle */, + 759DA0D71DAC8668008CC49B /* submodules */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2465873423A5AAD000A32E9E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A78E1DA5934300A983D8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C3423C492B796D820051BD6D /* Ko.mp3 in Resources */, + 75A2A79E1DA5934300A983D8 /* LaunchScreen.storyboard in Resources */, + C33685092BECE8B10069CBC7 /* PrivacyInfo.xcprivacy in Resources */, + C3423C3F2B796D820051BD6D /* Pt.mp3 in Resources */, + 24D5F23822599C0B00225462 /* BarlowSemiCondensed-Italic.ttf in Resources */, + 24D5F25922599C0B00225462 /* BarlowSemiCondensed-Medium.ttf in Resources */, + 24313C9B23824F5800A83F69 /* Transactions.storyboard in Resources */, + C3423C412B796D820051BD6D /* En.mp3 in Resources */, + 222319B21F279B3C00008F20 /* POSTBouncer.html in Resources */, + C7FD407F2C48FAF60010C0E6 /* partner-keys.plist in Resources */, + 24670EAE2368EDE7006093E0 /* LFColorPalette.xcassets in Resources */, + 24313CA523824F5800A83F69 /* Buy.storyboard in Resources */, + 24D5F23B22599C0B00225462 /* BarlowSemiCondensed-Bold.ttf in Resources */, + 24AF00FE221B331D00FF636F /* WarningConfirmation.storyboard in Resources */, + C3423C4B2B796D820051BD6D /* Ru.mp3 in Resources */, + 24313C9D23824F5800A83F69 /* Alerts.storyboard in Resources */, + 24313CA123824F5800A83F69 /* Receive.storyboard in Resources */, + 24D5F26522599C0B00225462 /* BarlowSemiCondensed-SemiBold.ttf in Resources */, + C3423C482B796D820051BD6D /* Es.mp3 in Resources */, + C3423C4A2B796D820051BD6D /* It.mp3 in Resources */, + CE5E6C9A1EB9135000A476DB /* Icon.xcassets in Resources */, + C3423C452B796D820051BD6D /* äø­åœ‹äŗŗ.mp3 in Resources */, + 24D5F25022599C0B00225462 /* BarlowSemiCondensed-Light.ttf in Resources */, + C3423C472B796D820051BD6D /* Tr.mp3 in Resources */, + C3F8F1442C04F6BE006C3211 /* Dakar, Senegal.gpx in Resources */, + 2494037F23AE0C7100369261 /* SyncProgressHeaderView.xib in Resources */, + C3188E2726431E750008ADD1 /* Debug-GoogleService-Info.plist in Resources */, + C3423C432B796D820051BD6D /* Uk.mp3 in Resources */, + CE29901A1EFD6DE50093A0F2 /* Localizable.strings in Resources */, + C3423C3E2B796D820051BD6D /* ę—„ęœ¬čŖž.mp3 in Resources */, + 24313C9F23824F5800A83F69 /* Animate.storyboard in Resources */, + C3423C442B796D820051BD6D /* Fr.mp3 in Resources */, + C3423C462B796D820051BD6D /* Id.mp3 in Resources */, + 24313CA323824F5800A83F69 /* Send.storyboard in Resources */, + 2485F7D023728C19005962F1 /* RELEASE_NOTES.md in Resources */, + 24B523AD238A53DC0030594D /* BIP39Words.plist in Resources */, + 24313CAA23824F9800A83F69 /* Main.storyboard in Resources */, + 24D5F25F22599C0B00225462 /* BarlowSemiCondensed-Regular.ttf in Resources */, + C3423C402B796D820051BD6D /* De.mp3 in Resources */, + 24DFCE6823B89CDE001F17F8 /* Settings.storyboard in Resources */, + 24393B5C23C259400075218D /* Phrase.storyboard in Resources */, + C3F8F1462C05269A006C3211 /* GoogleService-Info.plist in Resources */, + C3423C422B796D820051BD6D /* coinflip.aiff in Resources */, + 75A2A79B1DA5934300A983D8 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A8061DA5936F00A983D8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE916E2A1EDA7E4400D641D6 /* Media.xcassets in Resources */, + 75A2A8101DA5936F00A983D8 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 2430679A238F538C00EBEA99 /* Update Localizable using BartyCrouch */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 12; + files = ( + ); + inputPaths = ( + ); + name = "Update Localizable using BartyCrouch"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "## This only notates strings that have yet to be localized. The Base Localizable file is wnere the change needs to be changed.\n## Routing the extractLocString errors to null due to swift tools bug : kcw-grunt 17 JAN 23\nif which bartycrouch > /dev/null; then\n bartycrouch update -x > /dev/null 2>&1;\n bartycrouch lint -x\nelse\n echo \"warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch\"\nfi\n"; + }; + 583FE8702927ED5A009A6384 /* Run SwiftFormat */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftFormat"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd BuildTools\nSDKROOT=(xcrun --sdk macosx --show-sdk-path)\n#swift package update #Uncomment this line temporarily to update the version used to the latest matching your BuildTools/Package.swift file\nswift run -c release swiftformat \"$SRCROOT\"\n"; + }; + 58A9FE4829191E4700B75825 /* Check for unused code */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Check for unused code"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "file=\"unused.rb\"\nif [ -f \"$file\" ]\nthen\necho \"$file found.\"\nruby unused.rb xcode\nelse\necho \"unused.rb doesn't exist\"\nfi\n"; + }; + 58A9FE4C291BC37400B75825 /* Count number of swift lines */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Count number of swift lines"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\necho \"Total number of swift lines\\n------------------\" && find . -name '*.swift' -print0 | xargs -0 wc -l | grep \"total\"\n"; + }; + C3A3FFB526FE46E8000FE955 /* Mark Dev Notes */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Mark Dev Notes"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# http://www.benzado.com/blog/post/329/make-xcode-nag-you-about-unfinished-todos\necho \"make-xcode-nag-you-about-unfinished-todos for swift files only\"\nKEYWORDS=\"DEV:|TODO:|FIXME:|\\?\\?\\?:|\\!\\!\\!:\"\nfind \"${SRCROOT}\" \\( -name \"*.swift\" \\) -print0 | \\\nxargs -0 egrep --with-filename --line-number --only-matching \"($KEYWORDS).*\\$\" | \\\nperl -p -e \"s/($KEYWORDS)/ warning: \\$1/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2465873223A5AAD000A32E9E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 24470E4223A6007200ADDA27 /* WalletInfoTest.swift in Sources */, + 24470E2123A5DA9700ADDA27 /* APIManagerTests.swift in Sources */, + 24470E3423A5F5E600ADDA27 /* PaymentRequestTests.swift in Sources */, + 584E25012951DAAA005E0E8B /* LanguageSelectionTests.swift in Sources */, + 24470E2E23A5F4FF00ADDA27 /* BRCoderTests.swift in Sources */, + 2494037623AD35C000369261 /* BuyWKWebVCTests.swift in Sources */, + 24470E3223A5F5B100ADDA27 /* NSDataExtensionTests.swift in Sources */, + 24470E2C23A5F43B00ADDA27 /* DefaultFiatCurrencyTests.swift in Sources */, + C3EFA9A62651A808005C59B5 /* LockScreenTests.swift in Sources */, + 24470E4023A6004800ADDA27 /* WalletCreationTests.swift in Sources */, + 24470E3823A5FEF200ADDA27 /* SpendingLimitTests.swift in Sources */, + 24470E3E23A6000900ADDA27 /* WalletAuthenticationTests.swift in Sources */, + 24470E2A23A5F33000ADDA27 /* BRReplicatedKVStoreTests.swift in Sources */, + C31891C326733FD400ECE25C /* TabBarViewControllerTests.swift in Sources */, + 24470E3C23A5FFD700ADDA27 /* TouchIdEnabledTests.swift in Sources */, + 24470E3A23A5FF5700ADDA27 /* TestHelpers.swift in Sources */, + 24470E3623A5FDE800ADDA27 /* PhraseTests.swift in Sources */, + 24470E4523A608A700ADDA27 /* AmountTests.swift in Sources */, + C3B7C3EE255FF59200E98A64 /* ConstantsTests.swift in Sources */, + 24470E2323A5DB7D00ADDA27 /* WalletManagerTests.swift in Sources */, + C3F8F13C2C049A4A006C3211 /* LocaleTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9C01DAA18420075898E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 754868DC1DAB593300732D70 /* localzone.c in Sources */, + 754869181DAB7F8000732D70 /* strlcpy.c in Sources */, + 7548690A1DAB7C3000732D70 /* tube.c in Sources */, + 7524387C1DAAC61700844BEC /* log.c in Sources */, + 754868CF1DAB57A200732D70 /* msgencode.c in Sources */, + 754868D01DAB57BC00732D70 /* iter_fwd.c in Sources */, + 7524387D1DAAC63A00844BEC /* fptr_wlist.c in Sources */, + 7524387F1DAAC67F00844BEC /* val_anchor.c in Sources */, + 752438871DAAC87E00844BEC /* iter_delegpt.c in Sources */, + 754868D91DAB58E000732D70 /* iter_donotq.c in Sources */, + 754869191DAB7F9D00732D70 /* reallocarray.c in Sources */, + 752438791DAAC5A600844BEC /* rtt.c in Sources */, + 754869011DAB7B0000732D70 /* wire2str.c in Sources */, + 754868D71DAB58A100732D70 /* iterator.c in Sources */, + 754869161DAB7F5C00732D70 /* strsep.c in Sources */, + 7548690B1DAB7C7200732D70 /* random.c in Sources */, + 75C735AA1DAA1B9C00251ECF /* libunbound.c in Sources */, + 754868FF1DAB7AB200732D70 /* iter_scrub.c in Sources */, + 754869051DAB7B7F00732D70 /* str2wire.c in Sources */, + 752438761DAAC52700844BEC /* config_file.c in Sources */, + 752438861DAAC86200844BEC /* dns.c in Sources */, + 752438781DAAC58E00844BEC /* msgreply.c in Sources */, + 754868F81DAB5EB500732D70 /* listen_dnsport.c in Sources */, + 754868F51DAB5E3F00732D70 /* val_nsec.c in Sources */, + 752438841DAAC76500844BEC /* netevent.c in Sources */, + 754869031DAB7B3F00732D70 /* sbuffer.c in Sources */, + 754868D21DAB580B00732D70 /* msgparse.c in Sources */, + 754868FE1DAB601A00732D70 /* lruhash.c in Sources */, + 752438811DAAC6C100844BEC /* autotrust.c in Sources */, + 752438881DAAC8B000844BEC /* val_secalgo.c in Sources */, + 754869071DAB7BB500732D70 /* rrdef.c in Sources */, + 754868D11DAB57E900732D70 /* packed_rrset.c in Sources */, + 754868DF1DAB599700732D70 /* modstack.c in Sources */, + 754869171DAB7F7B00732D70 /* strlcat.c in Sources */, + 754868D51DAB586900732D70 /* infra.c in Sources */, + 7548690C1DAB7CB600732D70 /* validator.c in Sources */, + 754868FC1DAB5FD600732D70 /* iter_resptype.c in Sources */, + 7548691A1DAB7FD600732D70 /* configparser.c in Sources */, + 754868FD1DAB5FF700732D70 /* rrset.c in Sources */, + 752438851DAAC7E500844BEC /* dns64.c in Sources */, + 752438821DAAC6E200844BEC /* val_sigcrypt.c in Sources */, + 754868F71DAB5E8E00732D70 /* outside_network.c in Sources */, + 754868FB1DAB5FAD00732D70 /* regional.c in Sources */, + 754869141DAB7E4600732D70 /* ub_event.c in Sources */, + 7524387E1DAAC65C00844BEC /* dnstree.c in Sources */, + 7524387A1DAAC5D100844BEC /* context.c in Sources */, + 754869021DAB7B1D00732D70 /* parseutil.c in Sources */, + 754868D61DAB588500732D70 /* configlexer.c in Sources */, + 7524387B1DAAC5F200844BEC /* dname.c in Sources */, + 754868D31DAB582C00732D70 /* lookup3.c in Sources */, + 759DA0A11DAB838D008CC49B /* view.c in Sources */, + 754868DE1DAB597B00732D70 /* mini_event.c in Sources */, + 752438801DAAC6A200844BEC /* as112.c in Sources */, + 754868D41DAB584E00732D70 /* iter_hints.c in Sources */, + 752438831DAAC74300844BEC /* libworker.c in Sources */, + 752438771DAAC55C00844BEC /* net_help.c in Sources */, + 754869001DAB7AD100732D70 /* slabhash.c in Sources */, + 754868DB1DAB591A00732D70 /* val_kentry.c in Sources */, + 754868F61DAB5E6200732D70 /* outbound_list.c in Sources */, + 754869151DAB7E8B00732D70 /* val_utils.c in Sources */, + 754868DD1DAB594F00732D70 /* mesh.c in Sources */, + 754868DA1DAB58F900732D70 /* val_kcache.c in Sources */, + 7548690D1DAB7CD600732D70 /* val_neg.c in Sources */, + 754869041DAB7B6200732D70 /* keyraw.c in Sources */, + 754868F91DAB5EDC00732D70 /* iter_priv.c in Sources */, + 754869081DAB7BD900732D70 /* module.c in Sources */, + 752438751DAAC50800844BEC /* alloc.c in Sources */, + 754868D81DAB58C000732D70 /* iter_utils.c in Sources */, + 754869061DAB7B9900732D70 /* parse.c in Sources */, + 754868F41DAB5E1100732D70 /* val_nsec3.c in Sources */, + 754869091DAB7C1400732D70 /* timehist.c in Sources */, + 754868FA1DAB5EFE00732D70 /* rbtree.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 755CD9CD1DAA197C0075898E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BBAEC921F80262A0047DEA8 /* BRWallet.c in Sources */, + 1BBAEC911F8026250047DEA8 /* BRBIP32Sequence.c in Sources */, + 1BBAEC901F80261D0047DEA8 /* BRMerkleBlock.c in Sources */, + 1BBAEC8F1F8026130047DEA8 /* BRSet.c in Sources */, + 1BBAEC8E1F8026090047DEA8 /* BRCrypto.c in Sources */, + 1BBAEC8D1F8026030047DEA8 /* BRPaymentProtocol.c in Sources */, + 1BA9FE3D216F68A700BB2DE8 /* BRBech32.c in Sources */, + 1BBAEC8C1F8025FC0047DEA8 /* BRPeerManager.c in Sources */, + 1BBAEC8B1F8025F60047DEA8 /* BRKey.c in Sources */, + 1BBAEC8A1F8025EF0047DEA8 /* BRBIP39Mnemonic.c in Sources */, + 1BBAEC891F8025E60047DEA8 /* BRBloomFilter.c in Sources */, + 1BBAEC881F8025DF0047DEA8 /* BRBase58.c in Sources */, + 1BBAEC871F8025D80047DEA8 /* BRAddress.c in Sources */, + 1BBAEC861F8025D20047DEA8 /* BRBIP38Key.c in Sources */, + 1BBAEC851F8025C90047DEA8 /* BRPeer.c in Sources */, + 1BBAEC841F8025C10047DEA8 /* BRTransaction.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A78C1DA5934300A983D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CEBF29301EF9D76F005C330A /* Environment.swift in Sources */, + C39A71472608CB4300E7B640 /* EmptyTableViewCell.swift in Sources */, + CEC6AA4D1DF0741100EE5AFD /* ModalDisplayable.swift in Sources */, + CEE0EF521EBD14B60018DB36 /* PinTransitioningDelegate.swift in Sources */, + CE45C1FD1E7650F5002C3847 /* KVStoreCoordinator.swift in Sources */, + 754AE0BC1DFE8A46007FD001 /* BRCore.swift in Sources */, + 24306797238F3DF900EBEA99 /* BartyCrouch.swift in Sources */, + CEC6AA3B1DEE4EB000EE5AFD /* CGRect+Additions.swift in Sources */, + C3423C2A2B7905330051BD6D /* SafariServices+Extension.swift in Sources */, + CE45C1FB1E74F89C002C3847 /* WalletInfo.swift in Sources */, + C3E751D12AF68C84005571CA /* BRMasterKeyExtension.swift in Sources */, + C3FF4D5F28AC5A5800713139 /* SendAddressCellView.swift in Sources */, + C36375A328BD38A500CFB3D8 /* SendButtonHostingController.swift in Sources */, + CEE659E71F65A936001FF29D /* RetryTimer.swift in Sources */, + 248BFE2623AB302200CE1A71 /* BuyWKWebViewController.swift in Sources */, + CE90571A1DFF18B2006BA848 /* ScanViewController.swift in Sources */, + CE20C8F61DBAF77D00C8397A /* UIViewController+BRWAdditions.swift in Sources */, + CE74F58D1E3BA85600ED5FA9 /* ExchangeUpdater.swift in Sources */, + 24313C7B23820BC200A83F69 /* SendLTCViewController.swift in Sources */, + CE6DCC251E6001E50044257B /* UIControl+Callback.swift in Sources */, + C30029E225D0185500F08C2B /* StandardDividerView.swift in Sources */, + 223DB2191DF691260076A151 /* BRSocketHelpers.c in Sources */, + CEF3E82D1DE528BF007C0A9E /* AlertView.swift in Sources */, + C3543A29264AFE720005D17A /* LocaleChangeViewModel.swift in Sources */, + CEF3E82B1DE51612007C0A9E /* GradientCircle.swift in Sources */, + C3423C262B7904E30051BD6D /* AnnounceUpdatesView.swift in Sources */, + CE124CFE1E68F57700DFA146 /* Async.swift in Sources */, + C3423C1E2B7904070051BD6D /* StartHostingController.swift in Sources */, + C316CF49261887FC00E4C09B /* UIApplication+Extension.swift in Sources */, + CE8644251F2C160200033129 /* ConfirmationViewController.swift in Sources */, + CEE1F5631DF13E5A00D733AD /* ModalHeaderView.swift in Sources */, + CE5F21DB1E4A93A500C47B8E /* LoginTransitionDelegate.swift in Sources */, + 584E24FA2951D43A005E0E8B /* LanguageSelectionViewModel.swift in Sources */, + C3E751CB2AF68B47005571CA /* BRPeerManager.swift in Sources */, + CEE659E91F664C73001FF29D /* WelcomeViewController.swift in Sources */, + 24313C8723821B8C00A83F69 /* PromptTableViewCell.swift in Sources */, + 2228734F1E916FC30044BA15 /* BRAPIClient+Wallet.swift in Sources */, + C3423C222B79047D0051BD6D /* StartViewModel.swift in Sources */, + CEAA9EA81DC3342E0066731D /* PinView.swift in Sources */, + CE1D84B61EAEB2F4002A5D7B /* UIBarButtonItem+Additions.swift in Sources */, + CE4B6C1A1E219CA600CF935B /* WalletCoordinator.swift in Sources */, + CE6D0E5C1E14BFA700137DF1 /* KeyboardNotificationInfo.swift in Sources */, + CE20C8F21DBAF71500C8397A /* ApplicationController.swift in Sources */, + C32142EA25C97CD900BECCD0 /* TransactionCellView.swift in Sources */, + 1B3F74231FFB106200CCA50C /* BiometricsSettingsViewController.swift in Sources */, + CEC4CF071F0C48DD00E5C82E /* StartWipeWalletViewController.swift in Sources */, + C3423C242B7904B80051BD6D /* SeedWordView.swift in Sources */, + 7528D2981ECF655500925DBC /* PaymentProtocol.swift in Sources */, + C3543A27264AFE490005D17A /* LocaleChangeView.swift in Sources */, + C36DBF6128F1988900FBCB24 /* LocalWebViewModel.swift in Sources */, + C3423C2C2B7905330051BD6D /* SignupWebView.swift in Sources */, + C3423C202B79046A0051BD6D /* StartView.swift in Sources */, + 24A6DCFC2230BD9000505F44 /* WipeEmptyWalletViewController.swift in Sources */, + CE92F9F61DEDF6890046B516 /* UIViewControllerContextTransitioning+BRAdditions.swift in Sources */, + CEA362681E00EE320061FC0E /* CameraGuideView.swift in Sources */, + C35ABD232574070A002BB9BB /* PartnersView.swift in Sources */, + CE03EC741EF256AC0038E3A8 /* SimpleUTXO.swift in Sources */, + 24016D9023F913C1006A6791 /* LWAnalytics.swift in Sources */, + C3C8973825CD6B9300241FBE /* HostingTransactionCell.swift in Sources */, + CE124CFC1E68932C00DFA146 /* FeeManager.swift in Sources */, + C3B419CB2BFCF14100EBD935 /* BuyHostingController.swift in Sources */, + CEE20C381EA5B4680086F724 /* Strings.swift in Sources */, + 24AF0101221B349100FF636F /* WarningConfirmationViewController.swift in Sources */, + CE25BF8D1DF3B8A500BC67B6 /* InViewAlert.swift in Sources */, + 22A9A9511DF61945000F0016 /* TxMetaData.swift in Sources */, + CE8CD8E11E31976800785E02 /* LoginViewController.swift in Sources */, + CEC6AA391DEE10BA00EE5AFD /* UINavigationController+Extension.swift in Sources */, + 584E24FC2951D476005E0E8B /* NSNotificationNameExtension.swift in Sources */, + CECCE5B01E04AD7600D99448 /* DescriptionSendCell.swift in Sources */, + CE44BA1B1F33BFC500392A1A /* NodeSelectorViewController.swift in Sources */, + CE124D001E69170900DFA146 /* SyncingView.swift in Sources */, + 2494037823AD53B900369261 /* ChildViewTransitioningDelegate.swift in Sources */, + CE20C90E1DBE52B000C8397A /* UIView+BRWAdditions.swift in Sources */, + CE6314831E08E5BB00D4AFE0 /* UIView+InitAdditions.swift in Sources */, + CEC6AA401DEFC87300EE5AFD /* SendViewController.swift in Sources */, + CEAA9E8F1DC074410066731D /* StartPaperPhraseViewController.swift in Sources */, + 1B3F74241FFB106200CCA50C /* BiometricsSpendingLimitViewController.swift in Sources */, + CEC6F8451E886723000795B8 /* PaymentRequest.swift in Sources */, + C3FF4D6128AC5AC100713139 /* SendAddressCellViewModel.swift in Sources */, + CE4C1CC81ED88B600063E184 /* URLController.swift in Sources */, + C3DBBE312BFE15AF00B95939 /* BuyTileView.swift in Sources */, + C30029EB25D019BC00F08C2B /* CopyButtonView.swift in Sources */, + 24313C922382433700A83F69 /* LFModalReceiveQRViewController.swift in Sources */, + CE20C9171DBE6F2A00C8397A /* UIButton+BRWAdditions.swift in Sources */, + C3F8F1422C04DEA2006C3211 /* NoBuyTabBarViewController.swift in Sources */, + CEAA9E931DC110E70066731D /* WritePaperPhraseViewController.swift in Sources */, + CE92F9F41DED59E80046B516 /* UIView+AnimationAdditions.swift in Sources */, + 24D5F26F225A5BEA00225462 /* ContainerViewController.swift in Sources */, + CEEC70941E96A24F00EF788E /* DefaultCurrencyViewController.swift in Sources */, + 24B8FAC4216128A000A155B1 /* PartnerData.swift in Sources */, + CEE6282A1EA98B6D001035AA /* DispatchQueue+Additions.swift in Sources */, + CEC6AA3D1DEE687000EE5AFD /* RadialGradientView.swift in Sources */, + 2494038123AF208F00369261 /* PromptModalViewController.swift in Sources */, + CEEC70921E95DA4400EF788E /* GradientSwitch.swift in Sources */, + CE0CD1591DBFBCF5004023DA /* ModalPresenter.swift in Sources */, + CEE20C2F1EA3E5820086F724 /* BlinkingView.swift in Sources */, + CEC6AA441DEFCDE900EE5AFD /* ModalViewController.swift in Sources */, + 24313C8423820C4B00A83F69 /* ReceiveLTCViewController.swift in Sources */, + CEEC70831E90C07C00EF788E /* Setting.swift in Sources */, + CE45C1F91E74B400002C3847 /* ManageWalletViewController.swift in Sources */, + CE92F9F01DED0C790046B516 /* PresentModalAnimator.swift in Sources */, + CEAA9E951DC1659F0066731D /* UILabel+BRWAdditions.swift in Sources */, + C3F8F13E2C04C3A7006C3211 /* MoonpayHelper.swift in Sources */, + CEBF292E1EF99E55005C330A /* LightWeightAlert.swift in Sources */, + CEBF32EE1DDBC30000348FC6 /* ShadowButton.swift in Sources */, + CEB909F71E5FE654001804DC /* EnterPhraseCollectionViewController.swift in Sources */, + CEF3D2DD1E8CBA790070178E /* LAContext+Extensions.swift in Sources */, + C3D4379F2566EA3E00F423E1 /* LWActivityIndicator.swift in Sources */, + CECCE5AE1E04AD6300D99448 /* AddressCell.swift in Sources */, + CE6BCF5D1EE9E89A0029849C /* CustomTitleView.swift in Sources */, + CE83DE2A1E9EB7F600D07636 /* SendAmountCell.swift in Sources */, + CEAFC8611E5D5B0500E4FD06 /* SegmentedButton.swift in Sources */, + 2427342D2381C21800E2D22F /* MainViewController.swift in Sources */, + 7503773D1DF57428005EB8AE /* WalletManager+Auth.swift in Sources */, + CEC4CF091F0C84AB00E5C82E /* UIViewController+Alerts.swift in Sources */, + CE27F9591E2C8EA300F7F7F2 /* Amount.swift in Sources */, + CE1280F61EEA855C00D27649 /* Date+Additions.swift in Sources */, + C350788C27DCB10700A50819 /* TextView+Extension.swift in Sources */, + C3B419CD2BFCF17600EBD935 /* BuyView.swift in Sources */, + CEEC708E1E954AAB00EF788E /* AboutCell.swift in Sources */, + 22A9A9461DF61945000F0016 /* BRAPIClient.swift in Sources */, + 24313C7E23820C1900A83F69 /* TransactionsViewController.swift in Sources */, + CEAA9E9B1DC2B9320066731D /* ConfirmPhrase.swift in Sources */, + 75A2A7941DA5934300A983D8 /* AppDelegate.swift in Sources */, + 24B8FADF2163C4D400A155B1 /* Currency.swift in Sources */, + 222C42501E90492800078EB5 /* BRAPIClient+KV.swift in Sources */, + 2494037E23AE0C7100369261 /* SyncProgressHeaderView.swift in Sources */, + C339752127001BEC0071FED6 /* EmailValidation.swift in Sources */, + CE5E6C941EB7964900A476DB /* WalletDisabledView.swift in Sources */, + CEF3E8341DE57166007C0A9E /* AnimatableIcon.swift in Sources */, + 584E24F52951D2DC005E0E8B /* BundleExtension.swift in Sources */, + CEF61B161ED2056D00C7EA6A /* NumberFormatter+Additions.swift in Sources */, + CEF3E8321DE55540007C0A9E /* CheckView.swift in Sources */, + CECCE5A91E0378FB00D99448 /* PinPadViewController.swift in Sources */, + 584E24F32951C11A005E0E8B /* Localization.swift in Sources */, + C3423C1C2B7903CA0051BD6D /* LaunchView.swift in Sources */, + C32DAE0725925B7E003FC978 /* Color+Extension.swift in Sources */, + C36DBF5F28F18D2C00FBCB24 /* LocalWebView.swift in Sources */, + CEC6AA4B1DEFD24C00EE5AFD /* MenuButtonType.swift in Sources */, + 584E24FE2951D752005E0E8B /* UITableViewExtension.swift in Sources */, + 24313C752381E73200A83F69 /* TransactionManager.swift in Sources */, + CE4CA7BC1EE3649100373F11 /* BRActivityView.swift in Sources */, + CEC6AA421DEFC88F00EE5AFD /* ReceiveViewController.swift in Sources */, + CEE20C2D1EA288FA0086F724 /* UpdatingLabel.swift in Sources */, + CE3D4C591EF743EF0016B1C8 /* Functions.swift in Sources */, + C3423C2B2B7905330051BD6D /* SignupWebViewModel.swift in Sources */, + CEE20C341EA5B4550086F724 /* ArticleIds.swift in Sources */, + CEE65DF01E39056F0002994D /* Rate.swift in Sources */, + CEE20C361EA5B4620086F724 /* Constants+Events.swift in Sources */, + CEC6AA461DEFCE9200EE5AFD /* MenuViewController.swift in Sources */, + CEEC707F1E8D6B4100EF788E /* SettingsViewController.swift in Sources */, + CEEE92F11EBA7CBA00B7AC9C /* RequestAmountViewController.swift in Sources */, + C36375A528BD390C00CFB3D8 /* SendButtonView.swift in Sources */, + C3019EE32B8FEFED00FAF648 /* AssociatedObject.swift in Sources */, + CE8CD8DF1E2E825100785E02 /* VerifyPinViewController.swift in Sources */, + CE916E331EDA800E00D641D6 /* UserDefaultsUpdater.swift in Sources */, + CE20C9111DBE5B6F00C8397A /* Circle.swift in Sources */, + CE20C9071DBC587200C8397A /* StartViewController.swift in Sources */, + 223DB2151DF654940076A151 /* WalletManager.swift in Sources */, + CE124CF81E67A8E500DFA146 /* TransactionDirection.swift in Sources */, + CE8CD8DD1E2D9EF200785E02 /* Sender.swift in Sources */, + CE4DFB2C1E9BE5880014009E /* ReScanViewController.swift in Sources */, + CE8F0AE31EB91BB500AA7642 /* SearchHeaderView.swift in Sources */, + CEAA9E971DC18E1F0066731D /* PhraseView.swift in Sources */, + CEF3E82F1DE534C5007C0A9E /* GradientView.swift in Sources */, + CE6D0F991DE8B75900BD4BCF /* DismissModalAnimator.swift in Sources */, + C39443F9269DDAD3002703E9 /* LitewalletIconView.swift in Sources */, + CE4C1CC61ED65D830063E184 /* DrawableCircle.swift in Sources */, + C3E751CD2AF68B93005571CA /* BRWallet.swift in Sources */, + C3E751D32AF68CD1005571CA /* BRTxOutputExtension.swift in Sources */, + C35ABD332574073F002BB9BB /* PartnersViewModel.swift in Sources */, + CEEC708C1E95461A00EF788E /* AboutViewController.swift in Sources */, + CEF61B141ED0D10000C7EA6A /* Types.swift in Sources */, + CEEC708A1E945E3B00EF788E /* UnEditableTextView.swift in Sources */, + CEAA9E991DC262800066731D /* ConfirmPaperPhraseViewController.swift in Sources */, + 22A9A9591DF61945000F0016 /* Extensions.swift in Sources */, + 24470E4723A6B6E900ADDA27 /* MockSeeds.swift in Sources */, + CEAA9EA61DC3246F0066731D /* StartNavigationDelegate.swift in Sources */, + 22A9A94B1DF61945000F0016 /* BRCoding.swift in Sources */, + CEF3E8361DE60222007C0A9E /* ModalNavigationController.swift in Sources */, + CEB909FA1E5FF242001804DC /* RecoverWalletIntroViewController.swift in Sources */, + CE25BF911DF9ADE700BC67B6 /* UIImage+Utils.swift in Sources */, + CEBF33041DDE17A600348FC6 /* Transaction.swift in Sources */, + CEAA9E911DC0FDFE0066731D /* UIViewPropertyAnimator+BRWAdditions.swift in Sources */, + C3EFA9A12650807B005C59B5 /* LockScreenHeaderView.swift in Sources */, + CEAA9EA01DC2F9F50066731D /* UIFont+BRWAdditions.swift in Sources */, + C32DB42F26488CAA00017D26 /* TabBarViewController.swift in Sources */, + CEC6AA491DEFD00100EE5AFD /* MenuButton.swift in Sources */, + CEF61B121ECF52C700C7EA6A /* AmountViewController.swift in Sources */, + CECCE5B21E04B00D00D99448 /* SendCell.swift in Sources */, + 24B8FAD22162B10200A155B1 /* BuyCenterWebViewController.swift in Sources */, + C3E751C62AF68A8E005571CA /* BRTxInputExtension.swift in Sources */, + CE6DCC301E6666470044257B /* NonScrollingCollectionView.swift in Sources */, + CE20C9011DBBFFF800C8397A /* Actions.swift in Sources */, + CE20C9191DBE7B8200C8397A /* ReduxState.swift in Sources */, + CEEC70811E90C04700EF788E /* SeparatorCell.swift in Sources */, + CE20C8FE1DBB133A00C8397A /* SimpleRedux.swift in Sources */, + 22122B721F0B8996000E9AB9 /* BRAPIClient+Events.swift in Sources */, + CE760EDC1E561DF900EFAC2B /* SecurityCenterViewController.swift in Sources */, + CEEC70861E94397D00EF788E /* UserDefaults+Additions.swift in Sources */, + C3F7BD0325FEC77100694C28 /* TransactionModalView.swift in Sources */, + CE3D4C571EF5D5740016B1C8 /* ReachabilityMonitor.swift in Sources */, + C3423C1A2B79039D0051BD6D /* LaunchCardHostingController.swift in Sources */, + C32142FA25C988C800BECCD0 /* TransactionCellViewModel.swift in Sources */, + C3E751C22AF689BA005571CA /* BRKeyExtension.swift in Sources */, + CE4DFB2E1E9C26DA0014009E /* ShareDataViewController.swift in Sources */, + CE1E5F261EF083A600BD0F72 /* StartImportViewController.swift in Sources */, + CE25BF931DFDA7A600BC67B6 /* MessageUIPresenter.swift in Sources */, + CE20C90C1DBC59E600C8397A /* StartFlowPresenter.swift in Sources */, + CE20C8FC1DBB0F3A00C8397A /* UIColor+Extension.swift in Sources */, + C3B7C3B9255EABBF00E98A64 /* SupportSafariViewModel.swift in Sources */, + CEA3626A1E01150D0061FC0E /* CGContext+Additions.swift in Sources */, + 22A9A9541DF61945000F0016 /* BRReplicatedKVStore.swift in Sources */, + CE6B6B4A1E54C0CB00B31405 /* SecurityCenterCell.swift in Sources */, + CE36454C1E7B42850079D0CF /* PinPadCells.swift in Sources */, + C361F48228B368BC00E9798F /* AddressFieldView.swift in Sources */, + CE5F21D91E4A922700C47B8E /* DismissLoginAnimator.swift in Sources */, + CECCE5A51E02408300D99448 /* UIView+FrameChangeBlocking.swift in Sources */, + CE6DCC271E6108D50044257B /* EnterPhraseCell.swift in Sources */, + C3E751CF2AF68C18005571CA /* BRCalculationExtension.swift in Sources */, + C3EFA9A3265080FF005C59B5 /* LockScreenHeaderViewModel.swift in Sources */, + CE760EDD1E561DF900EFAC2B /* UpdatePinViewController.swift in Sources */, + 584E24F82951D412005E0E8B /* LanguageSelectionViewController.swift in Sources */, + 24BA90C62410129E001E3825 /* FeeSelectorView.swift in Sources */, + CE9057181DFF0FA8006BA848 /* String+Additions.swift in Sources */, + CED341331EF5A5C00014912A /* InAppAlert.swift in Sources */, + C3E751C42AF68A50005571CA /* BRAddressExtension.swift in Sources */, + CE47A8E01F7DA54000FF35BA /* UIScreen+Additions.swift in Sources */, + CEB909F51E5FE63D001804DC /* EnterPhraseViewController.swift in Sources */, + CE6D0F971DE8B73A00BD4BCF /* ModalTransitionDelegate.swift in Sources */, + C3E751C82AF68AEB005571CA /* UnsafeMutablePointerExtension.swift in Sources */, + C3BD4A5325975C6000D97079 /* View+Extension.swift in Sources */, + C3E5A9052BFDEEF1002FBE04 /* BuyViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75A2A8041DA5936F00A983D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE916E311EDA7F1400D641D6 /* UIImage+Utils.m in Sources */, + CE916E2E1EDA7ED000D641D6 /* BRBubbleView.m in Sources */, + CE916E371EDA855800D641D6 /* BRTodayViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C735AB1DAA1C9F00251ECF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 754868ED1DAB5CF400732D70 /* sha1.c in Sources */, + 759DA0A71DAC0DD9008CC49B /* ecc-hash.c in Sources */, + 754868E41DAB5B6400732D70 /* rsa-sha1-verify.c in Sources */, + 759DA0BB1DAC2A4F008CC49B /* ecc-256.c in Sources */, + 759DA0B51DAC16C6008CC49B /* sec-tabselect.c in Sources */, + 759DA0A31DAC0D6B008CC49B /* dsa.c in Sources */, + 759DA0A41DAC0D84008CC49B /* ecc-point.c in Sources */, + 754868F01DAB5D6F00732D70 /* sha256.c in Sources */, + 759DA0B81DAC1723008CC49B /* sec-add-1.c in Sources */, + 759DA0B31DAC1654008CC49B /* ecc-mul-g.c in Sources */, + 759DA0A51DAC0D9F008CC49B /* ecdsa-verify.c in Sources */, + 754868E51DAB5B9200732D70 /* rsa-verify.c in Sources */, + 751734B91DAC941E00193C87 /* sec-sub-1.c in Sources */, + 754868F31DAB5DEB00732D70 /* sha512-compress.c in Sources */, + 759DA0AE1DAC15A0008CC49B /* ecc-add-jja.c in Sources */, + 754868F11DAB5D9900732D70 /* sha256-compress.c in Sources */, + 759DA0AB1DAC0E4D008CC49B /* ecc-mul-a.c in Sources */, + 754869131DAB7DC200732D70 /* aes-set-key-internal.c in Sources */, + 754868E91DAB5C3E00732D70 /* rsa-sha256-verify.c in Sources */, + 7548690F1DAB7D1800732D70 /* aes-encrypt.c in Sources */, + 754869121DAB7D9C00732D70 /* aes256-set-encrypt-key.c in Sources */, + 759DA0AC1DAC1572008CC49B /* cnd-copy.c in Sources */, + 759DA0A91DAC0E13008CC49B /* ecc-size.c in Sources */, + 754868E81DAB5C1F00732D70 /* pkcs1.c in Sources */, + 759DA0B21DAC1634008CC49B /* ecc-mod-inv.c in Sources */, + 754868EF1DAB5D6B00732D70 /* write-be32.c in Sources */, + 759DA0B11DAC161C008CC49B /* ecc-j-to-a.c in Sources */, + 754869101DAB7D4300732D70 /* aes-encrypt-internal.c in Sources */, + 759DA0AD1DAC1589008CC49B /* ecc-a-to-j.c in Sources */, + 754868E61DAB5BC200732D70 /* pkcs1-rsa-sha1.c in Sources */, + 754868EC1DAB5CA400732D70 /* pkcs1-rsa-sha512.c in Sources */, + 754868EB1DAB5C8200732D70 /* rsa-sha512-verify.c in Sources */, + 759DA0B71DAC1708008CC49B /* ecc-mod.c in Sources */, + 754868E31DAB5B3B00732D70 /* rsa.c in Sources */, + 754869111DAB7D6F00732D70 /* aes-encrypt-table.c in Sources */, + 7548690E1DAB7CFA00732D70 /* yarrow256.c in Sources */, + 754868EA1DAB5C6200732D70 /* pkcs1-rsa-sha256.c in Sources */, + 759DA0B01DAC15F6008CC49B /* ecc-dup-jj.c in Sources */, + 759DA0AF1DAC15E3008CC49B /* ecc-add-jjj.c in Sources */, + 754868F21DAB5DC900732D70 /* sha512.c in Sources */, + 754868EE1DAB5D2100732D70 /* sha1-compress.c in Sources */, + 759DA0B41DAC169D008CC49B /* ecc-pp1-redc.c in Sources */, + 754868E01DAB5A8400732D70 /* mini-gmp.c in Sources */, + 759DA0A61DAC0DB8008CC49B /* ecc-ecdsa-verify.c in Sources */, + 759DA0B61DAC16E1008CC49B /* ecc-384.c in Sources */, + 754868E71DAB5BF900732D70 /* gmp-glue.c in Sources */, + 754868E21DAB5B0200732D70 /* bignum.c in Sources */, + 759DA0A81DAC0E01008CC49B /* ecc-mod-arith.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 2465873C23A5AAD100A32E9E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 75A2A78F1DA5934300A983D8 /* litewallet */; + targetProxy = 2465873B23A5AAD100A32E9E /* PBXContainerItemProxy */; + }; + 759DA0BD1DAC369C008CC49B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 755CD9D01DAA197C0075898E /* BRCore */; + targetProxy = 759DA0BC1DAC369C008CC49B /* PBXContainerItemProxy */; + }; + 759DA0DC1DAC86B5008CC49B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 759DA0D71DAC8668008CC49B /* submodules */; + targetProxy = 759DA0DB1DAC86B5008CC49B /* PBXContainerItemProxy */; + }; + 759DA0DE1DAC86BC008CC49B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 759DA0D71DAC8668008CC49B /* submodules */; + targetProxy = 759DA0DD1DAC86BC008CC49B /* PBXContainerItemProxy */; + }; + 759DA0E01DAC86C3008CC49B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 759DA0D71DAC8668008CC49B /* submodules */; + targetProxy = 759DA0DF1DAC86C3008CC49B /* PBXContainerItemProxy */; + }; + 75A2A8131DA5936F00A983D8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 75A2A8071DA5936F00A983D8 /* TodayExtension */; + targetProxy = 75A2A8121DA5936F00A983D8 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 24B523AF238A53DC0030594D /* BIP39Words.plist */ = { + isa = PBXVariantGroup; + children = ( + 24B523AE238A53DC0030594D /* en */, + 24B523B0238A53E40030594D /* zh-Hans */, + 2464B6DA238A53FC00B2A2CB /* zh-Hant */, + 2464B6DB238A543300B2A2CB /* fr */, + 2464B6DC238A543800B2A2CB /* ja */, + 2464B6DD238A543D00B2A2CB /* ko */, + 2464B6DF238A586600B2A2CB /* es */, + 2437530E238AE08A00E1B2AE /* de */, + 24375311238AE09100E1B2AE /* id */, + 24375314238AE09700E1B2AE /* pt */, + 24375315238AE09900E1B2AE /* ru */, + C3BDB42626CC028F004DAE77 /* tr */, + C350788A27DCAAA100A50819 /* uk */, + ); + name = BIP39Words.plist; + sourceTree = ""; + }; + 75A2A79C1DA5934300A983D8 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 75A2A79D1DA5934300A983D8 /* Base */, + C350788727DCAAA000A50819 /* uk */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 75A2A80E1DA5936F00A983D8 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 75A2A80F1DA5936F00A983D8 /* Base */, + 75A2A82B1DA59B2A00A983D8 /* fr */, + 75A2A8301DA59B2F00A983D8 /* de */, + 75A2A8351DA59B3600A983D8 /* zh-Hans */, + 75A2A83A1DA59B3C00A983D8 /* ja */, + 75A2A83F1DA59B4500A983D8 /* es */, + 75A2A84E1DA59B5700A983D8 /* ko */, + 75A2A8671DA59BFB00A983D8 /* ru */, + 249F9770236F862C0045087A /* id */, + 24B9621723BA66CC00ECD938 /* pt */, + 24B9621923BA66CE00ECD938 /* zh-Hant */, + 24B9621B23BA66CF00ECD938 /* en */, + C3BDB42726CC028F004DAE77 /* tr */, + C350788827DCAAA000A50819 /* uk */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; + CE29901C1EFD6DE50093A0F2 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + CE29901B1EFD6DE50093A0F2 /* Base */, + CE29901F1EFD6E060093A0F2 /* de */, + CE2990201EFD6F3E0093A0F2 /* ja */, + CE2990221EFD6F500093A0F2 /* ru */, + CE27074B1F016B6B00431BBC /* fr */, + CE27074C1F016B6D00431BBC /* es */, + CE27074E1F016D2400431BBC /* pt */, + CEE659ED1F68AAB5001FF29D /* zh-Hant */, + CEE659EE1F68AAB9001FF29D /* zh-Hans */, + CE0FC0F81F72417200E7C626 /* ko */, + 24306799238F479500EBEA99 /* id */, + 2430679B238F5A2900EBEA99 /* en */, + C3BDB42826CC0338004DAE77 /* tr */, + C350788927DCAAA000A50819 /* uk */, + ); + name = Localizable.strings; + path = Strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 24470E0023A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + ENABLE_ON_DEMAND_RESOURCES = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources"; + OTHER_LDFLAGS = "-ObjC"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_INCLUDE_PATHS = "$(SDK_DIR)/usr/include $(SRCROOT)/Modules $(SRCROOT)/litewallet/Platform"; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Debug; + }; + 24470E0123A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + "$(ARCHS_STANDARD)", + "\"armv7, armv7s, arm64, arm64e, x86_64\"", + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = litewallet/litewallet.entitlements; + CURRENT_PROJECT_VERSION = 240527.6; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/**", + "$(PROJECT_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = "$(SRCROOT)/litewallet/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = Litewallet; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 3.13.5; + ONLY_ACTIVE_ARCH = YES; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources speakTag"; + OTHER_SWIFT_FLAGS = "-DDebug $(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; + PRODUCT_MODULE_NAME = litewallet; + PRODUCT_NAME = Litewallet; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 24470E0323A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = litewalletTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.litewalletTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Litewallet.app/Litewallet"; + }; + name = Debug; + }; + 24470E0723A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = TodayExtension/TodayExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1586; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + INFOPLIST_FILE = TodayExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 3.10.2; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.TodayExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 24470E0923A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/unbound", + "${SRCROOT}/Modules/nettle", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 24470E0A23A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_COMMA = NO; + DEVELOPMENT_TEAM = FAPFEJXE9S; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/loafwallet-core", + "${SRCROOT}/Modules/loafwallet-core/secp256k1", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 24470E0B23A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = "${SRCROOT}/Modules/nettle"; + OTHER_CFLAGS = "-DHAVE_CONFIG_H=1"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 24470E0C23A5BF3C00ADDA27 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 2465873F23A5AAD100A32E9E /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = litewalletTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.litewalletTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Litewallet.app/Litewallet"; + }; + name = Testnet; + }; + 2465874023A5AAD100A32E9E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = litewalletTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.litewalletTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Litewallet.app/Litewallet"; + }; + name = Release; + }; + 755CD9CC1DAA18420075898E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/unbound", + "${SRCROOT}/Modules/nettle", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 755CD9D91DAA197D0075898E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_COMMA = NO; + DEVELOPMENT_TEAM = FAPFEJXE9S; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/loafwallet-core", + "${SRCROOT}/Modules/loafwallet-core/secp256k1", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 759DA0D91DAC8668008CC49B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + 75A2A7DA1DA5934400A983D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_ON_DEMAND_RESOURCES = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources"; + "OTHER_LDFLAGS[arch=*]" = "-ObjC "; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_INCLUDE_PATHS = "$(SDK_DIR)/usr/include $(SRCROOT)/Modules $(SRCROOT)/litewallet/Platform"; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 75A2A7E51DA5934400A983D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + "$(ARCHS_STANDARD)", + "\"armv7, armv7s, arm64, arm64e, x86_64\"", + ); + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = litewallet/litewallet.entitlements; + CURRENT_PROJECT_VERSION = 240527.6; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/**", + "$(PROJECT_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = "$(SRCROOT)/litewallet/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = Litewallet; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 3.13.5; + ONLY_ACTIVE_ARCH = YES; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources speakTag"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; + PRODUCT_MODULE_NAME = litewallet; + PRODUCT_NAME = Litewallet; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 75A2A8171DA5936F00A983D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = TodayExtension/TodayExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1586; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + INFOPLIST_FILE = TodayExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 3.10.2; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.TodayExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 75C735B71DAA1C9F00251ECF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = "${SRCROOT}/Modules/nettle"; + OTHER_CFLAGS = "-DHAVE_CONFIG_H=1"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USE_HEADERMAP = NO; + }; + name = Release; + }; + CEA7E69B1F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + ENABLE_ON_DEMAND_RESOURCES = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_INCLUDE_PATHS = "$(SDK_DIR)/usr/include $(SRCROOT)/Modules $(SRCROOT)/litewallet/Platform"; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Testnet; + }; + CEA7E69C1F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = litewallet/litewallet.entitlements; + CURRENT_PROJECT_VERSION = 240527.6; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(SRCROOT)/**", + "$(PROJECT_DIR)", + "$(inherited)", + ); + INFOPLIST_FILE = "$(SRCROOT)/litewallet/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = Litewallet; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.finance"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 3.13.5; + ONLY_ACTIVE_ARCH = YES; + ON_DEMAND_RESOURCES_INITIAL_INSTALL_TAGS = "initial-resources speakTag"; + OTHER_SWIFT_FLAGS = "-DDebug -DTestnet $(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; + PRODUCT_MODULE_NAME = litewallet; + PRODUCT_NAME = Litewallet; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Testnet; + }; + CEA7E6A21F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = TodayExtension/TodayExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1586; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ZV7987N2ZC; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + INFOPLIST_FILE = TodayExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 3.10.2; + PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet.TodayExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Testnet; + }; + CEA7E6A41F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/unbound", + "${SRCROOT}/Modules/nettle", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Testnet; + }; + CEA7E6A51F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_COMMA = NO; + DEVELOPMENT_TEAM = FAPFEJXE9S; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + "BITCOIN_TESTNET=1", + ); + HEADER_SEARCH_PATHS = ( + "${SRCROOT}/Modules/loafwallet-core", + "${SRCROOT}/Modules/loafwallet-core/secp256k1", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Testnet; + }; + CEA7E6A61F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEVELOPMENT_TEAM = 4R7S6N88W9; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO; + ENABLE_ON_DEMAND_RESOURCES = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + HEADER_SEARCH_PATHS = "${SRCROOT}/Modules/nettle"; + OTHER_CFLAGS = "-DHAVE_CONFIG_H=1"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USE_HEADERMAP = NO; + }; + name = Testnet; + }; + CEA7E6A71F0AAA84001F8C27 /* Testnet */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Testnet; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2465873D23A5AAD100A32E9E /* Build configuration list for PBXNativeTarget "litewalletTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0323A5BF3C00ADDA27 /* Debug */, + 2465873F23A5AAD100A32E9E /* Testnet */, + 2465874023A5AAD100A32E9E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 755CD9CA1DAA18420075898E /* Build configuration list for PBXNativeTarget "unbound" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0923A5BF3C00ADDA27 /* Debug */, + CEA7E6A41F0AAA84001F8C27 /* Testnet */, + 755CD9CC1DAA18420075898E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 755CD9D71DAA197D0075898E /* Build configuration list for PBXNativeTarget "BRCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0A23A5BF3C00ADDA27 /* Debug */, + CEA7E6A51F0AAA84001F8C27 /* Testnet */, + 755CD9D91DAA197D0075898E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 759DA0DA1DAC8668008CC49B /* Build configuration list for PBXLegacyTarget "submodules" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0C23A5BF3C00ADDA27 /* Debug */, + CEA7E6A71F0AAA84001F8C27 /* Testnet */, + 759DA0D91DAC8668008CC49B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75A2A78B1DA5934300A983D8 /* Build configuration list for PBXProject "litewallet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0023A5BF3C00ADDA27 /* Debug */, + CEA7E69B1F0AAA84001F8C27 /* Testnet */, + 75A2A7DA1DA5934400A983D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75A2A7E31DA5934400A983D8 /* Build configuration list for PBXNativeTarget "litewallet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0123A5BF3C00ADDA27 /* Debug */, + CEA7E69C1F0AAA84001F8C27 /* Testnet */, + 75A2A7E51DA5934400A983D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75A2A8151DA5936F00A983D8 /* Build configuration list for PBXNativeTarget "TodayExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0723A5BF3C00ADDA27 /* Debug */, + CEA7E6A21F0AAA84001F8C27 /* Testnet */, + 75A2A8171DA5936F00A983D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75C735B51DAA1C9F00251ECF /* Build configuration list for PBXNativeTarget "nettle" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 24470E0B23A5BF3C00ADDA27 /* Debug */, + CEA7E6A61F0AAA84001F8C27 /* Testnet */, + 75C735B71DAA1C9F00251ECF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + C3423C162B7816EA0051BD6D /* XCRemoteSwiftPackageReference "push-notifications-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/pusher/push-notifications-swift.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.0; + }; + }; + C35C121E293D464A0009022D /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + kind = exactVersion; + version = 10.23.0; + }; + }; + C35C1228293D48330009022D /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; + requirement = { + kind = exactVersion; + version = 4.2.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + C3423C172B781C6B0051BD6D /* PushNotifications */ = { + isa = XCSwiftPackageProductDependency; + package = C3423C162B7816EA0051BD6D /* XCRemoteSwiftPackageReference "push-notifications-swift" */; + productName = PushNotifications; + }; + C35C121F293D464A0009022D /* FirebaseAnalytics */ = { + isa = XCSwiftPackageProductDependency; + package = C35C121E293D464A0009022D /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAnalytics; + }; + C35C1221293D464A0009022D /* FirebaseAuth */ = { + isa = XCSwiftPackageProductDependency; + package = C35C121E293D464A0009022D /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseAuth; + }; + C35C1223293D464A0009022D /* FirebaseCrashlytics */ = { + isa = XCSwiftPackageProductDependency; + package = C35C121E293D464A0009022D /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseCrashlytics; + }; + C35C1229293D48340009022D /* KeychainAccess */ = { + isa = XCSwiftPackageProductDependency; + package = C35C1228293D48330009022D /* XCRemoteSwiftPackageReference "KeychainAccess" */; + productName = KeychainAccess; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 75A2A7881DA5934300A983D8 /* Project object */; +} diff --git a/litewallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/litewallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/litewallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/litewallet.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/litewallet.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/litewallet.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/litewallet/AddressFieldView.swift b/litewallet/AddressFieldView.swift index 76c956edf..4001a41ad 100644 --- a/litewallet/AddressFieldView.swift +++ b/litewallet/AddressFieldView.swift @@ -53,8 +53,7 @@ struct AddressFieldView: UIViewRepresentable { parent = textField } - func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool - { + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if let currentValue = textField.text as NSString? { let proposedValue = currentValue.replacingCharacters(in: range, with: string) as String parent.text = proposedValue diff --git a/litewallet/AppDelegate.swift b/litewallet/AppDelegate.swift index 0b73d33b9..ada803597 100644 --- a/litewallet/AppDelegate.swift +++ b/litewallet/AppDelegate.swift @@ -12,9 +12,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var resourceRequest: NSBundleResourceRequest? - func application(_ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool - { + func application(_ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { requestResourceWith(tag: ["initial-resources", "speakTag"]) { [self] in + + // Language + updateCurrentUserLocale(localeId: Locale.current.identifier) + Bundle.setLanguage(UserDefaults.selectedLanguage) + // Ops let startDate = Partner.partnerKeyPath(name: .litewalletStart) if startDate == "error-litewallet-start-key" { @@ -25,14 +29,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.setFirebaseConfiguration() // Pusher - self.pushNotifications.start(instanceId: Partner.partnerKeyPath(name: .pusherStaging)) - let generaliOSInterest = "general-ios" - let debugGeneraliOSInterest = "debug-general-ios" + self.pushNotifications.start(instanceId: Partner.partnerKeyPath(name: .pusher)) + let generalInterest = String.preferredLanguageInterest(currentId: UserDefaults.selectedLanguage) + let debugGeneralInterest = "debug-general" + + try? self.pushNotifications.clearDeviceInterests() try? self.pushNotifications - .addDeviceInterest(interest: generaliOSInterest) + .addDeviceInterest(interest: generalInterest) try? self.pushNotifications - .addDeviceInterest(interest: debugGeneraliOSInterest) + .addDeviceInterest(interest: debugGeneralInterest) let interests = self.pushNotifications.getDeviceInterests()?.joined(separator: "|") ?? "" let device = UIDevice.current.identifierForVendor?.uuidString ?? "ID" @@ -41,6 +47,23 @@ class AppDelegate: UIResponder, UIApplicationDelegate { LWAnalytics.logEventWithParameters(itemName: ._20231202_RIGI, properties: interestsDict) + + let current = UNUserNotificationCenter.current() + + current.getNotificationSettings(completionHandler: { settings in + + debugPrint(settings.debugDescription) + if settings.authorizationStatus == .denied { + self.pushNotifications.clearAllState { + LWAnalytics.logEventWithParameters(itemName: ._20240506_DPN) + } + + self.pushNotifications.stop { + LWAnalytics.logEventWithParameters(itemName: ._20240510_SPN) + } + } + }) + } onFailure: { error in let properties: [String: String] = ["error_type": "on_demand_resources_not_found", @@ -49,8 +72,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { properties: properties) } - updateCurrentUserLocale(localeId: Locale.current.identifier) - guard let thisWindow = window else { return false } thisWindow.tintColor = .liteWalletBlue @@ -61,8 +82,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { LWAnalytics.logEventWithParameters(itemName: ._20191105_AL) - Bundle.setLanguage(UserDefaults.selectedLanguage) - return true } @@ -78,13 +97,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate { applicationController.didEnterBackground() } - func application(_: UIApplication, shouldAllowExtensionPointIdentifier _: UIApplication.ExtensionPointIdentifier) -> Bool - { + func application(_: UIApplication, shouldAllowExtensionPointIdentifier _: UIApplication.ExtensionPointIdentifier) -> Bool { return false // disable extensions such as custom keyboards for security purposes } - func application(_: UIApplication, open url: URL, options _: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool - { + func application(_: UIApplication, open url: URL, options _: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { return applicationController.open(url: url) } diff --git a/litewallet/ApplicationController.swift b/litewallet/ApplicationController.swift index 824d4d094..53cc08e21 100644 --- a/litewallet/ApplicationController.swift +++ b/litewallet/ApplicationController.swift @@ -1,5 +1,6 @@ import BackgroundTasks import StoreKit +import SwiftUI import UIKit let timeSinceLastExitKey = "TimeSinceLastExit" @@ -56,7 +57,6 @@ class ApplicationController: Subscriber, Trackable { func launch(application: UIApplication, window: UIWindow?) { self.application = application self.window = window - setup() reachability.didChange = { isReachable in if !isReachable { @@ -74,6 +74,8 @@ class ApplicationController: Subscriber, Trackable { } private func setup() { + setupDefaults() + countLaunches() setupRootViewController() window?.makeKeyAndVisible() offMainInitialization() @@ -114,8 +116,7 @@ class ApplicationController: Subscriber, Trackable { } exchangeUpdater?.refresh(completion: {}) feeUpdater?.refresh() - walletManager.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } - + // walletManager.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } if modalPresenter?.walletManager == nil { modalPresenter?.walletManager = walletManager } @@ -129,8 +130,7 @@ class ApplicationController: Subscriber, Trackable { } exchangeUpdater?.refresh(completion: {}) feeUpdater?.refresh() - walletManager.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } - + // walletManager.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } if modalPresenter?.walletManager == nil { modalPresenter?.walletManager = walletManager } @@ -146,7 +146,7 @@ class ApplicationController: Subscriber, Trackable { if !store.state.isLoginRequired { UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: timeSinceLastExitKey) } - walletManager?.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } + // walletManager?.apiClient?.kv?.syncAllKeys { print("KV finished syncing. err: \(String(describing: $0))") } } func performFetch(_ completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { @@ -172,7 +172,9 @@ class ApplicationController: Subscriber, Trackable { walletCoordinator = WalletCoordinator(walletManager: walletManager, store: store) modalPresenter = ModalPresenter(store: store, walletManager: walletManager, window: window, apiClient: noAuthApiClient) exchangeUpdater = ExchangeUpdater(store: store, walletManager: walletManager) - feeUpdater = FeeUpdater(walletManager: walletManager, store: store) + + guard let exchangeUpdaterWithFee = exchangeUpdater else { return } + feeUpdater = FeeUpdater(walletManager: walletManager, store: store, exchangeUpdater: exchangeUpdaterWithFee) startFlowController = StartFlowPresenter(store: store, walletManager: walletManager, rootViewController: rootViewController) mainViewController?.walletManager = walletManager defaultsUpdater = UserDefaultsUpdater(walletManager: walletManager) @@ -228,9 +230,7 @@ class ApplicationController: Subscriber, Trackable { defaultsUpdater?.refresh() walletManager?.apiClient?.events?.up() - exchangeUpdater?.refresh(completion: { - NSLog("::: Refreshed fiat rates") - }) + exchangeUpdater?.refresh(completion: {}) } private func addWalletCreationListener() { @@ -260,7 +260,6 @@ class ApplicationController: Subscriber, Trackable { let properties = ["error_message": "kv_finished_syning", "error": "\(String(describing: error))"] LWAnalytics.logEventWithParameters(itemName: ._20240315_AI, properties: properties) - self.walletCoordinator?.kvStore = kvStore self.kvStoreCoordinator = KVStoreCoordinator(store: self.store, kvStore: kvStore) self.kvStoreCoordinator?.retreiveStoredWalletInfo() @@ -269,7 +268,7 @@ class ApplicationController: Subscriber, Trackable { } private func offMainInitialization() { - DispatchQueue.global(qos: .background).async { + Task(priority: .background) { _ = Rate.symbolMap // Initialize currency symbol map } } @@ -277,8 +276,7 @@ class ApplicationController: Subscriber, Trackable { func performBackgroundFetch() { saveEvent("appController.performBackgroundFetch") let group = DispatchGroup() - if let peerManager = walletManager?.peerManager, peerManager.syncProgress(fromStartHeight: peerManager.lastBlockHeight) < 1.0 - { + if let peerManager = walletManager?.peerManager, peerManager.syncProgress(fromStartHeight: peerManager.lastBlockHeight) < 1.0 { group.enter() LWAnalytics.logEventWithParameters(itemName: ._20200111_DEDG) @@ -304,7 +302,6 @@ class ApplicationController: Subscriber, Trackable { { self.exchangeUpdater?.refresh(completion: $0) }, { self.feeUpdater?.refresh(completion: $0) }, { self.walletManager?.apiClient?.events?.sync(completion: $0) }, - ], completion: { LWAnalytics.logEventWithParameters(itemName: ._20200111_DLDG) group.leave() @@ -322,3 +319,40 @@ class ApplicationController: Subscriber, Trackable { } } } + +extension ApplicationController { + func setupDefaults() { + if UserDefaults.standard.object(forKey: shouldRequireLoginTimeoutKey) == nil { + UserDefaults.standard.set(60.0 * 3.0, forKey: shouldRequireLoginTimeoutKey) // Default 3 min timeout + } + if UserDefaults.standard.object(forKey: hasSeenAnnounceView) == nil { + UserDefaults.standard.set(false, forKey: hasSeenAnnounceView) // Hasnt seen the Announce View + } + } + + func countLaunches() { + if var launchNumber = UserDefaults.standard.object(forKey: numberOfLitewalletLaunches) as? Int { + launchNumber += 1 + UserDefaults.standard.set(NSNumber(value: launchNumber), forKey: numberOfLitewalletLaunches) + if launchNumber == 5 { + if #available(iOS 14, *) { + if self.window != nil, + let scene = self.window?.windowScene + { + SKStoreReviewController.requestReview(in: scene) + } + + } else { + SKStoreReviewController.requestReview() + } + + LWAnalytics.logEventWithParameters(itemName: ._20200125_DSRR) + } + } else { + UserDefaults.standard.set(NSNumber(value: 1), forKey: numberOfLitewalletLaunches) + } + } + + func willResignActive() + {} +} diff --git a/litewallet/ArticleIds.swift b/litewallet/ArticleIds.swift index 1f4406487..94cfbeec1 100644 --- a/litewallet/ArticleIds.swift +++ b/litewallet/ArticleIds.swift @@ -1,4 +1,5 @@ import Foundation + enum ArticleIds { static let nothing = "nothing" } diff --git a/litewallet/Assets.xcassets/Branding/Logo.imageset/Contents.json b/litewallet/Assets.xcassets/Branding/Logo.imageset/Contents.json index e8c9b92b8..383f53f79 100644 --- a/litewallet/Assets.xcassets/Branding/Logo.imageset/Contents.json +++ b/litewallet/Assets.xcassets/Branding/Logo.imageset/Contents.json @@ -9,13 +9,13 @@ "scale" : "2x" }, { - "idiom" : "universal", "filename" : "Logo_ltcnew.png", + "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/litewallet/Assets.xcassets/Branding/NewLogo/newLogotyoe-white.imageset/Contents.json b/litewallet/Assets.xcassets/Branding/NewLogo/newLogotyoe-white.imageset/Contents.json index 2d4119bf2..bd7cc85ab 100644 --- a/litewallet/Assets.xcassets/Branding/NewLogo/newLogotyoe-white.imageset/Contents.json +++ b/litewallet/Assets.xcassets/Branding/NewLogo/newLogotyoe-white.imageset/Contents.json @@ -9,7 +9,7 @@ "scale" : "2x" }, { - "filename" : "Screenshot 2023-12-12 at 12.16.04ā€ÆPM.png", + "filename" : "Litewallet-fin_white-65.png", "idiom" : "universal", "scale" : "3x" } diff --git a/litewallet/Assets.xcassets/MenuButtonIcon.imageset/Contents.json b/litewallet/Assets.xcassets/MenuButtonIcon.imageset/Contents.json index a40b9e737..c5077e884 100644 --- a/litewallet/Assets.xcassets/MenuButtonIcon.imageset/Contents.json +++ b/litewallet/Assets.xcassets/MenuButtonIcon.imageset/Contents.json @@ -2,7 +2,6 @@ "images" : [ { "idiom" : "universal", - "filename" : "MenuTabIcon.pdf", "scale" : "1x" }, { @@ -10,12 +9,13 @@ "scale" : "2x" }, { + "filename" : "MenuTabIcon.pdf", "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/litewallet/Assets.xcassets/MenuIcons/Profile.imageset/Contents.json b/litewallet/Assets.xcassets/MenuIcons/Profile.imageset/Contents.json index 80edc124d..cee6282c9 100644 --- a/litewallet/Assets.xcassets/MenuIcons/Profile.imageset/Contents.json +++ b/litewallet/Assets.xcassets/MenuIcons/Profile.imageset/Contents.json @@ -1,8 +1,8 @@ { "images" : [ { - "idiom" : "universal", "filename" : "Profile.pdf", + "idiom" : "universal", "scale" : "1x" }, { @@ -15,7 +15,7 @@ } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/Contents.json b/litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/Contents.json new file mode 100644 index 000000000..007d4b52e --- /dev/null +++ b/litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "moonpay-white.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/moonpay-white.png b/litewallet/Assets.xcassets/Partners/moonpay-white-logo.imageset/moonpay-white.png new file mode 100644 index 0000000000000000000000000000000000000000..cd873e0a3b04e48fe71161358134c1a061bbbe4c GIT binary patch literal 16366 zcmZ{L1zc3!wqp)L-Cdc4 zC*R#Q0Jm2PvS<|us*SswE=wIHD-{(qw!8j4G!TFY4fq@7?t=!PK*RjgM?=#BQ2tln z2*C0e2mKC*2kq{PMsjyrMcATY{KfabYkwb#cjq0ae_C~0Z%YS9Q+H=qI(1iPIzCQb zPQE)BMk2-^9>jP3uX%v~9zPHLUw(k?Jm9~5w8%R=G+u6A9#L*VQ63>WZeda0yDv9d zu_nCe4ulO+)OABcyZ_+#2|#ExVUE$IX~xjDJ%C2{EJ z=)_$utVCZumH$hAcPBw_K=4^5XR3<8*el=Hd|%5#i$I<>KY#xWnLZ^Ko)F z_2zJLWB7;3zkHrrx|zG$Lfmbgo#=k^H8pegaF?K`|2@!u9skH_>23SpBRRSKRqIYc zuHO(Y9!_qq|BdWU+5eL7|Dy6Xh5Ubs+-y-mgPWIwm-{sj zk0`%@sDSWa2LBh@f3Wy%Oi`UzmTt}t9=}~cQizxP?%?A2eHG{Wf588f^uH-JoowAD z?~L|`-zBvo^@wY+oWKeF=t9qm7#{lypO`t8gA;oJWN&Y!1u zkt2z7XV-tDP!i_{ChHqCG%;MIr!ud-0Xx}Pvj&VAR zKypGj8qj|LN)_TLY99(QlHCJ^hM3UZHPheG!hO*vN&Ja^pxaAFKY29x3~5m%Fo=x6 z0K%oY3BbRbB(RMM++v>wLaQh+ib2gdP;S_KT5KRf@#4v=ZbkNgxseTlO?0|Lpl~m^ znR?g{hNNnE8pHcp7XQC&xYaR$WTOYj??0lsx&rWs9~U-ebs~VKH8BmkN%H?7!Fnvv zlrTrs9904IeDDXs)afEq&2&breLRA z%LqMw=XFk!+8-o_>=5qBYhz$tS8!{*nfry2(@*I|eygd1i`;e=nLj8k1JcD}=kwNu z3H+Tp@s@iRCg9UuLv=s#{(Y>s&O(Q~vMvn$|H#-cO}4#zxL~)ttdKwxz#kQBE0F(q zNvwLFf@=8bY$Va2nc+@Mz8g~nd+Q7GCchhQIBNUgaCdUvhqRwu7wh)~4tjvvO}wrj z))WTwZO!RD&#&!~WNLM@S9-er*I2}$rY|Y)KWKMw7e!=KLGGnn3t?Rz(T&nBK6IDf@3!{g758cZkiYwx#{x%60KH ztu|q8vS?SYf7)obZaW%%58#Z&nQ08RQpdAyNic7iX|Zs+_*FzRm$+&nT1-i+O0yc}!W@H|CX`*oDg1lh4^S-y&AKapM``QxxsJcBOK zxR5EDP}TMTChBV*DrX$g3WW&gw|w@-_|0G&1Lu$1Z?>H~3XCb;@UQRZG3ZmRZ17>a z_3Ys`wC+Cq>-K|IAkksCK1lTZpj5k3GP;8g*1x{)1*696Umz~X*FglpUwaE@eZ2*v znj2y$x*VuX$Ymyn4kPpbNhHl%FvRIdj_Sr!`R2b+M`^8`vB%+P26C(eHO*v2SA{mxZ_?Od`l_EL|7NC72KdnEe!wAlD=K{etW-FE!)U)R~ zQ2?LKT5ui-1-;Wh3#c>=Xnl}5v_7OU&#((x81crYhI-Hdk;B;}0V0S6MOiIDn` z78nNd#gz8XS=8g0mp4(7`*RT5a6g>0&yy1{>N7u%zrSO7F<@e|s*Pi>Jg_mKa@$Nd zTyq?9K^K0w$2zJ837BYNdL&`JjdehPjPWtMl|~f5-Th@S;w_eZI`DjV`OFGJ?HzmM zjYCEMPx!85g7gF@-H)5q6S;tK9^I0i!}nJ_q$3VrT%yNX_scf}FXSKoySSO2=0Nqpux zJ)scUCyU?*KUT+mZnnOm*iQ&_gwx5h42Oo}j&@Iw7oi&ap zn&h#7uCU~!)@BduEP-#fm8l$>Rv%x@w?Ak&QuYRWi3F&M51 zIvqE*4CXlfrB>CT8S$;OAlgNmA6v>v8hNq^&>^y!V+KOvjUZSoNGC^dTLc_z{v`1ae{Ta-gQEm}P!kYV?Mftx(d zFcZj?+`;L6f8>bE0zA&`RRULS04%SXDj7OkyFO4f5SNPf%dfhO9TP5CjC-HEhMkgEEa za^5<$9^Bn7z%ud$_bRz%!`=Uvnf2y@R&Nr$2{$({dDXyy2*qXAKrq)xAYKRV20E}; zK0UK$XYz}=nnL#mT`Tk4n@r8V;fMxF_%)~Z8D8<8q5BX{o z0lR&0=C$uhuv6UOLEmfQW=>^!jahM-B&ka|YzUf-KSM{EGtR}>rfAFQhrL6zK4T=d z#Q-wIhI}b|L9LV_g@>RpwcPV{Nd^n*?J8LNJQlL+uCS-VNg)@GhT^BG$p>#qp29Ix z`M{nsPvvRBZzkdtK~1mM!$FypOOgvEWLu=mg5ZTB*Vs;nxisOJ%YsFk zQ(2K6Mx#+X8KrKuFBf5FD_SGbXK>g(D{1{Iv7HTbSj32|C`{TA_#drCr9MbbzgQ7cEd!UXOWh_;94z-LTZx&eLQ)*UUsLyM)zwcmd zG{D~cV6nE)je4W3k5Z()m@m<`O36&$3D(>I=m=~S$gao%Z+uO`{iQNn$>p|P47z-o zmRBP`gJ(Vxi>_lFAY01{#g%FeUlMF5R@b;!4Z_=NAF&o{H<_?tMTq<0e1AJ&flJ}ZR-v?$Xe(5M_Yg9d-$>kA9gILZp#*%!hP8B!KAbOvEAg0VIz4O*J%%#1Q(MBRZRPCpPMM5U-FpUf6yyk z!@Rk%8$1ebGNDl>;C0*U>OKL3%8}Nqy)U}(o%44*8EQ7D3Cs(@rV4ZJPKi?O1x(p0oE2qoS z%I$sQWB5SAu)efV;$$2O4aCyAQL)es(%wx2o{-|jj^3&vU+xQEpl18zOAN-v`sw}g zWLXYdh#HEP+YC4g!OAX|x)n0#v;gCvQG((~ls8Tlo?n6+Hq{Kvsyijpi>Pdiv%i^% z{kVQNvyO#UKj>jcBg$m5p8%>7MLpC;iEidOXI!7FFWBdNLo;yg7r886ux!Lqg6m4? zO;&~`c%^41CyBAbJ6VKhO6fgStM#GC-ky8h%T4_IzG8OXckiTuhP50&r~07+g*~O{ zX6QAXzlw5D*rGhtQ95hvOiH6^!Ao=!c?M5q*OufqZ4bLVuy0PxMVZs)wfdoXc#&9; zo{gATZzkm8v-k{*jje%p>E|5=qQtQ3Ss&qEa>m6q6-M3$dii-s4<`l9jJ|~NioWv& z41N;Md&N(-DE`BqMmXb&x-R0zp%1CeV1bniw@*JBk?XvG^0ua`)_D*_q)wMx+(ocHZ#j{zigTUOu51;8Rbc&R_y+h_0!CWh;vq2y8OD5G?m8jN56Ke--vlZf-(n9#0}g+li&RZ2AanSjGEE*MY^k^0 z=+_KYyFx^J@Bk#3(!VyV7c&ZfLkdLog{JdW33V*Br&JWK2Qlt=_}V9*Zt$u=Lm-Ny&>umyMau;mms+xMN zGY;48ZsYmCqAs?bdiM^Y)ncrM9+xS9slDRGWUC*pcS!aiOypR^j3d+Vjps&@s$*0;eO*bdbGJY=rS(_hTwY@^H6Dh{v_BGNT^>12`_>p zh;TD;>bnR{n9tQS=EAL$DVE>$Bu41qcDC6l?d>->=g`0;Jt0M1YCy&8L_+yE^EwPQlMkp6nsY2?$`Qi2BCJ}npTYg!^#*Q|@JY-`K`jbJj z$btE##{N+g!w~?An;_6p>zX9a|6wiIHDZj@+)!%-&&7D(X z*;K~z2eDbZIe*3ddz?A<=i3i{jRB%XnH~4OZ*7oCMT*saa#!l+pt81H3n_Sh4w<}c zM_S_QJ(jvJH|4-DK&e_XyS5bgmV3OwbAo!Lp7x61jOrYZCw_Es_3UToHG|XJM8q$! zaJ(u`7IjY`66UZcBkB1f2)*sdt`;si7xU=)CtB)r^EBHm-$r+S8r<6crIR$sok~>s zzmlLzGl=Ss$hCX^oHqU7NWZVR)W~kd+b4s)GGC}a(aMNYqU0K87JoflvOSZ+GXiQm z@@0)hC#46BI!Vh-s}?w}RlM}jGOn=^_m^K}5GPodF6Ih@$5f9+mGrq*Y7u!plRrbL zM@TBZqvpMu@tBhN%&xN6(}M&|uR4+k%5fI7_3!OAuFbKLE5>-^QI!EJ=!zntkK<~U zuLmd{h~6ru6UtuXhGesZUVhW62u$&Nd9fiHtNOIW~^^)y0^e{QcxlW2~| zbe)W>tJ`Z`-UB|sJ$-wUzeOv2Hms#uO8aDF0$$;gyon}S`FML^(J9aPbCxM>Oa!&E zVlE%-Cw0dsm!RmOjUk6eKMsx$0vKNpn9SHXTxm#urkbP6>o-&5zn46d39_bi8`!#@ zO;>SaRyV+~o<_V=#c~Q@>b*KY+Nrul&jK_FqJ@c_c%5Ey4mwyXjlMrjH;^EDryypD z9wjz%BzfHQY58H^usr{;E_8?2t=6WD`nWc8Vbh;|V25k|wGZ6 zz5$sj_$amngCRevAyAd~c%f}z(Yn|dM!IGZ8(O`Ti%;t-2&_g|dXrI%g9^dbDNZpL z_Bvxh&FHBv>Pz5;ozVI5jsO?GmddeD+wYSTNtDx`_|);@t!9CYFb{u>vM2AKkyq7R zm?7M@5cY!w}dxbfBN?wXdmO(FF+yI((cj zlVo=)*pjr+@Ty8o3RX4|3Uv!9@WC?XoKppKhYW;@g&3?7rl+etl6}r>*X@pHV>4^d zV$vPJ>P=d8l^lX{@Y;7p(pd@W01qR>5xSd0DFqpLd;(nOL1b5?iBRp3WSBnr>^0x6 zfx5GF6iPimeu`$!w`O2RDMWi~ni3u;LTrG`rKb9x-}a?umX~V|su_gv8~}EsV_E69 zX9DGC_KEj>A&+#>4|E)%#{h$r#6;6}wA4Y%0|}m|o^MM?zN9}7BJC6YjF|rD($yps2lEo9^vL3}Rj(2` zlNzUc;k5Uv8wD39j9MnjR;$RlAE?c+YgS?Vq~h^5sf*##_$T|<$ySbqVmVdCq2x?R z@WWw2j(W{`{>kFSDYvi&JpWjKrwYPpnIS0h)!`ZCEGiTQ6#Mm(?paoO3-v6{uV8vh z4qp-POKqYPOYcZcCcoAO63pi}b=d+I5H<Mm?ce0pwFoX3+rU0TsR?+Kd*%ap%tK4 z_!W+LwE+Kh3Y(HxII~VUe-b$rRPR8hSiuE^04E25;{8u5|1EG76gP$fK zAG_`3uquRafU#65-yGR(eXw}74(^~AJZfFDUuXH`8-W$;nYeZqkHqmewc#Om*~S`! z9CyZNb_9y%Zdjt{!N{QC_g&Nc`}(*y)WRluOSM!>H2z7xYdyXY^|PZl_P2^w8vc0g zdDq6X_yDZVUUdArT&&OZ+kNMSpY3&v$LDg(b-pZB7YcOhXe-eFu!}tzGq|NvT+QWl z>2Ul!!j?U=FpD*gFU;GX$|VL9CzyW=>Mc^tB)oaEia|8HryaqnO`(8eT2(r=aqFg# z?2~5fThb}0XKl`@VilKTxHSFX2d2Oq&=T+HqJTthn{Y%&ca9XtisBr?gP5C*yETwULrnlVnO8(3YiwffYys8W(p|teaT^?REl0m zSX-L-0wVulmE&2LsR1Gn*qQ`uJnK`O^*v<~#t-1^zsI-2YkEyFGjVXXPcX23UmvNt z>sKwex-S!fz0Qj%WRIqmJlyvy@gNhW zW6et|{R-8vLrDc6>UD{GHKrbKsw%q1_$LjFV{bVa??QLGF{vjrU_jLb?-P4rx#>cN z|8}y5g-A%C5%pkO17Cg%Y|?H(c+VNsP_LE90da{AGAzm7&a1>-2O#Trx-C~U1t(8L zCxMY$+mDpBmUys;hc>i-xrj3BYa4y?dLgo=j^HA+3gkmY3ky|0J=2_5yA`*!A)vtV zxyVIb_Vew!kr48qIivYl>7od4GzydZb<&R*=Tp}YxUzEb-^P-6t&)UYGcQRz^N*7s zk)=Sq3sORFbEHq&Bj_#)5IZ0ySIc|d@&0WNG=~-AN?YBBR^(?2kN9jObt`>ofTeuJ zp?5fZWM>v1OFZ=}C37+x*QiL{&8%LxRKGnd3UQ0pb7<%?T0iB=Qi}~>j^_F=lRSgAo&ve-IyIJEG?|(qU(yOzMcp_7Cg)cL`3eMJ1Dv<{DaM} z+6w7V^HMIWEU~jI>_KWqifvYlv=6g+kuJlRV2JVcefe}j>Yu10xcnYT-Y;;*VH}nq zMS9~esNT}2@g$El;b_N?1wGFPwl=FtKc!bL_APZ&^1pWi@N+;G9hNT{_lXikb%Y_y zaYEz!niTrhWF^X87}Pp%k8|OA)WL13m)tNs-^kNtas{UX`qJd z;AZlo`_a{5mp5X=O)c`iZOCbXJSQ=_8$F~#%-c(r&GS#I{pt3fZqZjtN--)qR`wR6 z5ipb`EU-Gsp{p-62y64Xp5-Muv6^8c(heyD75}RCVvEhE1n&d9&Sg9c{u(R(sMW%R zS5K@-e>7rROw<^MKUml7{A1`NP-gg&^f9t5vS^E9>jUoTVqr$HT&oeaO`e?mC=>OO za2rz`DK-JF2zJB4;|+pXQZL`>s3|!pLtvdz4{mW#9Hr@@_QwlHAjo3v| zU7I9JGYIm6Cbyd!EdQ^#t6ojsakNdH=T!!+!nF3qqS?=RpW7e4m z0hI+DmbeWZ{Rh~#=e}8`xNVFMKTj=WX9(!j*51B#4%?sx83nT~`zd6*t2m(ba5Qi| z*7~VQcUAvAh;7%#KrHFGNa%wt?=ioM+-o%7O$xuDukl3;UtpV!6=w^FV@L)3qsu5=63ndli;YLu$- zAueM8>82Mx(w=-5`abp)4s2%_oBN!ji{UT&r;+=p*7nQv{#qy^%5 z?UIRq^)bZRUfA1aG=9v*7@6ah2A{`oqn3#_c%H{xJv~Ae>1CllrK3R<#~sivU2=$z z1gi7{F_L$N)T$Ngx*)jDOmxdEkry#2#02mKDAi_1WG-O&MC-WJ)BiFEEL%d+b4gd!&La-475rSzfeyE;r}O?F|wp zwCTLs(#}0Lawc;dmH1Hq%wNR;#JY!1f%rPKuqOSH=oA5VR7GCo!4>3%bFmx1PkQ%h zZ3;Ps3K`Q<(k1+@9>nC`VGH#%7xrFa|jij~E_$jYc? zd*&Qd^I5I36LpSf9Y7k|3^&+4e?B|g?uBloT&RYAy9|?Al%`}AX&kZF#yFN~@gPlZ z1;*U%yL01-pVA@ZJIe*mJR!sCk$c*wRw0_YA=i*-{H$`?ISb6#t?OPil;`Z-p9+_! zHy_&eSj4^#@K1()fp5PM#+%^!N%NyN%42uh>?+G}!p_9wgTV1HGBwV)1BNlEZXr0B zf?*f-#lffW)fxwqTg?D9AHzS1sG`PLN#Z!ds358PFh6=ogFUe_7qaZn{b2TGsQh$l z>37KJYl$MmrijvfNlJ(Nifr1{49~k)LB}}}Ig&Mc^|y?%r5af1+W0i+TW|OuL!lad z%J2H4SSB)-u$X_8txfemk?|h24DMU%P`eHcsw_@)?q_4MoP9^H3STIidnPRswiWMv z>#ubZlY99z-fHJlG_hFi3ja`tpiaG;-gQYw^mW&xr8J(Z0O@FQV~7%jmA@q?97X=K_31 z`|C=ePu%uoG85$(5+!FQMY{!5F`s_ugIlkz$ZwjLD&egW%h@gx2wp}E-TK7+Ab-g> zX7P$6Qj8EKp<0zjgLhu?vx-wcDKI}B)>qflLdsp4E}A2X%C1SsAsi2mG%hZvBJbpIcZ6E-VV%(69$p) z@?hKAE8}CPhhT;)2+f=*OE}TZ*W1IcK#PJ9{F#LLVo%Pv;rq8V=D~hj_i8F}1ugge zzE8Z2Pp)2P`oVd2PDm$qWt*1+_eq0P`%I5zSc-M3$|E$uQ{!Q!#r96u>lU5`4n9ko zh^n}H0>%xDJ-k@|o(h&EJ}d*Dm0s}>28T=XyZ{jbiTm5{8H6s`w0oRD>1Z=oEk%;C z9fKXraQ3La!|qWE(sh5yiFXRv)32pdEZ3ekPI;nd#z^_-Nz?~ zq)clt>^*kwuf<&wDb2#kIuPKUR5Kskbxbs3pHCRNmpo0pXe2E^gN%1%>ga1o*~#lW z3Nxp5|B{okx_BrP+6*+kdXQ$o5GJ}I8a3G#AH-34!dIb}<5JEJrjoDlL$}UhUFt~J z4y_NKFimg8@wd}sFj5mNY!&WNCK^`8(Z+kKe-TvJ_RW7DCV_TK%{JZMFYNs8k!T~8 zWV6gPa9)r%y{+$3o7IK>1uc*Cs*6wESH4|_9jp>j^FiI6WQm4tEV5G|#qJXq`6*Rs zfWE8(UmoS6JP(7`UO2-+S^I0FwLtqb{E}~4d++wgaT~qs=ndwqL2T_lHne66tB1yf zOVCgsaNUFWnV25oVU}>fW{UhK+3aX4QQV0p(rwnSZDZHx^I2N*z{{FvikB}T&&-x8 zo==@Ve(8zD)}7w)iFEGN>%lv1F7>H_uDZb6&;C5KiydgGKQG0oz^B=-1F_OiItg2X zyw(oA(*Q2DaHg$GndVMHH{P|_rR%WIz__$GUb`r!q?T6?J_Js_oMgq_HcekLOr=|gU{Mfog^;^=SA^51CKom(4Zem^-RvXD<~m^B3%;4P$!rXDv@qXIY=+n$|my&oL; zhC{wR-h1hHHsxH{6LW7R=bE^R*|NR&Vc)LZcy^fmXgx0D2e{|lx36FDygLV~OkqkwgNi2dvmEZnV=c2w*imbE&gdPkz{6j*1ZlF* zHH^1`#X~kZDev3&g)W!x2eI4O!ep+XdE1P$uV3EU!ysgdAJZCX z+Z_=BFAP6=Ru%F1*F=S?&><@F#ymBI?5B_TklG%=RB_h&E?){^LVi2^-MHp#K77U~ zTt7)NPHNv*`3gF8>G!pd{W5I1JrN$bf;SkHwWNb+R#AQzUY0%&J+du#Z)Fn12f`;| zYK3s2+8TpRx&=83PZK3R%J%cBaSjvgPsArT#)+ax?h3x;WeFSk!3FXuAIL9_x{^Z$ z^m*{%e%5=>F#8-p8}9Ba54puw{cbIyR&q-IjE0KcLdnT-_1rQv|Nf=oGl4SelnzE! zOwKr=;jKsQXC{WLM+^pi4{_@lGUe5lEQ<*wTM)qo6Dv4F%Wquxr)~C48NL`JgoP+q6kWTF@@5Lv-{LJ5v6O{>lb4&@G)z-|xGVmqG zJ0yPNo%bg6%+OUkg~s+#T;V78rwF}UKGyxCkkjRT=k>_>upFiEbO?fX9t-hEEq$57 zg9w8>@y(U!Cy2DR@+{k>DMy0n1YY-E|N8OsK^sq=MDXHA$iD49CpVz5&tHotPzAa8 zs$Qdi4u3ICgH*#Y`ee*^>xfxNHrqwok2q-We4>G(OZ=5Hw=owr)kjCz=?)Ufp^AxSJVBizH_>IGP)whEu}ZLhuPqaBN1EUVr3+ChH^VOPwYcZ*YD9 zd^&Xpq(XyaDmP$7yE5$pCkxcys1quoUcrx6sfbH9!=`Gpix)x@0!yPaX@m`9@qDyS zPS*lk(=L$qFFoFHj~CwpCGqjfDI5Bd8}RTBYm)kixA{0hCBUS*x1ofhmCcx| zWq>ucC!1i+Q0=RD`+$C!IKP*4U4^qUw~h;~y34?!Bb19dcWTnV=Q9KPUW|=?E?qTk zhzn~5QMXAm!5)9Sp`Kr;IjSiK4e@wqv<@h?LDWSqKkSeNvHVhfCIZ24_?TE>oSyk+ ztu2%*c+}GOeif;D+XFcIa0YZMb{-xwKh>}6Fep!h!SLB$ghsGlw5vIj)##pr`jP!S~VB_Q8>^18*J5Lxc9wb@^P@RH01G? z$vlErbJX6vit-%}o}BaTNpFjb7$mOE$?00Dd*ZTH-oTofA}sOl<=}FuIA{-~=92Z* z!ck%}Lv-W$5Nl_3oFtmVnizC0yM?_PF(yByC!D#Dq7dXvALos>mG6zoD?X|5e&rQLaoM5*zH>~?lbKZL8Ko< zO=V2=g5CKcgHMT|9}MIoj(`MNYXFAkm1LIz={0%6PV_E z@eeAlkWFSgLy%XMwzGhIbLw=()gHKQ#<CqT?8asG*o*E5gMsVQISX)yv)rx_m2eoyX;`4=Fv#cqrJnN_1=Vg}$mq zuUBP2FX)lC#A@g_@`ASPT@<_+hCXO}o$YA&td&+Fof0DFn+4cS2Cg^*wQHtd8owAB z>!=JplGzM%qc`;e{EYT7!g}uAXqwa*`C)oai-><>C*52sL zAy{lry3igp^I=$8dvUUBzWYF;A*bGu+db`4HSbGv)f70Ybm)fjOrIO8rlk^M0G$2Y zoOLCIo%Q9-F*b0P3uSAV;S+f|Sr$^NsaM}+;Bh3?=P0#;ooM5Jk8II3oXp#B6!vUew+EWDao&(BA*y!(bC0Q9iIvbU zY-rs`bJ@2*xh}}ZrioV1xr((R+mAn5J_QxgRv^`uE@43XW9Uqju9u-TXwE}&(3B)- za5474ktIlSx7M9XE%XC8H+&k;0dxiy&K9p|=Xk1Uk9kH*bSbrdHPBEW{5|gzc}jLu z_MUSH^_E}H0J(}{E-&o*s4>b-{gz_OH~BlHYTXYd>3(K4OB;O1HfE4B@3|qN=})lB z0nWl#i@V!gk#L(yFO~A?w3c?bR26;ymPhjo)z2IQ4-VDK1VFm<(QBk<>R`rxrA!Ai zn=K^92YqCpb?L`0`rX?QX)%a#_8OTEyRK-GU3RPCaK%3GmpU(f+7!C1;gWz62)5+i z6*MSy$}~U_i{YWVM&-=c3@0U-K0r8Yk z)r_>iUfwFeQjyk$<{9sk1l+r-Gp8z@AM-5<>ttY-C6^5MK(3Px*Oc~Tcs)<2l4W%{ zi=1YGcmHM|uryK*LYxc~OmQ=z0}-$tSd*1s3FjL6Mf}22Ju4X|1^1dpliQC{|Soi5>$?*LyF6|Q0E1v*Lpa-yV3aNXKv z(PbzQ4v_9>A$+I47{5BH`v!ziRi5xGOKPT^1z5Q*q%V2CejX6vTY4J^Lo~cX#ogn3 zZ$FTq>zm$R6>E-VcPh3S#C3xwEgQ}X9EE1HPPBw$hSiPi9KkLIid&J3M|<+b@b-5+fvO6!j=Eo-hQ zWxVfK!Y7}bh{r80;X-2NhI~3CDj7KTS(AN|*EibyOO5sxW>bP(n^$NM2=D0@&Z1+1 zb*S+e?j&pk^qON~v0XoeAt&+140bJL&02qwKArE#1mw3%N6!{O73H--qkRHO{8{FB zK%bZq@A|tM&CegEBthf!PTdp_$+kRFJn(4v!o7ceGx<1X77^re@?Cf@0Q8A8;Y+7G z_4_7mqJLA!X+Q>mOb`X4f@j>x{Q9BS%hJ!Iypx>ejZfwe8P3YtNDth2kStD*FJ&ZC zhWPv>8lMw{{Ks&F!X=CPbm@|n1ZXTj_9N4iO41lyGPdhzXpsJV-0D3V$4Lw)^G=FKf`1Gf7&X9BFip z@j>m)C8w3*-!yO;@L-!Ab3Hm2RwcRu(0YpX?k)LRkjdovyZ4}GVi&;fM99|hvhqax zh6HHbtjsz;&G;s24bOM)CQSY=X?aiqY?5aj-4ul7FYt1vIQ!UHGQiCa{n|mISt)Vt zO+;{;fbX#ls_K4H8I#Lx87yMJ2}6pVu~@Ot5PVjf#S0Z=tk~~N(}1nERmt=G=)}J%`12+(r3&_3irx0Y z3b-ICuY2zaDN-*FfWLtY;vd$E^uDeT+EuV2{GIb244xDU!W3UrO1eu1P3O&wx-{HZ z+z`*&<=gjry)RbxZwZS83=RJyE1&wR-;0k|PJ#JvEvkAaSNHp2`0yoJfyho*KIu2_ z6bchujdKvxBJ_VNr)r=fn#aBMp+R&9b^bJ>ce}^DDe57#fQ6s&5*mu@;U;CdUu1(b zo05W7$p6W}=Z*}~%=!s(q7DN8$O}5vTYP&Zsmr?73~9sk#E1yCfT~R4^niH`Nj!fwjzT{0S`M<|5^w9`kkiJoJ&*ntk&uJl>kW6Ah(~?#w7p^`+hh7^LFMAg17Xi^yXS;&o*h$v zkLtHMU{$7htWd`d9x6^ue{z)UY&)&7P(mUAbfsU%6>N_bl{9*gO8QAbkWkqnpb-KL7Ni?>zf-O6QUbn2>KZ z4HgVVe?2JBBCjL@VMmhE;y@d63-VUsxNS&_0a%X*VFiYMiQfq~7=4EPgB#8ad_(TA z0k^qa$iD?3PQ?pZLAwlTGhjs7vhDsymRQ9<>HlCU5RSm)Fmxy<_=pga1EMNeUQO%* z+hpCMNrJ3f+e!YeNCepYHeV!54e&H3O|CZd@#K6uhQyO^e|=20OD!yk{f&qUR}hnW0xB-XYR`fKB3(~E z2Pt+5nU^j1L$bdClm02g3qVL~gPFqnGiv>2cI|JOgo(})ry&n$*)p*zFh~K$6TTGY zJ176nw+UTFNCnyUS5LCtIAKXLs=Lys2OrAFYxR7F=v4NJ1&_6c9bh#L#bsdV?esgSN0H&cbE@NKAGoI{4FlI2hy|7D+YTu3X?gZsspV3 zNRc;nU6=Q&MAn&n?pbo)ZJqkT(Fy!U6AAv>Rs9K2!nUgaStsN&iNty?6JR|}vA2P= zsS;SPxj_`}fwY0NjG5RugkQFC@Bh1EIhyBK?YR!Jkg(} zTl3gTqB&udi6J@M&~{dZav$XKRf9#3ug;K8NMeEYnD#x1@l0Q0U`7kqzh zr0Ydpm>(eALwPpNMc}NxxHcEa4(B`L=-k7Or^T#>Lt$-=S$EZdwM=CUv!d~Gf2-j_ eL*jY&Zvmz;no9f7@tNNx>q^g5pH|44g#I5UYOpo{ literal 0 HcmV?d00001 diff --git a/litewallet/Assets.xcassets/buy_icon.imageset/Contents.json b/litewallet/Assets.xcassets/buy_icon.imageset/Contents.json index 89e4234c4..78b093be9 100644 --- a/litewallet/Assets.xcassets/buy_icon.imageset/Contents.json +++ b/litewallet/Assets.xcassets/buy_icon.imageset/Contents.json @@ -2,7 +2,6 @@ "images" : [ { "idiom" : "universal", - "filename" : "BuyIcon.pdf", "scale" : "1x" }, { @@ -10,12 +9,13 @@ "scale" : "2x" }, { + "filename" : "BuyIcon.pdf", "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/litewallet/Assets.xcassets/white-interdit-send-icon.imageset/Contents.json b/litewallet/Assets.xcassets/white-interdit-send-icon.imageset/Contents.json new file mode 100644 index 000000000..c63963760 --- /dev/null +++ b/litewallet/Assets.xcassets/white-interdit-send-icon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "sendTabIconwhiteinterdit.pdf", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/litewallet/Assets.xcassets/white-interdit-send-icon.imageset/sendTabIconwhiteinterdit.pdf b/litewallet/Assets.xcassets/white-interdit-send-icon.imageset/sendTabIconwhiteinterdit.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1dcee18fa08eb61328593ca8d4e6783bd600057d GIT binary patch literal 10133 zcmbt)2Q*w;`}gP!2@wS0X7tXC-h1!8*I|q<7(JpyB!uWa2%?t|gkXqXuM$04^xmQq zd?PpczxTcOzt;Dy^__Lr+2=fG@8{Xi^X$FWZ}0tM(3F+ufN=5v8QNFAuWS_@z8z}s z1oDEwAXlgZP*fDer3!O_BkVwYD3LaZOWxiI0dq%{PF4t*EX>-~1_lxr2YMjfVOGvS zA2c>yTwP{eFhJT`hKN;J57(euXNXXdLs^}JnMJK%i@6uG7@#ag8eF(+iWM+uDub2$ zU9RWL#YksQ(_ITgOmdsKIRPt)yLjKqg?6fCqxQ&466mt_YM{|aVa^YOiTYNWqy@PATtn`p$60eW{m*dhEK^E0uuOX zRb2dUif=`~75|E`;LloIf4TKr1(%K|6!Fv1pXNYZ2KF|nY(RLxATC9iJ=_lQ*SiwR zLHEb5w^;!q+&xhtk#Ti$b=P@pWeo!f{iRt)&C0_O1i5t?6$5E|goh@~UB=b;nIu-JRI!*UN$gGN(6ze&a!C(q;H+Z0f9HI#={MFG$#~<^$)O_a2-*4ZeM# zZQ%b9I$$!pkd|ov98PFq`$P0N;OY#0#h}6CAh$*0N8RB=SDTyko8TzIBle5vA0nAo zg?~B*9^B-d%ZbA;`>r2kUB=*W-caAX!g#beaL~ZHm<_V~qR_m&>Y0dL4r z4!x2%zNHrDDn@Y^y0bc7=TFjjM+qMDL=jov-L^(%4=m+*DaN;6K;45cC>Zb^vq=pj zW1V>B;}xP3Ckv_E7!=oYzql+;G{x>g6e$@-G~3ulo;jZpC6ne~MNE1? zE5o7DoCWMMR1#S#6J#-&K87Ut1!YNdqp%M1)-N^qlgf|YB-f0%h&{;p>g6(e=zQ07 z%yL1(KKnXVO>mFxDGnG3j&KP&ZA*b@Ed{b=~ z5c1OXHMHFh6&2}hDtRIzf%P#!FTdT_bZ+ganQMJMZ>(spC<0mYYWB>=i-E3>MmPgdN|;uXy1 z^(PXSdqq6yUy`2*#)RT-0mGx%#6C)Odgy57u)bFzg1E=h6D5D3?QzS)JW26!WK}j^ z@x-H*=ZwQ#BsQQIH4CpaG4!*0sjRq?Axtbw@PtZHI@Ft#SY5xtK+uAEvHVk6qmDwz z%iw4XrI(LoXwGfM1a*yy*+^ZFQD$RkvBmGw)3k~`e*-F+D_bvCm*r+f`S4BdFGbV9 zPty839^-~9Ci!V>d!q})kbO50-o2*67?ZKh#SW|HI8)z(*Dk-*Opv;Bn$3D^DXFtb z$)YD90P)+0uG$M4Y5)A89x>o8#KMY2#eM224>>k#7h|>H6omkpw|YlBT_^ z*nemxj3gDkHvY@Y#mUK#QtUWQBSc21h0z8Uwh^^)n6CV~VvzP7P)RoTUF3&#VZ7$L z`Z=rA3Mae!f=)dM#*>73Ql;yT#L0K{AF2&Hi$pHTwi}m}w(q&HE%zoSektg+@MBvV z%?QBvnmeFB!L`us=C~Y5O2JA>WOrKo=oTi}pr#J*YJfW^5eh9O!bLZ~&`Of5c@Flj zgHKCMho~ho4fAA{%i@gl?JBE0L@5vHWD@LNXnz8{lUYf-V8M6q76Ny@@ZlA^2g!Md zCsWE!DskM)cRbq1VVz!|wDxjqk(I0*olYr%_uZn7PXub}Zgza6)SmcG>t<%!kx373 zl?@jnrBY%}#1d8%04U<%Ov8IMhM`#*N(JQG)P+$PNgM0@1GuH=e?bswHD zd9fx{dUVLtR;0J+K3h5{Jr8_wMHz$zGdry z@{ooGc~sI|UwS9LS&!)DhWE8D)Qyo&=m>-$@S>Pp)40LhZ2VPz2fc88tf5a%KWcanbv7<(4piX_WG0o}QN8Fv-Za_MBak^iDWDQp2To zdVN;UYlQuMzw)DHA|J4gqk$r7%J!%dSI~L|)FfgXK5A#=(F{!{e_vZ|^35_K%JXo1 za4oU8tRY3b*5MtVdZYGg6LWH8!S!LueBQdCLRhTK$0$Aaaop6TXIl0+2en<4Cdz&n zXv0a3KD(B>4dFXO>C**VlM;yD(imZ}hvv=4(&{!bZ`V2sscb>~{+4TTOvhTBR^ z`D&^~-Vsx*{FVp1-1_|#ld*-cml#KW1&Rii=OlY^R1mbu4rZu^LEYtkOwvNm7qFUU zWbB4q9w%q#hz4t;Nxj~tQEuyfTY=v1i>l=kABjtZw=4ZFXeKnDY@U0^Ll<7onyL0j zcgV{12NK+OESR)rSjw)BX6~#`W`^DX{kIKtv1G3*Gk0Vb2^S16g$2InE+%F94C?<7 z5+1*{zrc%i5;#xL`eD|LbvX(bbw90rV)Ny&+xyH1_dIydBH+hX2FLz2;Vxz7)%km6 zkLII{L4$zG%ihMrrD*-rt7QSE=H>Z=RgEK?+FMZeBe;2YyzC~{;*@Vr^Q=2?`Hn=W z_t~S%NM7W>5&JEM{fX201O$F#=%0Y|A6ORx`TqgC|ADqZE?JnDy){h1-O3k*wf_Tx zL4SeZ|3{GfUrU%B6K6a99@5MwcDe6pKk~mNCvL{=^J)me)>fwBtSPPRZsnZLmxz0m z&MGVImK&lnt84<)oBWU`!R|I|sN!UoSD0XCTJ~|BOXBNJu`YC)_tm4fY+r10(*rz2 zJoZH415aj81L7w&*Dsfl9)oWV->eO!z8CS9e|d9rt)TMO0XBVt!8BlA@8(|(_PgxN zt75wA&T7(KOt)ce%%4)@K0tkneot&?D9`MomS==mET@WMIQC1-@D5vvKL03 z075oY*< zI7cc?y|HIki2GKb7jg80wST>QGssIR2eyVpPZ6!+Yo0KvIqrW4_k3!kbS;{vc4}6* z)u6&Md@(y=)^?dLdbAiKbeREXA>jAd_nfEp**lA#@cX_hRdD)dMxaZFmA0_KQld*X zFdnW|wYH?X;gg#@F)Cq&VOn^IaK~cX7OxnZ_*PPz>LuLN<$4+w;3Y&*wokJd$LC#& zQ@5VnY$xhcG~;wQoW^Cu>OFqO3hD7!nmLlHmFOPbuGCHN1Cb=o5(*Brji<;MT!-jA zVZuPOK?8G2XBUdte~(`tww=&BYf7BR4yS&)wuJfl3^z0filgAKtIbmCYX^#7Ad80m zxn&NBlmd}(v@weK8cLfPwy-U^o z#u!idQLo1IqnrTp+I3eeA3{>7Khs53K&Q+ObOA6DawK)?O_x$WvLj7&#BzSTwL3r)wlL@foVWFC{oKH&E7k3+C zdvIo34BCHa_QRswlW7KYj&qmcKCy<~ESh1;HXK1Fv}Q0AUV=V{#%`p^xA9Q(uw-Z^ zipmEY1ActpTCCl!ckU_>)Y09)ep#{Yf9cYfG&Uq9J4{9Iwml)L! zcytA6_&?+LET?@stce(*oAsP$@n_!3$-L)$Ef9`CM_P9m&>c!291_%gsjm2A+J+Ok zO>*>RpDn8n6R~IaP=0SlbGwf>-Ts;n+C1YO+t8$X$deD%*7qfOqpA8-2xFJ7j&qvVSWexG$ zh1XLBR|g5urLp&ZsvqM@&;#n13|*%cGEzYZ95xsNh@>?y$~Hq5NiNEJvv}e$WWCCA zuyM~p6V2@zedsZy!E(*nCm5Ewkz7YFkw_M} zF4znoUUBy%`P~t=3s_E-k0uiAV@n0xI3754w{;j=CP)J{(&W{;RV9>2l3Rhy-#uj? zX(Y9vLMM4)0bFoq$@6@LWr{@!!OltSJW{QxNK8NEeOu>*7MiQAtW)h!jvmE~p>;`j zi7elzs)gH2LSj=evi)AAKq(aaIs!4&{jM60aXTL+M9Sip5ajC>9KbZO+4nu0nA-sq<~r;r%^Zpz-!ulM9C8+cD%xFpa+&cHn0b4jl z|2l_6nxM3@a{D~E^!XmVaBXDe>N)Rl!WT)FP;$e=XYOl?#h~W9qYLxYRA&Hzjj@6t zCs|3eG9m5M!*+tTJD)EMqS1B9G5j+P=S+>-bZ>xl*JF8rJDqRueL$46Ge6z@ebUjrpNsL+*nuKHH)%c>ve`xkb@8Mqykfj7m z@fpC?vyeBe4SjKUu_R%sv99bn_zvOM1EKzZO1g|3iYax&R|Nbd+VTN~ky4Lb;>%Uv z-XL9_hx*8?i~a;O6(mS9x24sgv3inTjWf>dMS*n)iUZ>~!u&~e@d~rD4z!Z2uGp{- z_M%#^R)HoxpPdpAqQOB5Ej9poGg6F;<#?ZY)7iZNaDYvRqZQJGA7#S~Z$EIj zh_+3#V*Ac#JU`r_PTCPhzi1LT&bXc;>}8&$0BFNvZg$Knu5d*97YY3bNM145J$)IH zE=3YLDYZdg7k);*(kDiq;B`MOWKTh7pC4niK9L~Zt)WblkPV>>!(;zI z_*}1ZnS|vMPl;w*K^qrtLw-adphWBMhB+U-Ed2CThi+r#>2*7|`3gng+hY&wBAwwY zMcPItm9!|&2v=^6>Z1gD487sVf^xrd9;qi9NkrKJ_FpzPbv|6VX<&+hlHGGC4(A!g zGP|df8QaCnBaWswwB@?vX^Gy&z+S%Aq(5?rtkyZWX}k*OMn4kX5Gy@d@{kF`mCfnC zmR;B$9=$iDOATD^%CqDSeGm@y=Y3vrQpDJk&5lk3?2lFphT{&OLvo7BJ5Gyw(O%R{ zFPqn^Tjz8rx18MnlZd01{MiBV$tG~P*Bh#K^quRm^b`E3FN{Qg7OwN{ohcEU`STB^ ziyXI*;*)uteJCs>BXLmRS6zdogHEWxhL$Ec#9%qi?{@Vf;Z^R<1b8%Ja3H zTdmY&BA*zgr*#qrd%0?!jGvV4%|zNZmD93WDR~0A^WInlxh#JLmmT7}i+i@PKBq^7 z(Jcy-YFrY$AY#a{4tLuhtlS>FqI%Ghx>F?@mz0{XBfIR&cw8fTZ6XxEmbzTh%gKKq zL^jN07RB>4Uq#%0_tVGmnhVqEuS{O$YNRKK!4v05h0@VCMiTSP;R7cW8hZLw0Rwt& zDLYk75zkUq4hL9pAbs#A9%88H?x)i+<1HnN4^=m7oLf~l$%ATZ+c$xL?2ZwNf3HG* zt}cEqLxhBQ|7RKU_p^gvTkeow2L|e>lLIcP+mj8K+Y^9aiwbQ8)b9TO?Z6`=$y--v zitNQ8QUEzbObcQ-qV&T9eGyS4#ncK{3erRm3uW|@#gZqv$D(he`x#B)1+BFl3I4MX z=mg$(BF)YgEm^sh*+@scy)wSTxwNY;qxq?|+KDOnUcf{>K=VfkW-G!FEr>VUkYsnO z#gzDdU;8OKIT6}jL$uEewzilGXR_#{KagUnsfCK2RVTZgK{gH3?9G~t9^*HGv9tm* z^wcgJt@hI%h{Ah z0~C$CnUM{eb7>3Gh7Lpe{Ukier3Je_Tr#Q=Nt-QOK4MDcT9rm--_44+^$y=j(b}>j`+F;dTwrMS~4vIBkHTfny7S`^bxB& zlYoywQxzgqxC*U(-(-DA-{3s>JiVY?M<#x^w)Mfn!+ikzbBoq^T*+=+jA400+=mCU z(lLhgX!mFwV`<-^7s;i?+yzGbwfNkwuc#-!D@2-V%L&lHPPkDu0& zn{vDGm1EWtPDC~YZMEH5U_9_?WSt|~3n6Ur*oQu$X#xgP1^zJ~{iw5&`e-vB+*c&l9QfN7gGKt=_~0glc#;B z&}G!HIHf+rSOX~=pd7%Z5YLl*n7q_e7GDzUn7Ebf&!CYok?fsp!I{NmK@+Hao&Tc_ zU8_a1MJG77LO)x6p&GU4tR$C~lL&nYO@oF*pDprrXfZU#1;^DAYZOUtRD5B`qoI@@ z$@BeESFKhp{1x^UOsydB?s6o4qvPn&I`Rk)#sD)}VP2tHpa%8AM&n#8eAHj=6`Q*e$&X3c+Tp=`XrGy(KZn+F}he)&vlGsETh=DSYs6I!02G* zFy(ML##s_ISTN|FIhbL=d$auG#b!l)xL@6c!*ScD*k(Ls8f6nD1*INkGH)jzMVd=m zPufb_8gEy%oiTn5rtymLT8%k4F?F|J*OsB`l~8tB`Az}Hu=u;#60tJt!YV^}u6otL zeX}@D69K7O(^?&GX$=)FLoSQ=T6@{zT3KaT@0t~wO#*vA4}rc~zLH9BDa?+@Znny_ z%3ZLgD~>H0X3aIu73mbT{^%BQAiiY6SP`C~6sHu`qoy-CI;U${KUh6T;J9kX$XmkK z(3Mj$V`Nk+KmJyzO|<(-u5bD|8@|{p!&ez(vt$QKJ)ym1yoBJ0z3_Q~yn8x{ z@M3NV4H&z(wZ2d{a1gnK!{pCYIigfBpJ6n>GH_=g7oXt4{)15ta`$1kg*qztSWX+x zNDH6G*`s>XiA%;?7yW7zQEOi9&h4|4VpCUjmu!S8gs}>*x)KWF*C+?^&0i+JH;6TO zUmJG{-E-J05Em8?7mpIZ-{jR)62Nt4b%lQAbuoK5vA=dPajAhRh*^ra4t$3xkExF% zj?axpjOB^h)`Hg35b}uYiv_*uC>gr+4;ioLqIi4+W~3J$5dbXYdI-7MT%sa%OvX$f6Js^**L2aE5)%S8z> z3ArphMZ-mZ+J{!3RgXwBSVdH@nem7*A-URkbHOt8z4l|fdiQfAhhtTlJ&bG{QeI!H z9xF!Dr!zb=!mo1pFb7wFW%X+H-&;LePFr^AqwYEExqQlJ%jfM0Z}Peh`_aO;>v*^9 z`FOeM^e1(1vzGdWXOOev)PA3QUli=&yi3H~sMcGpiY80Ds=d`t=}*#H3rLOu zle8+KD9iilcj?aO2d}~(ybv}(h}Tyyf5|AXD4**KPJVBG@X5Vs8hQCcFS!I> zE@UPWkP(2~3A>6K|Dz!@$zuDd{YK56Gjii`)m73`+3O~(fVB&=ORl+-`hbE^W=)>GS>|I?zTo6v)zqkKQ+F|xUacFd{pi0)RF5Y(b2$=ot z?!1jXg5`JbA-~x*%+6NU8aklg8X;g#2rnl;$dp;y)7}Z?wV(n74B<9q0cm+!xg-2Q zDEiG$Mvu?mbp0mOFl*ZTz?__|5U%bZ9!{bE82f!R!7MAx4TcCoxVd@2ygU#dh%p$< zgu4Gz^H<=12Gt(n1Oq{Sk)KcuARA9>6#eOE&ruv285Ha3))3?`hRB7x}ouY=K}9LAbcoZ&wtCnU~W`?{~?3$q5Ap{8MolSWjq3??EH5<9thvR`XU6m9Wei_C-AR& z{5=1*%g-Z#3ekVJ6#@&P2K7H=+&uq_Oz2;I7UJRkR}6%BZ*%nzeZ0J=$@N=?aJRB| zg1P_Xy6M>aq4FjKLQ%n7QPboXTTIEt))h5pezK;NWKpw5R8YVQ%qM6Aw&msHhYCRW vc?J1+p|((n0F0N(_ base: AnyObject, key: UnsafePointer, initialiser: () -> T) -> T -{ +func associatedObject(_ base: AnyObject, key: UnsafePointer, initialiser: () -> T) -> T { if let associated = objc_getAssociatedObject(base, key) as? T { return associated } @@ -10,8 +9,7 @@ func associatedObject(_ base: AnyObject, key: UnsafePointer return associated } -func lazyAssociatedObject(_ base: AnyObject, key: UnsafePointer, initialiser: () -> T?) -> T? -{ +func lazyAssociatedObject(_ base: AnyObject, key: UnsafePointer, initialiser: () -> T?) -> T? { if let associated = objc_getAssociatedObject(base, key) as? T { return associated } diff --git a/litewallet/BRAPIClient+Events.swift b/litewallet/BRAPIClient+Events.swift index fd0490100..c7f41e1f9 100644 --- a/litewallet/BRAPIClient+Events.swift +++ b/litewallet/BRAPIClient+Events.swift @@ -28,7 +28,7 @@ private var emKey: UInt8 = 1 extension BRAPIClient { var events: EventManager? { return lazyAssociatedObject(self, key: &emKey) { - return EventManager(adaptor: self) + EventManager(adaptor: self) } } @@ -90,10 +90,10 @@ class EventManager { defer { isSubscribed = true } // slurp up app lifecycle events and save them as events - eventToNotifications.forEach { key, value in + for (key, value) in eventToNotifications { NotificationCenter.default.addObserver(forName: value, object: nil, - queue: self.queue, + queue: queue, using: { [weak self] note in self?.saveEvent(key) if note.name == UIScene.didEnterBackgroundNotification { @@ -121,7 +121,7 @@ class EventManager { func down() { guard isSubscribed else { return } - eventToNotifications.forEach { _, value in + for (_, value) in eventToNotifications { NotificationCenter.default.removeObserver(self, name: value, object: nil) } } @@ -163,8 +163,7 @@ class EventManager { let dataToSerialize = myself.buffer.map { $0.dictionary } guard JSONSerialization.isValidJSONObject(dataToSerialize) else { print("Invalid json"); return } var error: NSError? - if JSONSerialization.writeJSONObject(dataToSerialize, to: outputStream, options: [], error: &error) == 0 - { + if JSONSerialization.writeJSONObject(dataToSerialize, to: outputStream, options: [], error: &error) == 0 { print("[EventManager] Unable to write JSON for events file: \(String(describing: error))") } else { print("[EventManager] saved \(myself.buffer.count) events to disk") @@ -178,7 +177,7 @@ class EventManager { queue.addOperation { [weak self] in guard let myself = self else { return } guard let files = try? FileManager.default.contentsOfDirectory(atPath: myself.unsentDataDirectory) else { return } - files.forEach { baseName in + for baseName in files { let fileName = NSString(string: myself.unsentDataDirectory).appendingPathComponent("/\(baseName)") do { try FileManager.default.removeItem(atPath: fileName) diff --git a/litewallet/BRAPIClient+KV.swift b/litewallet/BRAPIClient+KV.swift index debcb6e01..e850a1263 100644 --- a/litewallet/BRAPIClient+KV.swift +++ b/litewallet/BRAPIClient+KV.swift @@ -37,8 +37,7 @@ private class KVStoreAdaptor: BRRemoteKVStoreAdaptor { }.resume() } - func put(_ key: String, value: [UInt8], version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) - { + func put(_ key: String, value: [UInt8], version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) { var req = URLRequest(url: client.url("/kv/1/\(key)")) req.httpMethod = "PUT" req.addValue("\(version)", forHTTPHeaderField: "If-None-Match") @@ -59,8 +58,7 @@ private class KVStoreAdaptor: BRRemoteKVStoreAdaptor { }.resume() } - func del(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) - { + func del(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) { var req = URLRequest(url: client.url("/kv/1/\(key)")) req.httpMethod = "DELETE" req.addValue("\(version)", forHTTPHeaderField: "If-None-Match") @@ -77,77 +75,87 @@ private class KVStoreAdaptor: BRRemoteKVStoreAdaptor { }.resume() } - func get(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, [UInt8], BRRemoteKVStoreError?) -> Void) - { + func get(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, [UInt8], BRRemoteKVStoreError?) -> Void) { var req = URLRequest(url: client.url("/kv/1/\(key)")) req.httpMethod = "GET" req.addValue("\(version)", forHTTPHeaderField: "If-None-Match") - client.dataTaskWithRequest(req as URLRequest, authenticated: true, retryCount: 0) - { dat, resp, err in - if let err = err { - self.client.log("[KV] GET key=\(key) err=\(err)") - return completionFunc(0, Date(timeIntervalSince1970: 0), [], .unknown) - } - guard let resp = resp, let v = resp.kvVersion, - let d = resp.kvDate, let dat = dat - else { - return completionFunc(0, Date(timeIntervalSince1970: 0), [], .unknown) - } - let ud = (dat as NSData).bytes.bindMemory(to: UInt8.self, capacity: dat.count) - let dp = UnsafeBufferPointer(start: ud, count: dat.count) - completionFunc(v, d, Array(dp), resp.kvError) - }.resume() + client.dataTaskWithRequest(req as URLRequest, authenticated: true, retryCount: 0) { dat, resp, err in + if let err = err { + self.client.log("[KV] GET key=\(key) err=\(err)") + return completionFunc(0, Date(timeIntervalSince1970: 0), [], .unknown) + } + guard let resp = resp, let v = resp.kvVersion, + let d = resp.kvDate, let dat = dat + else { + return completionFunc(0, Date(timeIntervalSince1970: 0), [], .unknown) + } + let ud = (dat as NSData).bytes.bindMemory(to: UInt8.self, capacity: dat.count) + let dp = UnsafeBufferPointer(start: ud, count: dat.count) + completionFunc(v, d, Array(dp), resp.kvError) + }.resume() } - func keys(_ completionFunc: @escaping ([(String, UInt64, Date, BRRemoteKVStoreError?)], BRRemoteKVStoreError?) -> Void) - { + func keys(_ completionFunc: @escaping ([(String, UInt64, Date, BRRemoteKVStoreError?)], BRRemoteKVStoreError?) -> Void) { var req = URLRequest(url: client.url("/kv/_all_keys")) req.httpMethod = "GET" - client.dataTaskWithRequest(req as URLRequest, authenticated: true, retryCount: 0) - { dat, resp, err in - if let err = err { - self.client.log("[KV] KEYS err=\(err)") + client.dataTaskWithRequest(req as URLRequest, authenticated: true, retryCount: 0) { dat, resp, err in + if let err = err { + self.client.log("[KV] KEYS err=\(err)") + return completionFunc([], .unknown) + } + + guard let resp = resp, let dat = dat, resp.statusCode == 200 else { + return completionFunc([], .unknown) + } + + // Data format validation (basic check) + guard dat.count >= MemoryLayout.size else { + self.client.log("Invalid data format. Too short.") + return completionFunc([], .unknown) + } + + // data is encoded as: + // LE32(num) + (num * (LEU8(keyLeng) + (keyLen * LEU32(char)) + LEU64(ver) + LEU64(msTs) + LEU8(del))) + var i = UInt(MemoryLayout.size) + let c = dat.uInt32(atOffset: 0) + var items = [(String, UInt64, Date, BRRemoteKVStoreError?)]() + + for _ in 0 ..< c { + let keyLen = UInt(dat.uInt32(atOffset: i)) + i += UInt(MemoryLayout.size) + + // Check if key length is within data bounds + guard keyLen <= UInt(dat.count) - i else { + self.client.log("Invalid data format. Key length exceeds data size.") return completionFunc([], .unknown) } - guard let resp = resp, let dat = dat, resp.statusCode == 200 + + let range: Range = Int(i) ..< Int(i + keyLen) + + guard let key = NSString(data: dat.subdata(in: range), + encoding: String.Encoding.utf8.rawValue) as String? else { + self.client.log("Well crap. Failed to decode a string.") return completionFunc([], .unknown) } - - // data is encoded as: - // LE32(num) + (num * (LEU8(keyLeng) + (keyLen * LEU32(char)) + LEU64(ver) + LEU64(msTs) + LEU8(del))) - var i = UInt(MemoryLayout.size) - let c = dat.uInt32(atOffset: 0) - var items = [(String, UInt64, Date, BRRemoteKVStoreError?)]() - for _ in 0 ..< c { - let keyLen = UInt(dat.uInt32(atOffset: i)) - i += UInt(MemoryLayout.size) - let range: Range = Int(i) ..< Int(i + keyLen) - guard let key = NSString(data: dat.subdata(in: range), - encoding: String.Encoding.utf8.rawValue) as String? - else { - self.client.log("Well crap. Failed to decode a string.") - return completionFunc([], .unknown) - } - i += keyLen - let ver = dat.uInt64(atOffset: i) - i += UInt(MemoryLayout.size) - let date = Date.withMsTimestamp(dat.uInt64(atOffset: i)) - i += UInt(MemoryLayout.size) - let deleted = dat.uInt8(atOffset: i) > 0 - i += UInt(MemoryLayout.size) - items.append((key, ver, date, deleted ? .tombstone : nil)) - self.client.log("keys: \(key) \(ver) \(date) \(deleted)") - } - completionFunc(items, nil) - }.resume() + i += keyLen + let ver = dat.uInt64(atOffset: i) + i += UInt(MemoryLayout.size) + let date = Date.withMsTimestamp(dat.uInt64(atOffset: i)) + i += UInt(MemoryLayout.size) + let deleted = dat.uInt8(atOffset: i) > 0 + i += UInt(MemoryLayout.size) + items.append((key, ver, date, deleted ? .tombstone : nil)) + self.client.log("keys: \(key) \(ver) \(date) \(deleted)") + } + completionFunc(items, nil) + }.resume() } } private extension HTTPURLResponse { var kvDate: Date? { - if let remDate = allHeaderFields["Last-Modified"] as? String, let dateDate = Date.fromRFC1123(remDate) - { + if let remDate = allHeaderFields["Last-Modified"] as? String, let dateDate = Date.fromRFC1123(remDate) { return dateDate } return nil diff --git a/litewallet/BRAPIClient+Wallet.swift b/litewallet/BRAPIClient+Wallet.swift index 8c7824a84..6204cf6bc 100644 --- a/litewallet/BRAPIClient+Wallet.swift +++ b/litewallet/BRAPIClient+Wallet.swift @@ -1,42 +1,48 @@ import Foundation -private let fallbackRatesURL = "https://api.loshan.co.uk/api/v1/rates" +private let fallbackRatesURL = "https://api-dev.lite-wallet.org/v1/rates" extension BRAPIClient { func feePerKb(_ handler: @escaping (_ fees: Fees, _ error: String?) -> Void) { let req = URLRequest(url: url("/fee-per-kb")) let task = dataTaskWithRequest(req) { _, _, _ in - // TODO: Refactor when mobile-api v0.4.0 is in prod let staticFees = Fees.usingDefaultValues handler(staticFees, nil) } task.resume() } - func exchangeRates(isFallback: Bool = false, _ handler: @escaping (_ rates: [Rate], _ error: String?) -> Void) - { + func exchangeRates(isFallback: Bool = false, _ handler: @escaping (_ rates: [Rate], _ error: String?) -> Void) { let request = isFallback ? URLRequest(url: URL(string: fallbackRatesURL)!) : URLRequest(url: URL(string: APIServer.baseUrl + "v1/rates")!) - _ = dataTaskWithRequest(request) { data, _, error in + dataTaskWithRequest(request) { data, _, error in if error == nil, let data = data, let parsedData = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) { if isFallback { guard let array = parsedData as? [Any] else { - return handler([], "/rates didn't return an array") + let properties = ["error_message": "is_fallback_no_rate_array_returned"] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) + return handler([], "::: /rates didn't return an array") } handler(array.compactMap { Rate(data: $0) }, nil) } else { guard let array = parsedData as? [Any] else { + let properties = ["error_message": "is_fallback_parsed_data_fail"] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) return handler([], "/rates didn't return an array") } handler(array.compactMap { Rate(data: $0) }, nil) } } else { if isFallback { + let properties = ["error_message": "is_fallback_no_rate_array_returned"] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) handler([], "Error fetching from fallback url") } else { + let properties: [String: String] = ["error_message": "is_fallback"] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) self.exchangeRates(isFallback: true, handler) } } diff --git a/litewallet/BRKeyExtension.swift b/litewallet/BRKeyExtension.swift index d5d4e1408..3a0868575 100644 --- a/litewallet/BRKeyExtension.swift +++ b/litewallet/BRKeyExtension.swift @@ -42,15 +42,14 @@ extension BRKey { // WIF private key mutating func privKey() -> String? { - return autoreleasepool - { // wrapping in autoreleasepool ensures sensitive memory is wiped and freed immediately - let count = BRKeyPrivKey(&self, nil, 0) - var data = CFDataCreateMutable(secureAllocator, count) as Data - data.count = count - guard data.withUnsafeMutableBytes({ BRKeyPrivKey(&self, $0, count) }) != 0 else { return nil } - return CFStringCreateFromExternalRepresentation(secureAllocator, data as CFData, - CFStringBuiltInEncodings.UTF8.rawValue) as String - } + return autoreleasepool { // wrapping in autoreleasepool ensures sensitive memory is wiped and freed immediately + let count = BRKeyPrivKey(&self, nil, 0) + var data = CFDataCreateMutable(secureAllocator, count) as Data + data.count = count + guard data.withUnsafeMutableBytes({ BRKeyPrivKey(&self, $0, count) }) != 0 else { return nil } + return CFStringCreateFromExternalRepresentation(secureAllocator, data as CFData, + CFStringBuiltInEncodings.UTF8.rawValue) as String + } } // encrypts key with passphrase diff --git a/litewallet/BRPeerManager.swift b/litewallet/BRPeerManager.swift index 8e58da18c..44e0e4900 100644 --- a/litewallet/BRPeerManager.swift +++ b/litewallet/BRPeerManager.swift @@ -90,13 +90,6 @@ class BRPeerManager { return BRPeerManagerEstimatedBlockHeight(cPtr) } - // Only show syncing view if more than 2 days behind - var shouldShowSyncingView: Bool { - let lastBlock = Date(timeIntervalSince1970: TimeInterval(lastBlockTimestamp)) - let cutoff = Date().addingTimeInterval(-24 * 60 * 60 * 2) // 2 days ago - return lastBlock.compare(cutoff) == .orderedAscending - } - // current network sync progress from 0 to 1 // startHeight is the block height of the most recent fully completed sync func syncProgress(fromStartHeight: UInt32) -> Double { @@ -115,17 +108,16 @@ class BRPeerManager { // publishes tx to litecoin network func publishTx(_ tx: BRTxRef, completion: @escaping (Bool, BRPeerManagerError?) -> Void) { - BRPeerManagerPublishTx(cPtr, tx, Unmanaged.passRetained(CompletionWrapper(completion)).toOpaque()) - { info, error in - guard let info = info else { return } - guard error == 0 - else { - let err = BRPeerManagerError.posixError(errorCode: error, description: String(cString: strerror(error))) - return Unmanaged.fromOpaque(info).takeRetainedValue().completion(false, err) - } - - Unmanaged.fromOpaque(info).takeRetainedValue().completion(true, nil) + BRPeerManagerPublishTx(cPtr, tx, Unmanaged.passRetained(CompletionWrapper(completion)).toOpaque()) { info, error in + guard let info = info else { return } + guard error == 0 + else { + let err = BRPeerManagerError.posixError(errorCode: error, description: String(cString: strerror(error))) + return Unmanaged.fromOpaque(info).takeRetainedValue().completion(false, err) } + + Unmanaged.fromOpaque(info).takeRetainedValue().completion(true, nil) + } } // number of connected peers that have relayed the given unconfirmed transaction diff --git a/litewallet/BRTxInputExtension.swift b/litewallet/BRTxInputExtension.swift index 9ef47a293..d49059848 100644 --- a/litewallet/BRTxInputExtension.swift +++ b/litewallet/BRTxInputExtension.swift @@ -18,9 +18,4 @@ extension BRTxInput { get { return [UInt8](UnsafeBufferPointer(start: script, count: scriptLen)) } set { BRTxInputSetScript(&self, newValue, newValue.count) } } - - var swiftSignature: [UInt8] { - get { return [UInt8](UnsafeBufferPointer(start: signature, count: sigLen)) } - set { BRTxInputSetSignature(&self, newValue, newValue.count) } - } } diff --git a/litewallet/BartyCrouch.swift b/litewallet/BartyCrouch.swift index d2ed0e571..af4fa82ad 100644 --- a/litewallet/BartyCrouch.swift +++ b/litewallet/BartyCrouch.swift @@ -3,29 +3,23 @@ import Foundation enum BartyCrouch { enum SupportedLanguage: String { // TODO: remove unsupported languages from the following cases list & add any missing languages - case arabic = "ar" case chineseSimplified = "zh-Hans" case chineseTraditional = "zh-Hant" case english = "en" case french = "fr" case german = "de" - case hindi = "hi" case indonesian = "id" case italian = "it" case japanese = "ja" case korean = "ko" - case malay = "ms" case portuguese = "pt" case russian = "ru" case spanish = "es" - case danish = "da" - case dutch = "nl" - case swedish = "sv" case turkey = "tr" + case ukrainian = "uk" } - static func translate(key: String, translations: [SupportedLanguage: String], comment _: String? = nil) -> String - { + static func translate(key: String, translations: [SupportedLanguage: String], comment _: String? = nil) -> String { let typeName = String(describing: BartyCrouch.self) let methodName = #function diff --git a/litewallet/Base.lproj/LaunchScreen.storyboard b/litewallet/Base.lproj/LaunchScreen.storyboard index a78a36743..b099ec32e 100644 --- a/litewallet/Base.lproj/LaunchScreen.storyboard +++ b/litewallet/Base.lproj/LaunchScreen.storyboard @@ -1,9 +1,9 @@ - + - + @@ -19,18 +19,29 @@ + + + + + + + + - + - + + - - + + + + @@ -42,5 +53,6 @@ + diff --git a/litewallet/BundleExtension.swift b/litewallet/BundleExtension.swift index b45b085a3..7494709f5 100644 --- a/litewallet/BundleExtension.swift +++ b/litewallet/BundleExtension.swift @@ -22,8 +22,16 @@ public extension Bundle { object_setClass(Bundle.main, BundleEx.self as AnyClass) } - if let temp = language { - guard let bundle = Bundle(path: Bundle.main.path(forResource: temp, ofType: "lproj")!) else { + if var temp = language { + if temp == "zh" { + temp = "zh-Hans" + } + + guard let path = Bundle.main.path(forResource: temp, ofType: "lproj") else { + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR) + return + } + guard let bundle = Bundle(path: path) else { LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR) return } diff --git a/litewallet/BuyHostingController.swift b/litewallet/BuyHostingController.swift new file mode 100644 index 000000000..4e7426b77 --- /dev/null +++ b/litewallet/BuyHostingController.swift @@ -0,0 +1,51 @@ +import Foundation +import SwiftUI + +/// Moonpay: List supported countries endpoint +/// https://api.moonpay.com/v3/countries +/// - Parameter alphaCode2Char: String +/// - Parameter alphaCode3Char: String +/// - Parameter isBuyAllowed: Bool +/// - Parameter isSellAllowed: Bool +/// - Parameter countryName: String (name) +/// - Parameter isAllowedInCountry: Bool (isAllowed) +/// =================================== +/// Unused JSON parameters +/// "isNftAllowed": false +/// "isBalanceLedgerWithdrawAllowed": true, +/// "isSelfServeHighRisk": true, +/// "continent": "Asia", +/// "supportedDocuments": [ +/// "passport", +/// "driving_licence", +/// "national_identity_card", +/// "residence_permit", +/// ], +/// "suggestedDocument": "national_identity_card" +/// - Returns: MoonpayCountryData +public struct MoonpayCountryData: Codable, Hashable { + var alphaCode2Char: String + var alphaCode3Char: String + var isBuyAllowed: Bool + var isSellAllowed: Bool + var countryName: String + var isAllowedInCountry: Bool +} + +class BuyHostingController: UIHostingController { + var contentView: BuyView + + var isLoaded: Bool = false + + init() { + let buyViewModel = BuyViewModel() + contentView = BuyView(viewModel: buyViewModel) + + super.init(rootView: contentView) + } + + @available(*, unavailable) + @MainActor dynamic required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/litewallet/BuyTableViewController.swift b/litewallet/BuyTableViewController.swift index c09af86aa..40d61f860 100644 --- a/litewallet/BuyTableViewController.swift +++ b/litewallet/BuyTableViewController.swift @@ -52,8 +52,7 @@ class BuyTableViewController: UITableViewController, SFSafariViewControllerDeleg private let currentWalletAddress: String = WalletManager.sharedInstance.wallet?.receiveAddress ?? "" @IBAction func didTapSimplex(_: Any) { - if let vcWKVC = UIStoryboard(name: "Buy", bundle: nil).instantiateViewController(withIdentifier: "BuyWKWebViewController") as? BuyWKWebViewController - { + if let vcWKVC = UIStoryboard(name: "Buy", bundle: nil).instantiateViewController(withIdentifier: "BuyWKWebViewController") as? BuyWKWebViewController { vcWKVC.currencyCode = currencyCode vcWKVC.currentWalletAddress = currentWalletAddress vcWKVC.uuidString = uuidString @@ -135,8 +134,7 @@ class BuyTableViewController: UITableViewController, SFSafariViewControllerDeleg } @objc private func didChangeCurrencyMoonpay() { - if let code = PartnerFiatOptions(rawValue: moonpaySegmentedControl.selectedSegmentIndex)?.description - { + if let code = PartnerFiatOptions(rawValue: moonpaySegmentedControl.selectedSegmentIndex)?.description { currencyCode = code } else { print("Error: Code not found: \(moonpaySegmentedControl.selectedSegmentIndex)") @@ -144,8 +142,7 @@ class BuyTableViewController: UITableViewController, SFSafariViewControllerDeleg } @objc private func didChangeCurrencySimplex() { - if let code = PartnerFiatOptions(rawValue: simplexCurrencySegmentedControl.selectedSegmentIndex)?.description - { + if let code = PartnerFiatOptions(rawValue: simplexCurrencySegmentedControl.selectedSegmentIndex)?.description { currencyCode = code } else { print("Error: Code not found: \(simplexCurrencySegmentedControl.selectedSegmentIndex)") diff --git a/litewallet/BuyTileView.swift b/litewallet/BuyTileView.swift new file mode 100644 index 000000000..9ab8be84f --- /dev/null +++ b/litewallet/BuyTileView.swift @@ -0,0 +1,45 @@ +import SwiftUI + +struct BuyTileView: View { + let codeCellHeight = 28.0 + let codeCellWidth = 80.0 + let smallPad = 3.0 + let buttonRegularFont: Font = .barlowSemiBold(size: 18.0) + + private var code: String + + init(code: String) { + self.code = code + } + + var body: some View { + ZStack { + RoundedRectangle(cornerRadius: 14.0) + .foregroundColor(.litewalletBlue) + .frame(width: codeCellWidth, + height: codeCellHeight, + alignment: .center) + .overlay { + RoundedRectangle(cornerRadius: 14.0) + .stroke(.white, lineWidth: 0.5) + .frame(width: codeCellWidth, + height: codeCellHeight, + alignment: .center) + } + Text(code) + .foregroundColor(.white) + .font(buttonRegularFont) + .frame(width: codeCellWidth, + height: codeCellHeight, + alignment: .center) + } + .frame(width: codeCellWidth, + height: codeCellHeight, + alignment: .center) + .padding(.all, smallPad) + } +} + +#Preview { + BuyTileView(code: "USD") +} diff --git a/litewallet/BuyView.swift b/litewallet/BuyView.swift new file mode 100644 index 000000000..0a1e47bdd --- /dev/null +++ b/litewallet/BuyView.swift @@ -0,0 +1,177 @@ +import SafariServices +import SwiftUI + +struct BuyView: View { + @ObservedObject + var viewModel: BuyViewModel + + let paragraphFont: Font = .barlowSemiBold(size: 20.0) + let calloutFont: Font = .barlowLight(size: 12.0) + let smallCalloutFont: Font = .barlowLight(size: 10.0) + + let genericPad = 25.0 + let selectButtonHeight = 35.0 + let smallPad = 6.0 + let buttonHeight = 44.0 + let pageHeight = 145.0 + let hugeFont = Font.barlowBold(size: 30.0) + let buttonLightFont: Font = .barlowLight(size: 15.0) + let buttonRegularFont: Font = .barlowSemiBold(size: 18.0) + let appDelegate = UIApplication.shared.delegate as! AppDelegate + + @State + private var shouldShowSafariVC = false + + @State + private var didTapCopy = false + // https://en.wikipedia.org/wiki/Template:Most_traded_currencies + /// As of 1716366977 + let rankedFiatCodes: [String] = ["USD", "EUR", "JPY", "GBP", + "CNY", "AUD", "CAD", "CHF", + "HKD", "SGD", "SEK", "NOK", + "NZD", "MXN", "TWD", "ZAR", + "BRL", "DKK", "PLN", "THB", + "ILS", "IDR", "CZK", "TRY", + "RON", "PEN"] + + init(viewModel: BuyViewModel) { + self.viewModel = viewModel + } + + var body: some View { + GeometryReader { geometry in + + let width = geometry.size.width + let height = geometry.size.height + + ZStack { + Color.liteWalletBlue.edgesIgnoringSafeArea(.all) + VStack { + Divider() + .frame(height: 1.0) + .background(.white) + .frame(maxWidth: .infinity, alignment: .center) + Text(S.BuyCenter.buyModalTitle.localize()) + .font(hugeFont) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, alignment: .center) + .frame(idealHeight: buttonHeight) + .foregroundColor(.white) + .padding([.leading, .trailing], genericPad) + .padding(.all, genericPad) + + HStack { + VStack { + Picker(S.BuyCenter.buyDetail.localize() + " " + viewModel.receivingAddress, + selection: $viewModel.selectedCode) + { + ForEach(rankedFiatCodes, id: \.self) { + BuyTileView(code: $0) + } + } + .pickerStyle(.wheel) + Spacer() + } + + VStack { + Text(S.BuyCenter.buyDetail.localize()) + .font(buttonRegularFont) + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .leading) + .frame(idealHeight: buttonHeight) + .foregroundColor(.white) + .padding([.leading, .trailing], genericPad) + .padding(.top, 0.0) + HStack { + Text(viewModel.receivingAddress) + .font(buttonLightFont) + .multilineTextAlignment(.leading) + .fixedSize(horizontal: false, vertical: true) + .frame(idealHeight: buttonHeight) + .foregroundColor(didTapCopy ? .litewalletBlue : .white) + .padding([.top, .bottom], smallPad) + Image(systemName: "doc.on.doc") + .foregroundColor(didTapCopy ? .litewalletBlue : .white) + } + .onTapGesture { + UIPasteboard.general.string = viewModel.receivingAddress + didTapCopy.toggle() + delay(0.2) { + didTapCopy.toggle() + } + } + .padding([.leading, .trailing], genericPad) + Button(action: { + if viewModel.receivingAddress != "" { + let timestamp = Int(Date().timeIntervalSince1970) + viewModel.urlString = APIServer.baseUrl + "moonpay/buy" + "?address=\(viewModel.receivingAddress)&idate=\(timestamp)&uid=\(viewModel.uuidString)&code=\(viewModel.selectedCode)" + self.shouldShowSafariVC = true + } + + }) { + ZStack { + RoundedRectangle(cornerRadius: bigButtonCornerRadius) + .frame(width: width * 0.4, height: selectButtonHeight, alignment: .center) + .foregroundColor(.litewalletDarkBlue) + + Text(S.BuyCenter.buyButtonTitle.localize() + " \(viewModel.selectedCode)") + .frame(width: width * 0.4, height: selectButtonHeight, alignment: .center) + .font(paragraphFont) + .foregroundColor(.white) + .overlay( + RoundedRectangle(cornerRadius: bigButtonCornerRadius) + .stroke(.white, lineWidth: 1.0) + ) + } + } + .padding([.leading, .trailing], genericPad) + .sheet(isPresented: $shouldShowSafariVC) { + if let url = URL(string: viewModel.urlString) { + MoonpaySafariView(url: url) + } + } + } + } + .frame(height: height * 0.2 + ) + + Divider() + .frame(height: 1.0) + .background(.white) + .frame(maxWidth: .infinity, alignment: .center) + HStack { + Text(S.BuyCenter.buyMoonpayDetail.localize()) + .font(smallCalloutFont) + .multilineTextAlignment(.leading) + .frame(idealHeight: buttonHeight) + .foregroundColor(.white) + .padding(.leading, genericPad) + Image("moonpay-white-logo") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: .infinity, alignment: .leading) + .frame(height: 14.0) + .opacity(0.8) + Spacer() + } + .frame(height: 20.0) + Spacer() + } + } + } + } +} + +struct MoonpaySafariView: UIViewControllerRepresentable { + let url: URL + + func makeUIViewController(context _: UIViewControllerRepresentableContext) -> SFSafariViewController { + return SFSafariViewController(url: url) + } + + func updateUIViewController(_: SFSafariViewController, context _: UIViewControllerRepresentableContext) {} +} + +#Preview { + BuyView(viewModel: BuyViewModel()) +} diff --git a/litewallet/BuyViewModel.swift b/litewallet/BuyViewModel.swift new file mode 100644 index 000000000..154874aa5 --- /dev/null +++ b/litewallet/BuyViewModel.swift @@ -0,0 +1,73 @@ +import Foundation +import SwiftUI +import UIKit + +class BuyViewModel: ObservableObject { + // MARK: - Combine Variables + + @Published + var receivingAddress: String = "" + + @Published + var urlString: String = "" + + @Published + var selectedCode: String = "USD" + + @Published + var uuidString: String = UIDevice.current.identifierForVendor?.uuidString ?? "" + + init() { + receivingAddress = WalletManager.sharedInstance.wallet?.receiveAddress ?? "" + } + + func fetchCurrenciesCountries(completion: @escaping ([MoonpayCountryData]) -> Void) { + let url = URL(string: "https://api.moonpay.com/v3/countries")! + var request = URLRequest(url: url) + request.httpMethod = "GET" + request.timeoutInterval = 10 + request.allHTTPHeaderFields = ["accept": "application/json"] + + let task = URLSession.shared.dataTask(with: request) { data, _, error in + + if error == nil { + DispatchQueue.main.sync { + if let jsonData = try? JSONSerialization.jsonObject(with: data ?? Data(), options: []), + let jsonArray = jsonData as? [[String: Any]] + { + var dataArray: [MoonpayCountryData] = [] + + /// Filters allowed currencies and the top ranked currencies + for element in jsonArray { + if element["isBuyAllowed"] as? Bool == true && + element["isAllowed"] as? Bool == true + { + let alpha2 = element["alpha2"] as? String + let alpha3 = element["alpha3"] as? String + let name = element["name"] as? String + let isBuyAllowed = element["isBuyAllowed"] as? Bool + let isSellAllowed = element["isSellAllowed"] as? Bool + let isAllowed = element["isAllowed"] as? Bool + + let mpCountryData = MoonpayCountryData(alphaCode2Char: alpha2 ?? "", + alphaCode3Char: alpha3 ?? "", + isBuyAllowed: isBuyAllowed ?? false, + isSellAllowed: isSellAllowed ?? false, + countryName: name ?? "", + isAllowedInCountry: isAllowed ?? false) + + dataArray.append(mpCountryData) + } + } + completion(dataArray) + } + } + } else { + let currencyError: [String: String] = ["error": error?.localizedDescription ?? ""] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: currencyError) + completion([]) + } + } + task.resume() + } +} diff --git a/litewallet/ChildViewTransitioningDelegate.swift b/litewallet/ChildViewTransitioningDelegate.swift index 8a33768de..656aafe32 100644 --- a/litewallet/ChildViewTransitioningDelegate.swift +++ b/litewallet/ChildViewTransitioningDelegate.swift @@ -11,18 +11,15 @@ class ChildViewTransitioningDelegate: NSObject { } extension ChildViewTransitioningDelegate: UIViewControllerTransitioningDelegate { - func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return nil } - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return nil } - func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? - { + func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { return nil } } diff --git a/litewallet/Constants/Constants+Events.swift b/litewallet/Constants/Constants+Events.swift index b2c8bc891..d600fc195 100644 --- a/litewallet/Constants/Constants+Events.swift +++ b/litewallet/Constants/Constants+Events.swift @@ -231,4 +231,13 @@ enum CustomEvent: String { /// Transactions info case _20240315_AI = "application_info" + + /// Disabled Push Notifications + case _20240506_DPN = "disabled_push_notifications" + + /// Stop Push Notifications + case _20240510_SPN = "stopped_push_notifications" + + /// Unsupported by Moonpay + case _20240527_UBM = "unsupported_by_moonpay" } diff --git a/litewallet/Constants/Functions.swift b/litewallet/Constants/Functions.swift index 4a89abb5b..9797a8558 100644 --- a/litewallet/Constants/Functions.swift +++ b/litewallet/Constants/Functions.swift @@ -25,25 +25,23 @@ func guardProtected(queue: DispatchQueue, callback: @escaping () -> Void) { } } -func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void -{ +func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void { return { [weak context] in guard let strongContext = context else { return } closure(strongContext) } } -func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void -{ +func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void { return { [weak context] arguments in guard let strongContext = context else { return } closure(strongContext, arguments) } } -/// Description: 1709405141 +/// Description: 1715876807 func tieredOpsFee(store: Store, amount: UInt64) -> UInt64 { - var usdRate = 67.000 + var usdRate = 83.000 if let liveRate = store.state.rates.filter({ $0.code == "USD" }).first?.rate { usdRate = liveRate } @@ -51,7 +49,8 @@ func tieredOpsFee(store: Store, amount: UInt64) -> UInt64 { switch usdInLTC { case 0 ..< 20.00: - return UInt64(0.20 / usdRate * 100_000_000) + let lowRate = usdInLTC * 0.01 + return UInt64(lowRate / usdRate * 100_000_000) case 20.00 ..< 50.00: return UInt64(0.30 / usdRate * 100_000_000) case 50.00 ..< 100.00: diff --git a/litewallet/Constants/Strings.swift b/litewallet/Constants/Strings.swift index 82a06f58f..019eae46e 100644 --- a/litewallet/Constants/Strings.swift +++ b/litewallet/Constants/Strings.swift @@ -132,17 +132,6 @@ enum S { static let loadingRequest = Localization(key: "Send.loadingRequest", value: "Loading Request", comment: "Loading request activity view message") static let insufficientFunds = Localization(key: "Send.insufficientFunds", value: "Insufficient Funds", comment: "Insufficient funds error") static let barItemTitle = Localization(key: "Send.barItemTitle", value: "Send", comment: "Send Bar Item Title") - - enum UnstoppableDomains { - static let placeholder = Localization(key: "Send.UnstoppableDomains.placeholder", value: "Enter a .crypto or .zil domain", comment: "Enter a .crypto,.zil domain") - static let simplePlaceholder = Localization(key: "Send.UnstoppableDomains.simpleplaceholder", value: "Enter domain", comment: "Enter domain") - static let enterA = Localization(key: "Send.UnstoppableDomains.enterA", value: "Enter a", comment: "Enter a") - static let domain = Localization(key: "Send.UnstoppableDomains.domain", value: "domain", comment: "domain") - static let lookup = Localization(key: "Send.UnstoppableDomains.lookup", value: "Lookup", comment: "Lookup") - static let lookupFailureHeader = Localization(key: "Send.UnstoppableDomains.lookupFailureHeader", value: "LookupFailureHeader", comment: "lookupFailureHeader") - static let lookupDomainError = Localization(key: "Send.UnstoppableDomains.lookupDomainError", value: "LookupDomainError", comment: "LookupDomainError") - static let udSystemError = Localization(key: "Send.UnstoppableDomains.udSystemError", value: "UDSystemError", comment: "UDSystemError") - } } enum Receive { @@ -249,6 +238,11 @@ enum S { enum BuyCenter { static let title = Localization(key: "BuyCenter.title", value: "Buy Litecoin", comment: "Buy Center Title") static let buyModalTitle = Localization(key: "BuyCenter.ModalTitle", value: "Buy Łitecoin", comment: "Buy Modal Title") + static let buyButtonTitle = Localization(key: "BuyCenter.buyButtonTitle", value: "Buy Ł with", comment: "Buy ButtonTitle") + static let buyDetail = Localization(key: "BuyCenter.buyDetail", value: "Ł will be sent to:", comment: "Buy ButtonTitle") + static let buyFiatDetail = Localization(key: "BuyCenter.buyFiatDetail", value: "Using:", comment: "Using fiat") + static let buyMoonpayDetail = Localization(key: "BuyCenter.buyMoonpayDetail", value: "Powered by:", comment: "Powered by") + enum Cells { static let moonpayTitle = Localization(key: "BuyCenter.moonpayTitle", value: "Moonpay", comment: "Moonpay Title") static let moonpayFinancialDetails = Localization(key: "BuyCenter.moonpayFinancialDetails", value: "ā€¢ Point 1 XXXXX\nā€¢ Point 2 XXXXnā€¢ XXX Point 3", comment: "Moonpay buy financial details") @@ -689,7 +683,6 @@ enum S { static let processingTime = Localization(key: "Confirmation.processingTime", value: "Processing time: This transaction will take %1$@ minutes to process.", comment: "eg. Processing time: This transaction will take 10-30 minutes to process.") static let processingAndDonationTime = Localization(key: "Confirmation.processingAndDonationTime", value: "Processing time: These transactions will take %1$@ minutes to process.", comment: "eg. Processing with Donation time: This transaction will take 10-30 minutes to process.") static let amountLabel = Localization(key: "Confirmation.amountLabel", value: "Amount to Send:", comment: "Amount to Send: ($1.00)") - static let donateLabel = Localization(key: "Confirmation.donateLabel", value: "Amount to Donate:", comment: "Amount to Donate: ($1.00)") static let totalLabel = Localization(key: "Confirmation.totalLabel", value: "Total Cost:", comment: "Total Cost: ($5.00)") static let amountDetailLabel = Localization(key: "Confirmation.amountDetailLabel", value: "Exchange details:", comment: "$53.09/L + 1.07%") diff --git a/litewallet/Currency.swift b/litewallet/Currency.swift index 74f771e3e..8bfb58b01 100644 --- a/litewallet/Currency.swift +++ b/litewallet/Currency.swift @@ -3,7 +3,10 @@ import UIKit class Currency { class func getSymbolForCurrencyCode(code: String) -> String? { - let result = Locale.availableIdentifiers.map { Locale(identifier: $0) }.first { $0.currencyCode == code } + print(" ::: \(code)") + let result = Locale.availableIdentifiers.map { + Locale(identifier: $0) + }.first { $0.currencyCode == code } return result?.currencySymbol } } @@ -12,7 +15,7 @@ enum PartnerFiatOptions: Int, CustomStringConvertible { case cad case aud case idr - case rub + case tur case jpy case eur case gbp @@ -27,7 +30,7 @@ enum PartnerFiatOptions: Int, CustomStringConvertible { case .cad: return "CAD" case .aud: return "AUD" case .idr: return "IDR" - case .rub: return "RUB" + case .tur: return "TRY" case .jpy: return "JPY" case .eur: return "EUR" case .gbp: return "GBP" @@ -40,7 +43,7 @@ enum PartnerFiatOptions: Int, CustomStringConvertible { case .cad: return 0 case .aud: return 1 case .idr: return 2 - case .rub: return 3 + case .tur: return 3 case .jpy: return 4 case .eur: return 5 case .gbp: return 6 diff --git a/litewallet/EnterPhraseViewModel.swift b/litewallet/EnterPhraseViewModel.swift index e972f6b3d..3bde39c73 100644 --- a/litewallet/EnterPhraseViewModel.swift +++ b/litewallet/EnterPhraseViewModel.swift @@ -1,4 +1,5 @@ import Foundation + class EnterPhraseViewModel: ObservableObject { // MARK: - Combine Variables diff --git a/litewallet/Environment.swift b/litewallet/Environment.swift index 89fd3a648..41b971fcf 100644 --- a/litewallet/Environment.swift +++ b/litewallet/Environment.swift @@ -126,7 +126,7 @@ struct E { }() static var isIPhone4: Bool { - return (UIScreen.main.bounds.size.height == 480.0) + return UIScreen.main.bounds.size.height == 480.0 } static var isIPhone5: Bool { @@ -134,12 +134,10 @@ struct E { } static var isIPhoneX: Bool { - return (UIScreen.main.bounds.size.height == 812.0) + return UIScreen.main.bounds.size.height == 812.0 } - static let is32Bit: Bool = { - MemoryLayout.size == MemoryLayout.size - }() + static let is32Bit: Bool = MemoryLayout.size == MemoryLayout.size static var screenHeight: CGFloat { return UIScreen.main.bounds.size.height diff --git a/litewallet/Extensions/Async.swift b/litewallet/Extensions/Async.swift index 22dbf25c6..ed43c3625 100644 --- a/litewallet/Extensions/Async.swift +++ b/litewallet/Extensions/Async.swift @@ -1,10 +1,9 @@ import Foundation enum Async { - static func parallel(callbacks: [(@escaping () -> Void) -> Void], completion: @escaping () -> Void) - { + static func parallel(callbacks: [(@escaping () -> Void) -> Void], completion: @escaping () -> Void) { let dispatchGroup = DispatchGroup() - callbacks.forEach { cb in + for cb in callbacks { dispatchGroup.enter() cb { dispatchGroup.leave() diff --git a/litewallet/Extensions/CGContext+Additions.swift b/litewallet/Extensions/CGContext+Additions.swift index 29b720a3a..c5196c930 100644 --- a/litewallet/Extensions/CGContext+Additions.swift +++ b/litewallet/Extensions/CGContext+Additions.swift @@ -4,8 +4,8 @@ extension CGContext { func addLineThrough(_ points: [(CGFloat, CGFloat)]) { guard let first = points.first else { return } move(to: CGPoint(x: first.0, y: first.1)) - points.dropFirst().forEach { - addLine(to: CGPoint(x: $0.0, y: $0.1)) + for point in points.dropFirst() { + addLine(to: CGPoint(x: point.0, y: point.1)) } } } diff --git a/litewallet/Extensions/NumberFormatter+Additions.swift b/litewallet/Extensions/NumberFormatter+Additions.swift index 7875041e4..8505fb57b 100644 --- a/litewallet/Extensions/NumberFormatter+Additions.swift +++ b/litewallet/Extensions/NumberFormatter+Additions.swift @@ -1,8 +1,7 @@ import Foundation extension NumberFormatter { - static func formattedString(amount: Satoshis, rate: Rate?, minimumFractionDigits: Int?, maxDigits: Int) -> String - { + static func formattedString(amount: Satoshis, rate: Rate?, minimumFractionDigits: Int?, maxDigits: Int) -> String { let displayAmount = Amount(amount: amount.rawValue, rate: rate ?? Rate.empty, maxDigits: maxDigits) var formatter: NumberFormatter var output = "" diff --git a/litewallet/Extensions/SafariServices+Extension.swift b/litewallet/Extensions/SafariServices+Extension.swift index 19605b897..d3f359a42 100644 --- a/litewallet/Extensions/SafariServices+Extension.swift +++ b/litewallet/Extensions/SafariServices+Extension.swift @@ -67,8 +67,8 @@ class SignupWebView: WKWebView, WKNavigationDelegate { webView.evaluateJavaScript(scriptContent, completionHandler: { height, error in - print(height) - print(error) + debugPrint(height ?? 0.0) + debugPrint(error) }) webView.evaluateJavaScript("document.body.innerHTML", completionHandler: { (value: Any!, error: Error!) in @@ -76,20 +76,8 @@ class SignupWebView: WKWebView, WKNavigationDelegate { // Error logic return } - // webView.invalidateIntrinsicContentSize() - // let js = "document.getElementById(\"MY_TEXTFIELD_ID\").focus();" - // webView.evaluateJavaScript(js) - - // webview.canBecomeFocused = true - - // document.getElementById('myID').focus(); - - // webview.scrollView.setZoomScale(0.3, animated: true) - - let result = value as? String - - print(value) + debugPrint(value ?? "Empty string") }) } } diff --git a/litewallet/Extensions/String+Additions.swift b/litewallet/Extensions/String+Additions.swift index 3808b4e38..c7e83d9a1 100644 --- a/litewallet/Extensions/String+Additions.swift +++ b/litewallet/Extensions/String+Additions.swift @@ -103,6 +103,39 @@ extension String { } } +// MARK: - Language code String + +extension String { + /// 14 Languages + /// Locale.current.identifier) + static func preferredLanguageInterest(currentId: String) -> String { + var codeId = "" + if (currentId == "zh_CN") || (currentId == "zh_SG") { + return "general-chinese-simplified" + } else if (currentId == "zh_TW") || (currentId == "zh_HK") { + return "general-chinese-traditional" + } else { + codeId = String(currentId.suffix(2)) + } + + switch codeId { + case "en": return "general-english" + case "fr": return "general-french" + case "de": return "general-german" + case "id": return "general-indonesian" + case "it": return "general-italian" + case "ja": return "general-japanese" + case "ko": return "general-korean" + case "pt": return "general-portuguese" + case "ru": return "general-russian" + case "es": return "general-spanish" + case "tr": return "general-turkish" + case "uk": return "general-ukrainian" + default: return "general-english" + } + } +} + extension UnicodeScalar { var nibble: UInt8? { if value >= 48, value <= 57 { diff --git a/litewallet/Extensions/UIView+AnimationAdditions.swift b/litewallet/Extensions/UIView+AnimationAdditions.swift index f716102c7..355be2644 100644 --- a/litewallet/Extensions/UIView+AnimationAdditions.swift +++ b/litewallet/Extensions/UIView+AnimationAdditions.swift @@ -1,8 +1,7 @@ import UIKit extension UIView { - static func spring(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) - { + static func spring(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) { if #available(iOS 10.0, *) { UIViewPropertyAnimator.springAnimation(duration, delay: delay, animations: animations, completion: { _ in completion(true) }) } else { @@ -10,8 +9,7 @@ extension UIView { } } - static func spring(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) - { + static func spring(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) { if #available(iOS 10.0, *) { UIViewPropertyAnimator.springAnimation(duration, animations: animations, completion: { _ in completion(true) }) } else { diff --git a/litewallet/Extensions/UIView+BRWAdditions.swift b/litewallet/Extensions/UIView+BRWAdditions.swift index d67869d60..fc0c99593 100644 --- a/litewallet/Extensions/UIView+BRWAdditions.swift +++ b/litewallet/Extensions/UIView+BRWAdditions.swift @@ -42,8 +42,7 @@ extension UIView { NSLayoutConstraint.activate(constraints.compactMap { $0 }) } - func constraint(_ attribute: NSLayoutConstraint.Attribute, toView: UIView, constant: CGFloat?) -> NSLayoutConstraint? - { + func constraint(_ attribute: NSLayoutConstraint.Attribute, toView: UIView, constant: CGFloat?) -> NSLayoutConstraint? { guard superview != nil else { assertionFailure("Superview cannot be nil when adding contraints"); return nil } translatesAutoresizingMaskIntoConstraints = false return NSLayoutConstraint(item: self, attribute: attribute, relatedBy: .equal, toItem: toView, attribute: attribute, multiplier: 1.0, constant: constant ?? 0.0) @@ -94,8 +93,7 @@ extension UIView { return NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal, toItem: toLeading, attribute: .leading, multiplier: 1.0, constant: constant) } - func constrainTopCorners(sidePadding: CGFloat, topPadding: CGFloat, topLayoutGuide: UILayoutSupport) - { + func constrainTopCorners(sidePadding: CGFloat, topPadding: CGFloat, topLayoutGuide: UILayoutSupport) { guard let view = superview else { assertionFailure("Superview cannot be nil when adding contraints"); return } constrain([ constraint(.leading, toView: view, constant: sidePadding), diff --git a/litewallet/Extensions/UIViewPropertyAnimator+BRWAdditions.swift b/litewallet/Extensions/UIViewPropertyAnimator+BRWAdditions.swift index 320650b69..e48569116 100644 --- a/litewallet/Extensions/UIViewPropertyAnimator+BRWAdditions.swift +++ b/litewallet/Extensions/UIViewPropertyAnimator+BRWAdditions.swift @@ -2,8 +2,7 @@ import UIKit @available(iOS 10.0, *) extension UIViewPropertyAnimator { - static func springAnimation(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) - { + static func springAnimation(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) { let springParameters = UISpringTimingParameters(dampingRatio: 0.7) let animator = UIViewPropertyAnimator(duration: duration, timingParameters: springParameters) animator.addAnimations(animations) @@ -11,8 +10,7 @@ extension UIViewPropertyAnimator { animator.startAnimation(afterDelay: delay) } - static func springAnimation(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) - { + static func springAnimation(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) { springAnimation(duration, delay: 0.0, animations: animations, completion: completion) } } diff --git a/litewallet/Extensions/UserDefaults+Additions.swift b/litewallet/Extensions/UserDefaults+Additions.swift index bb595aa6e..7c618dad3 100644 --- a/litewallet/Extensions/UserDefaults+Additions.swift +++ b/litewallet/Extensions/UserDefaults+Additions.swift @@ -53,7 +53,7 @@ extension UserDefaults { } else { currencyCode = defaults.string(forKey: defaultCurrencyCodeKey)! } - let acceptedCurrencyCodes = ["USD", "EUR", "JPY", "BGN", "CZK", "DKK", "GBP", "HUF", "PLN", "RON", "SEK", "CHF", "NOK", "HRK", "RUB", "TRY", "AUD", "BRL", "CAD", "CNY", "HKD", "IDR", "ILS", "INR", "KRW", "MXN", "MYR", "NZD", "PHP", "SDG", "THB", "ZAR"] + let acceptedCurrencyCodes = ["USD", "EUR", "JPY", "BGN", "CZK", "DKK", "GBP", "HUF", "PLN", "RON", "SEK", "CHF", "NOK", "HRK", "TRY", "AUD", "BRL", "CAD", "CNY", "HKD", "IDR", "ILS", "INR", "KRW", "MXN", "MYR", "NZD", "PHP", "SDG", "THB", "ZAR"] if !(acceptedCurrencyCodes.contains(currencyCode)) { return "USD" diff --git a/litewallet/FeeManager.swift b/litewallet/FeeManager.swift index 1ddb579a2..816555bbe 100644 --- a/litewallet/FeeManager.swift +++ b/litewallet/FeeManager.swift @@ -32,17 +32,16 @@ class FeeUpdater: Trackable { private let walletManager: WalletManager private let store: Store - private lazy var minFeePerKB: UInt64 = Fees.usingDefaultValues.economy - - private let maxFeePerKB = Fees.usingDefaultValues.luxury private var timer: Timer? - private let feeUpdateInterval: TimeInterval = 15 // meet Nyquist for api server interval (30) + private let feeUpdateInterval: TimeInterval = 3 + private var exchangeUpdater: ExchangeUpdater // MARK: - Public - init(walletManager: WalletManager, store: Store) { + init(walletManager: WalletManager, store: Store, exchangeUpdater: ExchangeUpdater) { self.walletManager = walletManager self.store = store + self.exchangeUpdater = exchangeUpdater } func refresh(completion: @escaping () -> Void) { @@ -79,5 +78,9 @@ class FeeUpdater: Trackable { @objc func intervalRefresh() { refresh(completion: {}) + exchangeUpdater.refresh(completion: { + /// DEV: For testing + /// NSLog("::: Rate updated") + }) } } diff --git a/litewallet/FlowControllers/MessageUIPresenter.swift b/litewallet/FlowControllers/MessageUIPresenter.swift index 89cf3adbf..6094810fe 100644 --- a/litewallet/FlowControllers/MessageUIPresenter.swift +++ b/litewallet/FlowControllers/MessageUIPresenter.swift @@ -110,15 +110,13 @@ class MessageUIPresenter: NSObject, Trackable { } extension MessageUIPresenter: MFMailComposeViewControllerDelegate { - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) - { + func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) { dismiss(controller) } } extension MessageUIPresenter: MFMessageComposeViewControllerDelegate { - func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) - { + func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) { dismiss(controller) } } diff --git a/litewallet/FlowControllers/StartNavigationDelegate.swift b/litewallet/FlowControllers/StartNavigationDelegate.swift index c6d54b5d4..8ac4726cb 100644 --- a/litewallet/FlowControllers/StartNavigationDelegate.swift +++ b/litewallet/FlowControllers/StartNavigationDelegate.swift @@ -7,8 +7,7 @@ class StartNavigationDelegate: NSObject, UINavigationControllerDelegate { self.store = store } - func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) - { + func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) { if viewController is RecoverWalletIntroViewController { navigationController.navigationBar.tintColor = .white navigationController.navigationBar.titleTextAttributes = [ diff --git a/litewallet/ForgotView.swift b/litewallet/ForgotView.swift index 49f4ddc21..e69de29bb 100644 --- a/litewallet/ForgotView.swift +++ b/litewallet/ForgotView.swift @@ -1,115 +0,0 @@ -import SwiftUI - -// DEV: To be removed in following issue https://github.com/litecoin-foundation/litewallet-ios/issues/177 -struct ForgotAlertView: View where Presenting: View { - // MARK: - Combine Variables - - @ObservedObject - var viewModel = ForgotAlertViewModel() - - @Binding - var isShowingForgot: Bool - - @State - var email: String = "" - - let presenting: Presenting - - var mainMessage: String - - @State - var detailMessage: String = S.LitecoinCard.resetPasswordDetail.localize() - - @State - var didCheckEmailAddress: Bool = false - - var body: some View { - GeometryReader { (_: GeometryProxy) in - HStack { - Spacer() - ZStack { - self.presenting.disabled(isShowingForgot) - VStack { - // Dismiss button - Button(action: { - viewModel.shouldDismissView { - self.isShowingForgot.toggle() - UIApplication.shared.endEditing() - } - - }) { - Image("whiteCross") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 15, - height: 15) - } - .frame(minWidth: 0, maxWidth: .infinity, alignment: .trailing) - - Text(S.LitecoinCard.forgotPassword.localize()) - .font(Font(UIFont.barlowSemiBold(size: 21.0))) - .padding(.bottom, 8) - .foregroundColor(Color.white) - - Text(detailMessage) - .font(Font(UIFont.barlowRegular(size: 18.0))) - .foregroundColor(Color.white) - .multilineTextAlignment(.leading) - .padding(.bottom, 12) - .padding([.leading, .trailing], 8) - .onReceive(viewModel.$detailMessage, perform: { updatedMessage in - detailMessage = updatedMessage - }) - - TextField(S.Receive.emailButton.localize(), text: $email) - .font(Font(UIFont.barlowMedium(size: 16.0))) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .keyboardType(.emailAddress) - .autocapitalization(.none) - .disableAutocorrection(true) - .padding(.all, 20) - - HStack { - // Reset password button - Button(action: { - withAnimation { - viewModel.emailString = email - viewModel.resetPassword { - DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) { - self.isShowingForgot.toggle() - UIApplication.shared.endEditing() - didCheckEmailAddress = true - detailMessage = S.LitecoinCard.resetPasswordDetail.localize() - } - } - } - }) { - Text(S.LitecoinCard.resetPassword.localize()) - .frame(minWidth: 0, maxWidth: .infinity) - .font(Font(UIFont.barlowBold(size: 20.0))) - .foregroundColor(Color.white) - .padding(.all, 8) - .overlay( - RoundedRectangle(cornerRadius: 4) - .stroke(Color(UIColor.white), lineWidth: 1) - ) - .padding([.leading, .trailing], 20) - .padding([.top, .bottom], 10) - } - } - } - .padding() - .overlay( - RoundedRectangle(cornerRadius: 8) - .stroke(Color.gray, lineWidth: 1.5) - ) - .background(Color(UIColor.liteWalletBlue)) - .cornerRadius(8) - .shadow(color: .black, radius: 10, x: 5, y: 5) - .opacity(self.isShowingForgot ? 1 : 0) - } - Spacer() - } - } - } -} diff --git a/litewallet/Functions.swift b/litewallet/Functions.swift index 7805bf290..03ad48682 100644 --- a/litewallet/Functions.swift +++ b/litewallet/Functions.swift @@ -23,16 +23,14 @@ func guardProtected(queue: DispatchQueue, callback: @escaping () -> Void) { } } -func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void -{ +func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void { return { [weak context] in guard let strongContext = context else { return } closure(strongContext) } } -func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void -{ +func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void { return { [weak context] arguments in guard let strongContext = context else { return } closure(strongContext, arguments) diff --git a/litewallet/LWActivityIndicator.swift b/litewallet/LWActivityIndicator.swift index c2605d15d..2833168ba 100644 --- a/litewallet/LWActivityIndicator.swift +++ b/litewallet/LWActivityIndicator.swift @@ -8,13 +8,11 @@ struct ActivityIndicator: UIViewRepresentable { let style: UIActivityIndicatorView.Style - func makeUIView(context _: UIViewRepresentableContext) -> UIActivityIndicatorView - { + func makeUIView(context _: UIViewRepresentableContext) -> UIActivityIndicatorView { return UIActivityIndicatorView(style: style) } - func updateUIView(_ uiView: UIActivityIndicatorView, context _: UIViewRepresentableContext) - { + func updateUIView(_ uiView: UIActivityIndicatorView, context _: UIViewRepresentableContext) { isAnimating ? uiView.startAnimating() : uiView.stopAnimating() } } diff --git a/litewallet/LocaleChangeViewModel.swift b/litewallet/LocaleChangeViewModel.swift index a15cb63c5..468372c13 100644 --- a/litewallet/LocaleChangeViewModel.swift +++ b/litewallet/LocaleChangeViewModel.swift @@ -1,4 +1,5 @@ import Foundation + class LocaleChangeViewModel: ObservableObject { // MARK: - Combine Variables diff --git a/litewallet/LockScreenHeaderView.swift b/litewallet/LockScreenHeaderView.swift index d40781860..b26823910 100644 --- a/litewallet/LockScreenHeaderView.swift +++ b/litewallet/LockScreenHeaderView.swift @@ -6,6 +6,12 @@ struct LockScreenHeaderView: View { @ObservedObject var viewModel: LockScreenViewModel + @State + private var fiatValue = "" + + @State + private var currentFiatValue = S.History.currentLitecoinValue.localize() + init(viewModel: LockScreenViewModel) { self.viewModel = viewModel } @@ -17,15 +23,24 @@ struct LockScreenHeaderView: View { .overlay( VStack { Spacer() - Text(" 1 LTC = \(viewModel.currentValueInFiat)") + Text(fiatValue) .font(Font(UIFont.barlowSemiBold(size: 16.0))) .foregroundColor(.white) - Text("\(S.History.currentLitecoinValue.localize()) \(viewModel.currencyCode)") + Text(currentFiatValue) .font(Font(UIFont.barlowRegular(size: 14.0))) .foregroundColor(.white) .padding(.bottom, 10) Divider().background(.white) }) + .onAppear { + Task { + fiatValue = " 1 LTC = \(viewModel.currentValueInFiat)" + currentFiatValue = "\(S.History.currentLitecoinValue.localize()) \(viewModel.currencyCode)" + } + } + .onChange(of: viewModel.currentValueInFiat) { newValue in + fiatValue = " 1 LTC = \(newValue)" + } } } diff --git a/litewallet/LockScreenHeaderViewModel.swift b/litewallet/LockScreenHeaderViewModel.swift index 1b9612bd4..379603b88 100644 --- a/litewallet/LockScreenHeaderViewModel.swift +++ b/litewallet/LockScreenHeaderViewModel.swift @@ -31,11 +31,17 @@ class LockScreenViewModel: ObservableObject, Subscriber { } // Price Label - let fiatRate = Double(round(100 * currentRate.rate / 100)) - let formattedFiatString = String(format: "%.02f", fiatRate) + let formattedRate = String(format: "%.02f", currentRate.rate) currencyCode = currentRate.code - let currencySymbol = Currency.getSymbolForCurrencyCode(code: currencyCode) ?? "" - currentValueInFiat = String(currencySymbol + formattedFiatString) + + if let symbol = Rate.symbolMap[currencyCode] { + currentValueInFiat = String(symbol + formattedRate) + } else { + let properties = ["error_message": "fiat_symbol_not_found", + "missing_code": "\(currencyCode)"] + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) + currentValueInFiat = String("" + formattedRate) + } } // MARK: - Add Subscriptions @@ -45,7 +51,6 @@ class LockScreenViewModel: ObservableObject, Subscriber { else { let errorDescription = "store_not_initialized" LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) - return } diff --git a/litewallet/LoginViewController.swift b/litewallet/LoginViewController.swift index 4f2445f07..96f3785a5 100644 --- a/litewallet/LoginViewController.swift +++ b/litewallet/LoginViewController.swift @@ -116,18 +116,17 @@ class LoginViewController: UIViewController, Subscriber, Trackable { guard let walletManager = self?.walletManager else { return } self?.isResetting = true let nc = UINavigationController() - let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin - { phrase in - let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) - nc.pushViewController(updatePin, animated: true) - updatePin.resetFromDisabledWillSucceed = { - self?.disabledView.isHidden = true - } - updatePin.resetFromDisabledSuccess = { - self?.authenticationSucceded() - LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) - } - }) + let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin { phrase in + let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) + nc.pushViewController(updatePin, animated: true) + updatePin.resetFromDisabledWillSucceed = { + self?.disabledView.isHidden = true + } + updatePin.resetFromDisabledSuccess = { + self?.authenticationSucceded() + LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) + } + }) recover.addCloseNavigationItem() nc.viewControllers = [recover] nc.navigationBar.tintColor = .darkText diff --git a/litewallet/MainViewController.swift b/litewallet/MainViewController.swift index a04291f98..2b9d5f1e3 100644 --- a/litewallet/MainViewController.swift +++ b/litewallet/MainViewController.swift @@ -66,14 +66,16 @@ class MainViewController: UIViewController, Subscriber, LoginViewControllerDeleg NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, - queue: nil) { _ in + queue: nil) + { _ in self.showJailbreakWarnings(isJailbroken: isJailbroken) } } NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, - queue: nil) { _ in + queue: nil) + { _ in if UserDefaults.writePaperPhraseDate != nil {} } @@ -86,29 +88,68 @@ class MainViewController: UIViewController, Subscriber, LoginViewControllerDeleg func didUnlockLogin() { let hasSeenAnnounce = UserDefaults.standard.bool(forKey: hasSeenAnnounceView) - guard let tabVC = UIStoryboard(name: "Main", bundle: nil) - .instantiateViewController(withIdentifier: "TabBarViewController") - as? TabBarViewController - else { - NSLog("TabBarViewController not intialized") - return + // Check Locale - Assume unsupported if nil + let currentLocaleCountry = Locale.current.regionCode ?? "RU" + var userIsMoonPaySupported = true + for unsupportedLocale in UnsupportedCountries.allCases { + let truncatedCode = unsupportedLocale.localeCode.suffix(2) + + if currentLocaleCountry == truncatedCode { + userIsMoonPaySupported = false + let unsupportedDict: [String: String] = ["unsupported_country": unsupportedLocale.localeCode] + LWAnalytics.logEventWithParameters(itemName: ._20240527_UBM, properties: unsupportedDict) + break + } } - tabVC.store = store - tabVC.walletManager = walletManager + if userIsMoonPaySupported { + guard let tabVC = UIStoryboard(name: "Main", bundle: nil) + .instantiateViewController(withIdentifier: "TabBarViewController") + as? TabBarViewController + else { + NSLog("TabBarViewController not intialized") + return + } - addChildViewController(tabVC, layout: { - tabVC.view.constrain(toSuperviewEdges: nil) - tabVC.view.alpha = 0 - tabVC.view.layoutIfNeeded() - }) + tabVC.store = store + tabVC.walletManager = walletManager + tabVC.userIsMoonPaySupported = userIsMoonPaySupported - UIView.animate(withDuration: 0.3, delay: 0.1, options: .transitionCrossDissolve, animations: { - tabVC.view.alpha = 1 - }) { _ in - NSLog("US MainView Controller presented") - } + addChildViewController(tabVC, layout: { + tabVC.view.constrain(toSuperviewEdges: nil) + tabVC.view.alpha = 0 + tabVC.view.layoutIfNeeded() + }) + + UIView.animate(withDuration: 0.3, delay: 0.1, options: .transitionCrossDissolve, animations: { + tabVC.view.alpha = 1 + }) { _ in + NSLog("US MainView Controller presented") + } + } else { + guard let noBuyTabVC = UIStoryboard(name: "Main", bundle: nil) + .instantiateViewController(withIdentifier: "NoBuyTabBarViewController") + as? NoBuyTabBarViewController + else { + NSLog("TabBarViewController not intialized") + return + } + + noBuyTabVC.store = store + noBuyTabVC.walletManager = walletManager + + addChildViewController(noBuyTabVC, layout: { + noBuyTabVC.view.constrain(toSuperviewEdges: nil) + noBuyTabVC.view.alpha = 0 + noBuyTabVC.view.layoutIfNeeded() + }) + UIView.animate(withDuration: 0.3, delay: 0.1, options: .transitionCrossDissolve, animations: { + noBuyTabVC.view.alpha = 1 + }) { _ in + NSLog("US MainView Controller presented") + } + } delay(4.0) { self.appDelegate.pushNotifications.registerForRemoteNotifications() } @@ -141,23 +182,21 @@ class MainViewController: UIViewController, Subscriber, LoginViewControllerDeleg } private func addAppLifecycleNotificationEvents() { - NotificationCenter.default.addObserver(forName: UIScene.didActivateNotification, object: nil, queue: nil) - { _ in - UIView.animate(withDuration: 0.1, animations: { - self.blurView.alpha = 0.0 - }, completion: { _ in - self.blurView.removeFromSuperview() - }) - } + NotificationCenter.default.addObserver(forName: UIScene.didActivateNotification, object: nil, queue: nil) { _ in + UIView.animate(withDuration: 0.1, animations: { + self.blurView.alpha = 0.0 + }, completion: { _ in + self.blurView.removeFromSuperview() + }) + } - NotificationCenter.default.addObserver(forName: UIScene.willDeactivateNotification, object: nil, queue: nil) - { _ in - if !self.isLoginRequired, !self.store.state.isPromptingBiometrics { - self.blurView.alpha = 1.0 - self.view.addSubview(self.blurView) - self.blurView.constrain(toSuperviewEdges: nil) - } + NotificationCenter.default.addObserver(forName: UIScene.willDeactivateNotification, object: nil, queue: nil) { _ in + if !self.isLoginRequired, !self.store.state.isPromptingBiometrics { + self.blurView.alpha = 1.0 + self.view.addSubview(self.blurView) + self.blurView.constrain(toSuperviewEdges: nil) } + } } private func showJailbreakWarnings(isJailbroken: Bool) { diff --git a/litewallet/MessageUIPresenter.swift b/litewallet/MessageUIPresenter.swift index 89cf3adbf..6094810fe 100644 --- a/litewallet/MessageUIPresenter.swift +++ b/litewallet/MessageUIPresenter.swift @@ -110,15 +110,13 @@ class MessageUIPresenter: NSObject, Trackable { } extension MessageUIPresenter: MFMailComposeViewControllerDelegate { - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) - { + func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) { dismiss(controller) } } extension MessageUIPresenter: MFMessageComposeViewControllerDelegate { - func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) - { + func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) { dismiss(controller) } } diff --git a/litewallet/ModalPresenter.swift b/litewallet/ModalPresenter.swift index 30abfb7ce..8a6ef7f5f 100644 --- a/litewallet/ModalPresenter.swift +++ b/litewallet/ModalPresenter.swift @@ -286,14 +286,6 @@ class ModalPresenter: Subscriber, Trackable { sendVC.onPublishSuccess = { [weak self] in self?.presentAlert(.sendSuccess, completion: {}) } - - sendVC.onResolvedSuccess = { [weak self] in - self?.presentAlert(.resolvedSuccess, completion: {}) - } - - sendVC.onResolutionFailure = { [weak self] failureMessage in - self?.presentFailureAlert(.failedResolution, errorMessage: failureMessage, completion: {}) - } return root } @@ -407,10 +399,9 @@ class ModalPresenter: Subscriber, Trackable { nc.setWhiteStyle() nc.delegate = myself.wipeNavigationDelegate let start = StartWipeWalletViewController { - let recover = EnterPhraseViewController(store: myself.store, walletManager: walletManager, reason: .validateForWipingWallet - { - myself.wipeWallet() - }) + let recover = EnterPhraseViewController(store: myself.store, walletManager: walletManager, reason: .validateForWipingWallet { + myself.wipeWallet() + }) nc.pushViewController(recover, animated: true) } start.addCloseNavigationItem(tintColor: .white) @@ -459,7 +450,17 @@ class ModalPresenter: Subscriber, Trackable { settingsNav.pushViewController(localeView, animated: true) }), Setting(title: S.Settings.sync.localize(), callback: { - settingsNav.pushViewController(ReScanViewController(store: self.store), animated: true) + let alert = UIAlertController(title: S.ReScan.alertTitle.localize(), message: S.ReScan.alertMessage.localize(), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: S.Button.cancel.localize(), style: .default, handler: { _ in + alert.dismiss(animated: true) + })) + alert.addAction(UIAlertAction(title: S.ReScan.alertAction.localize(), style: .default, handler: { _ in + self.store.trigger(name: .rescan) + LWAnalytics.logEventWithParameters(itemName: ._20200112_DSR) + alert.dismiss(animated: true) + self.topViewController?.dismiss(animated: true) + })) + self.topViewController?.present(alert, animated: true) }), Setting(title: S.UpdatePin.updateTitle.localize(), callback: strongify(self) { myself in let updatePin = UpdatePinViewController(store: myself.store, walletManager: walletManager, type: .update) @@ -679,8 +680,7 @@ class ModalPresenter: Subscriber, Trackable { presentLoginScan() } else { LWAnalytics.logEventWithParameters(itemName: ._20210427_HCIEEH) - if let presented = UIApplication.shared.windows.filter({ $0.isKeyWindow }).first?.rootViewController?.presentedViewController - { + if let presented = UIApplication.shared.windows.filter({ $0.isKeyWindow }).first?.rootViewController?.presentedViewController { presented.dismiss(animated: true, completion: { self.presentLoginScan() }) @@ -797,8 +797,7 @@ class ModalPresenter: Subscriber, Trackable { } class SecurityCenterNavigationDelegate: NSObject, UINavigationControllerDelegate { - func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) - { + func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) { guard let coordinator = navigationController.topViewController?.transitionCoordinator else { return } if coordinator.isInteractive { diff --git a/litewallet/MoonpayHelper.swift b/litewallet/MoonpayHelper.swift new file mode 100644 index 000000000..35e76a515 --- /dev/null +++ b/litewallet/MoonpayHelper.swift @@ -0,0 +1,68 @@ +import Foundation + +/// 14 Languages +enum UnsupportedCountries: Int, CaseIterable, Equatable, Identifiable { + case Afghanistan = 0 + case Barbados + case Belarus + case BurkinaFaso + case China + case Iceland + case Iraq + case Jamaica + case Japan + case Kosovo + case Liberia + case Macao + case Malaysia + case Malta + case Mongolia + case Morocco + case Myanmar + case Nicaragua + case Pakistan + case Panama + case Russia + case Senegal + case DemocraticRepCongo + case Uganda + case Ukraine + case Venezuela + case Yemen + case Zimbabwe + + var id: UnsupportedCountries { self } + + var localeCode: String { + switch self { + case .Afghanistan: return "fa_AF" + case .Barbados: return "en_BB" + case .Belarus: return "be_BY" + case .BurkinaFaso: return "fr_BF" + case .China: return "zh_CN" + case .Iceland: return "is_IS" + case .Iraq: return "ar_IQ" + case .Jamaica: return "en_JM" + case .Japan: return "jp_JP" + case .Kosovo: return "sq_XK" + case .Liberia: return "en_LR" + case .Macao: return "zh_MO" + case .Malaysia: return "ms_MY" + case .Malta: return "mt_MT" + case .Mongolia: return "mn_MN" + case .Morocco: return "ar_MA" + case .Myanmar: return "my_MM" + case .Nicaragua: return "es_NI" + case .Pakistan: return "ur_PK" + case .Panama: return "es_PA" + case .Russia: return "ru_RU" + case .Senegal: return "fr_SN" + case .DemocraticRepCongo: return "fr_CD" + case .Uganda: return "en_UG" + case .Ukraine: return "uk_UA" + case .Venezuela: return "es_VE" + case .Yemen: return "ar_YE" + case .Zimbabwe: return "en_ZW" + } + } +} diff --git a/litewallet/NoBuyTabBarViewController.swift b/litewallet/NoBuyTabBarViewController.swift new file mode 100644 index 000000000..b78189ac2 --- /dev/null +++ b/litewallet/NoBuyTabBarViewController.swift @@ -0,0 +1,419 @@ +import Foundation +import UIKit + +class NoBuyTabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDelegate { + let kInitialChildViewControllerIndex = 0 // TransactionsViewController + @IBOutlet var headerView: UIView! + @IBOutlet var containerView: UIView! + @IBOutlet var tabBar: UITabBar! + @IBOutlet var settingsButton: UIButton! + @IBOutlet var walletBalanceLabel: UILabel! + + var primaryBalanceLabel: UpdatingLabel? + var secondaryBalanceLabel: UpdatingLabel? + private let largeFontSize: CGFloat = 24.0 + private let smallFontSize: CGFloat = 12.0 + private var hasInitialized = false + private let dateFormatter = DateFormatter() + private let equalsLabel = UILabel(font: .barlowMedium(size: 12), color: .whiteTint) + private var regularConstraints: [NSLayoutConstraint] = [] + private var swappedConstraints: [NSLayoutConstraint] = [] + private let currencyTapView = UIView() + private let storyboardNames: [String] = ["Transactions", "Send", "Receive"] + var storyboardIDs: [String] = ["TransactionsViewController", "SendLTCViewController", "ReceiveLTCViewController"] + var viewControllers: [UIViewController] = [] + var activeController: UIViewController? + var updateTimer: Timer? + var store: Store? + var walletManager: WalletManager? + var userIsMoonPaySupported: Bool? + var exchangeRate: Rate? { + didSet { setBalances() } + } + + private var balance: UInt64 = 0 { + didSet { setBalances() } + } + + var isLtcSwapped: Bool? { + didSet { setBalances() } + } + + @IBAction func showSettingsAction(_: Any) { + guard let store = store + else { + NSLog("ERROR: Store not set") + return + } + store.perform(action: RootModalActions.Present(modal: .menu)) + } + + override func viewDidLoad() { + super.viewDidLoad() + setupModels() + setupViews() + configurePriceLabels() + addSubscriptions() + dateFormatter.setLocalizedDateFormatFromTemplate("MMM d, h:mm a") + + addViewControllers() + + updateTimer = Timer.scheduledTimer(withTimeInterval: 30.0, repeats: true) { _ in + self.setBalances() + } + + guard let array = tabBar.items + else { + NSLog("ERROR: no items found") + return + } + tabBar.selectedItem = array[kInitialChildViewControllerIndex] + + NotificationCenter.default.addObserver(self, selector: #selector(languageChanged), name: .languageChangedNotification, object: nil) + } + + deinit { + NotificationCenter.default.removeObserver(self, name: .languageChangedNotification, object: nil) + self.updateTimer = nil + } + + @objc + func languageChanged() { + walletBalanceLabel.text = S.ManageWallet.balance.localize() + ":" + localizeTabBar() + viewControllers = [] + addViewControllers() + guard let array = tabBar.items else { return } + tabBar.selectedItem = array[kInitialChildViewControllerIndex] + displayContentController(contentController: viewControllers[0]) + } + + func addViewControllers() { + for (index, storyboardID) in storyboardIDs.enumerated() { + if storyboardID == "BuyHostingController" && (userIsMoonPaySupported != nil) { + let hostingController = BuyHostingController() + viewControllers.append(hostingController) + } else { + let controller = UIStoryboard(name: storyboardNames[index], bundle: nil).instantiateViewController(withIdentifier: storyboardID) + viewControllers.append(controller) + } + } + } + + private func setupModels() { + guard let store = store else { return } + + isLtcSwapped = store.state.isLtcSwapped + + if let rate = store.state.currentRate { + exchangeRate = rate + let placeholderAmount = Amount(amount: 0, rate: rate, maxDigits: store.state.maxDigits) + secondaryBalanceLabel = UpdatingLabel(formatter: placeholderAmount.localFormat) + primaryBalanceLabel = UpdatingLabel(formatter: placeholderAmount.ltcFormat) + } else { + secondaryBalanceLabel = UpdatingLabel(formatter: NumberFormatter()) + primaryBalanceLabel = UpdatingLabel(formatter: NumberFormatter()) + } + } + + private func setupViews() { + walletBalanceLabel.text = S.ManageWallet.balance.localize() + ":" + + headerView.backgroundColor = .liteWalletBlue + tabBar.barTintColor = .liteWalletBlue + containerView.backgroundColor = .liteWalletBlue + view.backgroundColor = .liteWalletBlue + } + + private func configurePriceLabels() { + // TODO: Debug the reizing of label...very important + guard let primaryLabel = primaryBalanceLabel, + let secondaryLabel = secondaryBalanceLabel + else { + NSLog("ERROR: Price labels not initialized") + return + } + + let priceLabelArray = [primaryBalanceLabel, secondaryBalanceLabel, equalsLabel] + + for (_, view) in priceLabelArray.enumerated() { + view?.backgroundColor = .clear + view?.textColor = .white + } + + primaryLabel.font = UIFont.barlowSemiBold(size: largeFontSize) + secondaryLabel.font = UIFont.barlowSemiBold(size: largeFontSize) + + equalsLabel.text = "=" + headerView.addSubview(primaryLabel) + headerView.addSubview(secondaryLabel) + headerView.addSubview(equalsLabel) + headerView.addSubview(currencyTapView) + + secondaryLabel.constrain([ + secondaryLabel.constraint(.firstBaseline, toView: primaryLabel, constant: 0.0), + ]) + + equalsLabel.translatesAutoresizingMaskIntoConstraints = false + primaryLabel.translatesAutoresizingMaskIntoConstraints = false + regularConstraints = [ + primaryLabel.firstBaselineAnchor.constraint(equalTo: headerView.bottomAnchor, constant: -12), + primaryLabel.leadingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: C.padding[1] * 1.25), + equalsLabel.firstBaselineAnchor.constraint(equalTo: primaryLabel.firstBaselineAnchor, constant: 0), + equalsLabel.leadingAnchor.constraint(equalTo: primaryLabel.trailingAnchor, constant: C.padding[1] / 2.0), + secondaryLabel.leadingAnchor.constraint(equalTo: equalsLabel.trailingAnchor, constant: C.padding[1] / 2.0), + ] + + swappedConstraints = [ + secondaryLabel.firstBaselineAnchor.constraint(equalTo: headerView.bottomAnchor, constant: -12), + secondaryLabel.leadingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: C.padding[1] * 1.25), + equalsLabel.firstBaselineAnchor.constraint(equalTo: secondaryLabel.firstBaselineAnchor, constant: 0), + equalsLabel.leadingAnchor.constraint(equalTo: secondaryLabel.trailingAnchor, constant: C.padding[1] / 2.0), + primaryLabel.leadingAnchor.constraint(equalTo: equalsLabel.trailingAnchor, constant: C.padding[1] / 2.0), + ] + + if let isLTCSwapped = isLtcSwapped { + NSLayoutConstraint.activate(isLTCSwapped ? swappedConstraints : regularConstraints) + } + + currencyTapView.constrain([ + currencyTapView.leadingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: 0), + currencyTapView.trailingAnchor.constraint(equalTo: settingsButton.leadingAnchor, constant: -C.padding[5]), + currencyTapView.topAnchor.constraint(equalTo: primaryLabel.topAnchor, constant: 0), + currencyTapView.bottomAnchor.constraint(equalTo: primaryLabel.bottomAnchor, constant: C.padding[1]), + ]) + + let gr = UITapGestureRecognizer(target: self, action: #selector(currencySwitchTapped)) + currencyTapView.addGestureRecognizer(gr) + } + + // MARK: - Adding Subscriptions + + private func addSubscriptions() { + guard let store = store + else { + NSLog("ERROR - Store not passed") + return + } + + guard let primaryLabel = primaryBalanceLabel, + let secondaryLabel = secondaryBalanceLabel + else { + NSLog("ERROR: Price labels not initialized") + return + } + + store.subscribe(self, selector: { $0.walletState.syncProgress != $1.walletState.syncProgress }, + callback: { _ in + self.tabBar.selectedItem = self.tabBar.items?.first + }) + + store.lazySubscribe(self, + selector: { $0.isLtcSwapped != $1.isLtcSwapped }, + callback: { self.isLtcSwapped = $0.isLtcSwapped }) + store.lazySubscribe(self, + selector: { $0.currentRate != $1.currentRate }, + callback: { + if let rate = $0.currentRate { + let placeholderAmount = Amount(amount: 0, rate: rate, maxDigits: $0.maxDigits) + secondaryLabel.formatter = placeholderAmount.localFormat + primaryLabel.formatter = placeholderAmount.ltcFormat + } + self.exchangeRate = $0.currentRate + }) + + store.lazySubscribe(self, + selector: { $0.maxDigits != $1.maxDigits }, + callback: { + if let rate = $0.currentRate { + let placeholderAmount = Amount(amount: 0, rate: rate, maxDigits: $0.maxDigits) + secondaryLabel.formatter = placeholderAmount.localFormat + primaryLabel.formatter = placeholderAmount.ltcFormat + self.setBalances() + } + }) + + store.subscribe(self, + selector: { $0.walletState.balance != $1.walletState.balance }, + callback: { state in + if let balance = state.walletState.balance { + self.balance = balance + self.setBalances() + } + }) + } + + /// This is called when the price changes + private func setBalances() { + guard let rate = exchangeRate, let store = store, let isLTCSwapped = isLtcSwapped + else { + NSLog("ERROR: Rate, Store not initialized") + return + } + guard let primaryLabel = primaryBalanceLabel, + let secondaryLabel = secondaryBalanceLabel + else { + NSLog("ERROR: Price labels not initialized") + return + } + + let amount = Amount(amount: balance, rate: rate, maxDigits: store.state.maxDigits) + + if !hasInitialized { + let amount = Amount(amount: balance, rate: exchangeRate!, maxDigits: store.state.maxDigits) + NSLayoutConstraint.deactivate(isLTCSwapped ? regularConstraints : swappedConstraints) + NSLayoutConstraint.activate(isLTCSwapped ? swappedConstraints : regularConstraints) + primaryLabel.setValue(amount.amountForLtcFormat) + secondaryLabel.setValue(amount.localAmount) + if isLTCSwapped { + primaryLabel.transform = transform(forView: primaryLabel) + } else { + secondaryLabel.transform = transform(forView: secondaryLabel) + } + hasInitialized = true + } else { + if primaryLabel.isHidden { + primaryLabel.isHidden = false + } + + if secondaryLabel.isHidden { + secondaryLabel.isHidden = false + } + } + + primaryLabel.setValue(amount.amountForLtcFormat) + secondaryLabel.setValue(amount.localAmount) + + if !isLTCSwapped { + primaryLabel.transform = .identity + secondaryLabel.transform = transform(forView: secondaryLabel) + } else { + secondaryLabel.transform = .identity + primaryLabel.transform = transform(forView: primaryLabel) + } + } + + /// Transform LTC and Fiat Balances + /// - Parameter forView: Views + /// - Returns: the inverse transform + private func transform(forView: UIView) -> CGAffineTransform { + forView.transform = .identity + let scaleFactor: CGFloat = smallFontSize / largeFontSize + let deltaX = forView.frame.width * (1 - scaleFactor) + let deltaY = forView.frame.height * (1 - scaleFactor) + let scale = CGAffineTransform(scaleX: scaleFactor, y: scaleFactor) + return scale.translatedBy(x: -deltaX, y: deltaY / 2.0) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + localizeTabBar() + } + + func localizeTabBar() { + guard let array = tabBar.items + else { + NSLog("ERROR: no items found") + return + } + + for item in array { + switch item.tag { + case 0: item.title = S.History.barItemTitle.localize() + case 1: item.title = S.Send.barItemTitle.localize() + case 2: item.title = S.Receive.barItemTitle.localize() + default: + item.title = "NO-TITLE" + NSLog("ERROR: UITabbar item count is wrong") + } + } + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + displayContentController(contentController: viewControllers[kInitialChildViewControllerIndex]) + } + + func displayContentController(contentController: UIViewController) { + // MARK: - Tab View Controllers Configuration + + switch NSStringFromClass(contentController.classForCoder) { + case "litewallet.TransactionsViewController": + + guard let transactionVC = contentController as? TransactionsViewController + else { + return + } + + transactionVC.store = store + transactionVC.walletManager = walletManager + transactionVC.isLtcSwapped = store?.state.isLtcSwapped + + case "litewallet.SendLTCViewController": + guard let sendVC = contentController as? SendLTCViewController + else { + return + } + + sendVC.store = store + + case "litewallet.ReceiveLTCViewController": + guard let receiveVC = contentController as? ReceiveLTCViewController + else { + return + } + receiveVC.store = store + + default: + fatalError("Tab viewController not set") + } + exchangeRate = TransactionManager.sharedInstance.rate + + addChild(contentController) + contentController.view.frame = containerView.frame + view.addSubview(contentController.view) + contentController.didMove(toParent: self) + activeController = contentController + } + + func hideContentController(contentController: UIViewController) { + contentController.willMove(toParent: nil) + contentController.view.removeFromSuperview() + contentController.removeFromParent() + } + + func tabBar(_: UITabBar, didSelect item: UITabBarItem) { + if let tempActiveController = activeController { + hideContentController(contentController: tempActiveController) + } + + // DEV: This happens because it relies on the tab in the storyboard tag + displayContentController(contentController: viewControllers[item.tag]) + } +} + +extension NoBuyTabBarViewController { + @objc private func currencySwitchTapped() { + view.layoutIfNeeded() + guard let store = store else { return } + guard let isLTCSwapped = isLtcSwapped else { return } + guard let primaryLabel = primaryBalanceLabel, + let secondaryLabel = secondaryBalanceLabel + else { + NSLog("ERROR: Price labels not initialized") + return + } + + UIView.spring(0.7, animations: { + primaryLabel.transform = primaryLabel.transform.isIdentity ? self.transform(forView: primaryLabel) : .identity + secondaryLabel.transform = secondaryLabel.transform.isIdentity ? self.transform(forView: secondaryLabel) : .identity + NSLayoutConstraint.deactivate(!isLTCSwapped ? self.regularConstraints : self.swappedConstraints) + NSLayoutConstraint.activate(!isLTCSwapped ? self.swappedConstraints : self.regularConstraints) + self.view.layoutIfNeeded() + + LWAnalytics.logEventWithParameters(itemName: ._20200207_DTHB) + + }) { _ in } + store.perform(action: CurrencyChange.toggle()) + } +} diff --git a/litewallet/PartnerData.swift b/litewallet/PartnerData.swift index c867dc892..0b3fbc925 100644 --- a/litewallet/PartnerData.swift +++ b/litewallet/PartnerData.swift @@ -6,7 +6,6 @@ enum PartnerName { case litewalletOps case litewalletStart case pusher - case pusherStaging } struct Partner { @@ -55,7 +54,6 @@ struct Partner { } case .litewalletOps: - if let dictionary = NSDictionary(contentsOfFile: filePath) as? [String: AnyObject], let opsArray = dictionary["litewallet-ops"] as? [String] { @@ -67,6 +65,7 @@ struct Partner { LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) return errorDescription } + case .litewalletStart: if let dictionary = NSDictionary(contentsOfFile: filePath) as? [String: AnyObject], @@ -90,19 +89,6 @@ struct Partner { LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) return errorDescription } - - case .pusherStaging: - - if let dictionary = NSDictionary(contentsOfFile: filePath) as? [String: AnyObject], - let key = dictionary["pusher-staging-instance-id"] as? String - { - return key - } else { - let errorDescription = "error_pusher_id_key" - - LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) - return errorDescription - } } } diff --git a/litewallet/PaymentProtocol.swift b/litewallet/PaymentProtocol.swift index 2f21ce87e..8c5b5f11b 100644 --- a/litewallet/PaymentProtocol.swift +++ b/litewallet/PaymentProtocol.swift @@ -2,10 +2,10 @@ import BRCore import Foundation class PaymentProtocolDetails { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -68,13 +68,13 @@ class PaymentProtocolDetails { } class PaymentProtocolRequest { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool private var cName: String? private var errMsg: String? private var didValidate: Bool = false - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -233,10 +233,10 @@ class PaymentProtocolRequest { } class PaymentProtocolPayment { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -274,8 +274,7 @@ class PaymentProtocolPayment { return [BRTxRef?](UnsafeBufferPointer(start: cPtr.pointee.transactions, count: cPtr.pointee.txCount)) } - var refundTo: [BRTxOutput] - { // where to send refunds, if a refund is necessary, refundTo[n].amount defaults to 0 + var refundTo: [BRTxOutput] { // where to send refunds, if a refund is necessary, refundTo[n].amount defaults to 0 return [BRTxOutput](UnsafeBufferPointer(start: cPtr.pointee.refundTo, count: cPtr.pointee.refundToCount)) } @@ -290,10 +289,10 @@ class PaymentProtocolPayment { } class PaymentProtocolACK { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } diff --git a/litewallet/PaymentRequest.swift b/litewallet/PaymentRequest.swift index 5e56db0ef..b498344a4 100644 --- a/litewallet/PaymentRequest.swift +++ b/litewallet/PaymentRequest.swift @@ -8,8 +8,7 @@ enum PaymentRequestType { struct PaymentRequest { init?(string: String) { - if var url = NSURL(string: string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).replacingOccurrences(of: " ", with: "%20")) - { + if var url = NSURL(string: string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).replacingOccurrences(of: " ", with: "%20")) { if let scheme = url.scheme, let resourceSpecifier = url.resourceSpecifier, url.host == nil { url = NSURL(string: "\(scheme)://\(resourceSpecifier)")! diff --git a/litewallet/PinDigitView.swift b/litewallet/PinDigitView.swift index 5b68de505..2453776d9 100644 --- a/litewallet/PinDigitView.swift +++ b/litewallet/PinDigitView.swift @@ -38,6 +38,7 @@ struct PinDigitView: View { /// Inspired by https://stackoverflow.com/questions/72926965/creating-an-ios-passcode-view-with-swiftui-how-to-hide-a-textview import SwiftUI + struct PasscodeView: View { @EnvironmentObject var viewModel: StartViewModel diff --git a/litewallet/Platform/BRAPIClient.swift b/litewallet/Platform/BRAPIClient.swift index 0e49f977f..d811c5436 100644 --- a/litewallet/Platform/BRAPIClient.swift +++ b/litewallet/Platform/BRAPIClient.swift @@ -278,8 +278,7 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR // MARK: URLSession Delegate - public func urlSession(_: URLSession, task _: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { + public func urlSession(_: URLSession, task _: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { if challenge.protectionSpace.host == host, challenge.protectionSpace.serverTrust != nil { log("URLSession challenge accepted!") @@ -292,11 +291,9 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR } } - public func urlSession(_: URLSession, task: URLSessionTask, willPerformHTTPRedirection _: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) - { + public func urlSession(_: URLSession, task: URLSessionTask, willPerformHTTPRedirection _: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { var actualRequest = request - if let currentReq = task.currentRequest, var curHost = currentReq.url?.host, let curScheme = currentReq.url?.scheme - { + if let currentReq = task.currentRequest, var curHost = currentReq.url?.host, let curScheme = currentReq.url?.scheme { if let curPort = currentReq.url?.port, curPort != 443, curPort != 80 { curHost = "\(curHost):\(curPort)" } @@ -304,8 +301,7 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR // follow the redirect if we're interacting with our API actualRequest = decorateRequest(request) log("redirecting \(String(describing: currentReq.url)) to \(String(describing: request.url))") - if let curAuth = currentReq.allHTTPHeaderFields?["Authorization"], curAuth.hasPrefix("Litewallet") - { + if let curAuth = currentReq.allHTTPHeaderFields?["Authorization"], curAuth.hasPrefix("Litewallet") { // add authentication because the previous request was authenticated log("adding authentication to redirected request") actualRequest = signRequest(actualRequest) diff --git a/litewallet/Platform/BRActivityView.swift b/litewallet/Platform/BRActivityView.swift index c9daaacdc..883490dbf 100644 --- a/litewallet/Platform/BRActivityView.swift +++ b/litewallet/Platform/BRActivityView.swift @@ -7,10 +7,6 @@ class BRActivityViewController: UIViewController { super.init(nibName: nil, bundle: nil) modalTransitionStyle = .crossDissolve - if #available(iOS 8.0, *) { - modalPresentationStyle = .overFullScreen - } - activityView.messageLabel.text = message view = activityView } diff --git a/litewallet/Platform/BRReplicatedKVStore.swift b/litewallet/Platform/BRReplicatedKVStore.swift index bad0eca03..eb3b2a3a8 100644 --- a/litewallet/Platform/BRReplicatedKVStore.swift +++ b/litewallet/Platform/BRReplicatedKVStore.swift @@ -13,6 +13,12 @@ public enum BRReplicatedKVStoreError: Error { case malformedData } +/// MakeTransactionError: Error +public enum MakeTransactionError: Error { + case replicatedKVStoreNotFound + case rateNotFound +} + public enum BRRemoteKVStoreError: Error { case notFound case conflict @@ -203,7 +209,7 @@ open class BRReplicatedKVStore: NSObject { deleted = sqlite3_column_int(stmt, 3) > 0 ret = Array(UnsafeBufferPointer(start: blob?.assumingMemoryBound(to: UInt8.self), count: Int(blobLength))) } - return (curVer, time, deleted, encrypted ? try decrypt(ret) : ret) + return try (curVer, time, deleted, encrypted ? decrypt(ret) : ret) } /// Set the value of a key locally in the database. If syncImmediately is true (the default) then immediately @@ -330,8 +336,7 @@ open class BRReplicatedKVStore: NSObject { //// return 0 // } - func remoteVersion(_ key: String) throws -> Int - { // this would be UInt64.. but it makes the compiler crash + func remoteVersion(_ key: String) throws -> Int { // this would be UInt64.. but it makes the compiler crash try checkKey(key) var ret: UInt64 = 0 try txn { @@ -737,11 +742,10 @@ open class BRReplicatedKVStore: NSObject { gettimeofday(&tv, nil) var t = UInt64(tv.tv_usec) * 1_000_000 + UInt64(tv.tv_usec) let p = [UInt8](repeating: 0, count: 4) - return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes - { (dat: UnsafePointer) -> [UInt8] in - let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) - return p + Array(buf) - } + return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes { (dat: UnsafePointer) -> [UInt8] in + let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) + return p + Array(buf) + } } fileprivate func log(_ s: String) { diff --git a/litewallet/Platform/BRTar.swift b/litewallet/Platform/BRTar.swift index 027a6be5f..59b10f0b1 100644 --- a/litewallet/Platform/BRTar.swift +++ b/litewallet/Platform/BRTar.swift @@ -137,8 +137,7 @@ class BRTar { } } - fileprivate static func readTypeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> BRTarType - { + fileprivate static func readTypeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> BRTarType { log("reading type at location \(location)") handle.seek(toFileOffset: location + tarTypePosition) let typeDat = handle.readData(ofLength: 1) @@ -147,8 +146,7 @@ class BRTar { return ret } - fileprivate static func readNameAtLocation(_ location: UInt64, fromHandle handle: FileHandle) throws -> String - { + fileprivate static func readNameAtLocation(_ location: UInt64, fromHandle handle: FileHandle) throws -> String { handle.seek(toFileOffset: location + tarNamePosition) let dat = handle.readData(ofLength: Int(tarNameSize)) guard let ret = String(bytes: dat, encoding: String.Encoding.ascii) @@ -159,8 +157,7 @@ class BRTar { return ret } - fileprivate static func readSizeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> UInt64 - { + fileprivate static func readSizeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> UInt64 { handle.seek(toFileOffset: location + tarSizePosition) let sizeDat = handle.readData(ofLength: Int(tarSizeSize)) let octal = NSString(data: sizeDat, encoding: String.Encoding.ascii.rawValue)! diff --git a/litewallet/Platform/BRWebViewController.swift b/litewallet/Platform/BRWebViewController.swift index f92dd38ed..8319d1141 100644 --- a/litewallet/Platform/BRWebViewController.swift +++ b/litewallet/Platform/BRWebViewController.swift @@ -3,8 +3,7 @@ import UIKit import WebKit @available(iOS 8.0, *) -@objc open class BRWebViewController: UIViewController, WKNavigationDelegate, BRWebSocketClient, WKScriptMessageHandler -{ +@objc open class BRWebViewController: UIViewController, WKNavigationDelegate, BRWebSocketClient, WKScriptMessageHandler { var wkProcessPool: WKProcessPool var webView: WKWebView? var server = BRHTTPServer() @@ -30,8 +29,7 @@ import WebKit return URL(string: "http://127.0.0.1:\(server.port)\(mountPoint)")! } - init(partner: String?, mountPoint: String = "/", walletManager: WalletManager, store: Store, noAuthApiClient: BRAPIClient? = nil) - { + init(partner: String?, mountPoint: String = "/", walletManager: WalletManager, store: Store, noAuthApiClient: BRAPIClient? = nil) { wkProcessPool = WKProcessPool() self.mountPoint = mountPoint self.walletManager = walletManager @@ -79,20 +77,18 @@ import WebKit view.addSubview(webView!) let center = NotificationCenter.default - center.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) - { [weak self] _ in - self?.didAppear = true - if let info = self?.webViewInfo { - self?.sendToAllSockets(data: info) - } + center.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) { [weak self] _ in + self?.didAppear = true + if let info = self?.webViewInfo { + self?.sendToAllSockets(data: info) } - center.addObserver(forName: .UIApplicationWillResignActive, object: nil, queue: .main) - { [weak self] _ in - self?.didAppear = false - if let info = self?.webViewInfo { - self?.sendToAllSockets(data: info) - } + } + center.addObserver(forName: .UIApplicationWillResignActive, object: nil, queue: .main) { [weak self] _ in + self?.didAppear = false + if let info = self?.webViewInfo { + self?.sendToAllSockets(data: info) } + } activityIndicator.activityIndicatorViewStyle = .white activityIndicator.color = .darkGray @@ -154,8 +150,7 @@ import WebKit activityIndicator.isHidden = true } - public func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) - { + public func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) { guard let response = message.body as? String else { return } let URLString = URL(string: "https://checkout.simplexcc.com/payments/new") diff --git a/litewallet/Platform/Extensions.swift b/litewallet/Platform/Extensions.swift index b79051f57..60e497dd4 100644 --- a/litewallet/Platform/Extensions.swift +++ b/litewallet/Platform/Extensions.swift @@ -1,5 +1,6 @@ import BRCore import Foundation + // import libbz2 import UIKit @@ -23,8 +24,7 @@ public extension String { } static var urlQuoteCharacterSet: CharacterSet { - if let cset = (NSMutableCharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as? NSMutableCharacterSet - { + if let cset = (NSMutableCharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as? NSMutableCharacterSet { cset.removeCharacters(in: "?=&") return cset as CharacterSet } @@ -40,17 +40,16 @@ public extension String { var result = Data(count: 128 / 8) let resultCount = result.count - return result.withUnsafeMutableBytes - { (resultBytes: UnsafeMutablePointer) -> String in - data.withUnsafeBytes { dataBytes in - BRMD5(resultBytes, dataBytes, data.count) - } - var hash = String() - for i in 0 ..< resultCount { - hash = hash.appendingFormat("%02x", resultBytes[i]) - } - return hash + return result.withUnsafeMutableBytes { (resultBytes: UnsafeMutablePointer) -> String in + data.withUnsafeBytes { dataBytes in + BRMD5(resultBytes, dataBytes, data.count) + } + var hash = String() + for i in 0 ..< resultCount { + hash = hash.appendingFormat("%02x", resultBytes[i]) } + return hash + } } func base58DecodedData() -> Data { @@ -287,30 +286,27 @@ public extension Data { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt8 in - ptr.pointee - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt8 in + ptr.pointee + } } func uInt32(atOffset offset: UInt) -> UInt32 { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt32 in - CFSwapInt32LittleToHost(ptr.pointee) - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt32 in + CFSwapInt32LittleToHost(ptr.pointee) + } } func uInt64(atOffset offset: UInt) -> UInt64 { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt64 in - CFSwapInt64LittleToHost(ptr.pointee) - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt64 in + CFSwapInt64LittleToHost(ptr.pointee) + } } func compactSign(key: BRKey) -> Data { @@ -327,11 +323,10 @@ public extension Data { gettimeofday(&tv, nil) var t = UInt64(tv.tv_usec) * 1_000_000 + UInt64(tv.tv_usec) let p = [UInt8](repeating: 0, count: 4) - return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes - { (dat: UnsafePointer) -> [UInt8] in - let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) - return p + Array(buf) - } + return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes { (dat: UnsafePointer) -> [UInt8] in + let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) + return p + Array(buf) + } } func chacha20Poly1305AEADEncrypt(key: BRKey) -> Data { @@ -399,8 +394,7 @@ public extension Date { // this is lifted from: https://github.com/Fykec/NSDate-RFC1123/blob/master/NSDate%2BRFC1123.swift // Copyright Ā© 2015 Foster Yin. All rights reserved. - fileprivate static func cachedThreadLocalObjectWithKey(_ key: String, create: () -> T) -> T - { + fileprivate static func cachedThreadLocalObjectWithKey(_ key: String, create: () -> T) -> T { let threadDictionary = Thread.current.threadDictionary if let cachedObject = threadDictionary[key] as! T? { return cachedObject diff --git a/litewallet/Platform/TxMetaData.swift b/litewallet/Platform/TxMetaData.swift index 013289982..45bf54b4e 100644 --- a/litewallet/Platform/TxMetaData.swift +++ b/litewallet/Platform/TxMetaData.swift @@ -52,7 +52,7 @@ open class TxMetaData: BRKVStoreObject, BRCoding { var del: Bool var bytes: [UInt8] - print("[BRTxMetadataObject] find \(txHash.txKey)") + print("[BRTxMetadataObject] find txHash \(txHash.txKey)") do { (ver, date, del, bytes) = try store.get(txHash.txKey) let bytesDat = Data(bytes: &bytes, count: bytes.count) @@ -72,7 +72,7 @@ open class TxMetaData: BRKVStoreObject, BRCoding { var del: Bool var bytes: [UInt8] - print("[BRTxMetadataObject] find \(txKey)") + print("[BRTxMetadataObject] find txKey \(txKey)") do { (ver, date, del, bytes) = try store.get(txKey) let bytesDat = Data(bytes: &bytes, count: bytes.count) diff --git a/litewallet/PromptTableViewCell.swift b/litewallet/PromptTableViewCell.swift index dca49aef4..803ac80f0 100644 --- a/litewallet/PromptTableViewCell.swift +++ b/litewallet/PromptTableViewCell.swift @@ -28,9 +28,7 @@ enum PromptType { case noPasscode case shareData - static var defaultOrder: [PromptType] = { - [.recommendRescan, .upgradePin, .paperKey, .noPasscode, .biometrics, .shareData] - }() + static var defaultOrder: [PromptType] = [.recommendRescan, .upgradePin, .paperKey, .noPasscode, .biometrics, .shareData] var title: String { switch self { diff --git a/litewallet/ReachabilityMonitor.swift b/litewallet/ReachabilityMonitor.swift index 7e0ede5cd..f6cef3a29 100644 --- a/litewallet/ReachabilityMonitor.swift +++ b/litewallet/ReachabilityMonitor.swift @@ -1,8 +1,7 @@ import Foundation import SystemConfiguration -private func callback(reachability _: SCNetworkReachability, flags _: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) -{ +private func callback(reachability _: SCNetworkReachability, flags _: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) { guard let info = info else { return } let reachability = Unmanaged.fromOpaque(info).takeUnretainedValue() reachability.notify() @@ -40,8 +39,7 @@ class ReachabilityMonitor: Trackable { private var flags: SCNetworkReachabilityFlags { var flags = SCNetworkReachabilityFlags(rawValue: 0) - if let reachability = networkReachability, withUnsafeMutablePointer(to: &flags, { SCNetworkReachabilityGetFlags(reachability, UnsafeMutablePointer($0)) }) == true - { + if let reachability = networkReachability, withUnsafeMutablePointer(to: &flags, { SCNetworkReachabilityGetFlags(reachability, UnsafeMutablePointer($0)) }) == true { return flags } else { return [] diff --git a/litewallet/ReceiveLTCViewController.swift b/litewallet/ReceiveLTCViewController.swift index 0c95385df..e22cfbba5 100644 --- a/litewallet/ReceiveLTCViewController.swift +++ b/litewallet/ReceiveLTCViewController.swift @@ -1,14 +1,5 @@ import UIKit -struct WalletAddressData { - var address: String - var qrCode: UIImage - var balance: Double - var balanceText: String { - String(balance) + " Ł" - } -} - class ReceiveLTCViewController: UIViewController { var store: Store? override func viewDidLoad() { diff --git a/litewallet/RequestAmountViewController.swift b/litewallet/RequestAmountViewController.swift index cb865c340..052d74947 100644 --- a/litewallet/RequestAmountViewController.swift +++ b/litewallet/RequestAmountViewController.swift @@ -192,8 +192,7 @@ class RequestAmountViewController: UIViewController { presentText?(text, qrCode.image!) } - private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) - { + private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) { share.isEnabled = false address.isUserInteractionEnabled = false diff --git a/litewallet/Sender.swift b/litewallet/Sender.swift index 24bfae742..763c73a01 100644 --- a/litewallet/Sender.swift +++ b/litewallet/Sender.swift @@ -88,8 +88,8 @@ class Sender { self.comment = comment self.feePerKb = feePerKb - if UserDefaults.isBiometricsEnabled && - walletManager.canUseBiometrics(forTx: tx) + if UserDefaults.isBiometricsEnabled, + walletManager.canUseBiometrics(forTx: tx) { DispatchQueue.walletQueue.async { [weak self] in guard let myself = self else { return } diff --git a/litewallet/SimpleRedux.swift b/litewallet/SimpleRedux.swift index 1482ceda4..9294681b3 100644 --- a/litewallet/SimpleRedux.swift +++ b/litewallet/SimpleRedux.swift @@ -131,15 +131,13 @@ class Store { // Subscription callback is immediately called with current State value on subscription // and then any time the selected value changes - func subscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) - { + func subscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) { lazySubscribe(subscriber, selector: selector, callback: callback) callback(state) } // Same as subscribe(), but doesn't call the callback with current state upon subscription - func lazySubscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) - { + func lazySubscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) { let key = subscriber.hashValue let subscription = Subscription(selector: selector, callback: callback) if subscriptions[key] != nil { @@ -149,8 +147,7 @@ class Store { } } - func subscribe(_ subscriber: Subscriber, name: TriggerName, callback: @escaping (TriggerName?) -> Void) - { + func subscribe(_ subscriber: Subscriber, name: TriggerName, callback: @escaping (TriggerName?) -> Void) { let key = subscriber.hashValue let trigger = Trigger(name: name, callback: callback) if triggers[key] != nil { diff --git a/litewallet/StartNavigationDelegate.swift b/litewallet/StartNavigationDelegate.swift index c6d54b5d4..8ac4726cb 100644 --- a/litewallet/StartNavigationDelegate.swift +++ b/litewallet/StartNavigationDelegate.swift @@ -7,8 +7,7 @@ class StartNavigationDelegate: NSObject, UINavigationControllerDelegate { self.store = store } - func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) - { + func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) { if viewController is RecoverWalletIntroViewController { navigationController.navigationBar.tintColor = .white navigationController.navigationBar.titleTextAttributes = [ diff --git a/litewallet/StartView.swift b/litewallet/StartView.swift index 3525f5cb8..2c85254a0 100644 --- a/litewallet/StartView.swift +++ b/litewallet/StartView.swift @@ -118,20 +118,23 @@ struct StartView: View { alignment: .center) .alert(startViewModel .alertMessage[startViewModel.currentLanguage.rawValue], - isPresented: $delayedSelect) { - HStack { - Button(startViewModel - .yesLabel[startViewModel.currentLanguage.rawValue], role: .cancel) { - // Changes and Dismisses - startViewModel.setLanguage(code: startViewModel.currentLanguage.code) - selectedLang = false - } - Button(startViewModel - .cancelLabel[startViewModel.currentLanguage.rawValue], role: .destructive) { - // Dismisses - selectedLang = false - } + isPresented: $delayedSelect) + { + HStack { + Button(startViewModel + .yesLabel[startViewModel.currentLanguage.rawValue], role: .cancel) + { + // Changes and Dismisses + startViewModel.setLanguage(code: startViewModel.currentLanguage.code) + selectedLang = false } + Button(startViewModel + .cancelLabel[startViewModel.currentLanguage.rawValue], role: .destructive) + { + // Dismisses + selectedLang = false + } + } } Spacer() NavigationLink(destination: diff --git a/litewallet/StartViewModel.swift b/litewallet/StartViewModel.swift index ef96a30bd..c45a68524 100644 --- a/litewallet/StartViewModel.swift +++ b/litewallet/StartViewModel.swift @@ -48,6 +48,8 @@ class StartViewModel: ObservableObject { self.walletManager = walletManager staticTagline = taglines[0] + // loadResourcesWithTag(tags: audioTagArray) + // checkForWalletAndSync() } @@ -66,43 +68,29 @@ class StartViewModel: ObservableObject { didTapRecover = completion } - private func checkForWalletAndSync() { - /// Test seed count - guard seedWords.count == 12 else { return } - - /// Set for default. This model needs a initial value - walletManager.forceSetPin(newPin: Partner.partnerKeyPath(name: .litewalletStart)) - - guard walletManager.setRandomSeedPhrase() != nil else { - walletCreationDidFail = true - let properties: [String: String] = ["error_message": "wallet_creation_fail"] - LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) - return - } - - store.perform(action: WalletChange.setWalletCreationDate(Date())) - DispatchQueue.walletQueue.async { - self.walletManager.peerManager?.connect() - DispatchQueue.main.async { - self.store.trigger(name: .didCreateOrRecoverWallet) - } - } - } - - func updateHeader() { - switch tappedIndex { - case 0: - headerTitle = S.CreateStep.MainTitle.intro.localize() - case 1: - headerTitle = S.CreateStep.MainTitle.checkboxes.localize() - case 2: - headerTitle = S.CreateStep.MainTitle.seedPhrase.localize() - case 3: - headerTitle = S.CreateStep.MainTitle.finished.localize() - default: - headerTitle = S.CreateStep.MainTitle.intro.localize() - } - } + /// DEV: For checking wallet +// private func checkForWalletAndSync() { +// /// Test seed count +// guard seedWords.count == 12 else { return } +// +// /// Set for default. This model needs a initial value +// walletManager.forceSetPin(newPin: Partner.partnerKeyPath(name: .litewalletStart)) +// +// guard walletManager.setRandomSeedPhrase() != nil else { +// walletCreationDidFail = true +// let properties = ["error_message": "wallet_creation_fail"] +// LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) +// return +// } +// +// store.perform(action: WalletChange.setWalletCreationDate(Date())) +// DispatchQueue.walletQueue.async { +// self.walletManager.peerManager?.connect() +// DispatchQueue.main.async { +// self.store.trigger(name: .didCreateOrRecoverWallet) +// } +// } +// } func speakLanguage() { if let url = Bundle.main.url(forResource: currentLanguage.voiceFilename, withExtension: "mp3") { @@ -129,10 +117,6 @@ class StartViewModel: ObservableObject { } } - func generateNewSeedPhrase() -> [String] { - return [""] - } - // MARK: - Lengthy elements /// Set these to the bottom to make the others more readable @@ -205,38 +189,39 @@ class StartViewModel: ObservableObject { "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø", ] - func stringToCurrentLanguage(languageString: String) -> LanguageSelection { - switch languageString { - case "English": - return LanguageSelection(rawValue: 0)! - case "äø­åœ‹äŗŗ": - return LanguageSelection(rawValue: 1)! - case "äø­å›½äŗŗ": - return LanguageSelection(rawValue: 2)! - case "FranƧais": - return LanguageSelection(rawValue: 3)! - case "Deutsch": - return LanguageSelection(rawValue: 4)! - case "Bahasa Indonesia": - return LanguageSelection(rawValue: 5)! - case "Italiano": - return LanguageSelection(rawValue: 6)! - case "ę—„ęœ¬čŖž": - return LanguageSelection(rawValue: 7)! - case "ķ•œźµ­ģø": - return LanguageSelection(rawValue: 8)! - case "PortuguĆŖs": - return LanguageSelection(rawValue: 9)! - case "Š ŃƒŃŃŠŗŠøŠ¹": - return LanguageSelection(rawValue: 10)! - case "EspaƱol": - return LanguageSelection(rawValue: 11)! - case "TĆ¼rkƧe": - return LanguageSelection(rawValue: 12)! - case "уŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ°": - return LanguageSelection(rawValue: 13)! - default: - return LanguageSelection(rawValue: 0)! - } - } + /// DEV: For debugging +// func stringToCurrentLanguage(languageString: String) -> LanguageSelection { +// switch languageString { +// case "English": +// return LanguageSelection(rawValue: 0)! +// case "äø­åœ‹äŗŗ": +// return LanguageSelection(rawValue: 1)! +// case "äø­å›½äŗŗ": +// return LanguageSelection(rawValue: 2)! +// case "FranƧais": +// return LanguageSelection(rawValue: 3)! +// case "Deutsch": +// return LanguageSelection(rawValue: 4)! +// case "Bahasa Indonesia": +// return LanguageSelection(rawValue: 5)! +// case "Italiano": +// return LanguageSelection(rawValue: 6)! +// case "ę—„ęœ¬čŖž": +// return LanguageSelection(rawValue: 7)! +// case "ķ•œźµ­ģø": +// return LanguageSelection(rawValue: 8)! +// case "PortuguĆŖs": +// return LanguageSelection(rawValue: 9)! +// case "Š ŃƒŃŃŠŗŠøŠ¹": +// return LanguageSelection(rawValue: 10)! +// case "EspaƱol": +// return LanguageSelection(rawValue: 11)! +// case "TĆ¼rkƧe": +// return LanguageSelection(rawValue: 12)! +// case "уŠŗрŠ°Ń—Š½ŃŃŒŠŗŠ°": +// return LanguageSelection(rawValue: 13)! +// default: +// return LanguageSelection(rawValue: 0)! +// } +// } } diff --git a/litewallet/Storyboards/Buy.storyboard b/litewallet/Storyboards/Buy.storyboard index a7ecdc068..d4ec41840 100644 --- a/litewallet/Storyboards/Buy.storyboard +++ b/litewallet/Storyboards/Buy.storyboard @@ -1,17 +1,14 @@ - + - + - - BarlowSemiCondensed-Bold - BarlowSemiCondensed-Light @@ -20,381 +17,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -500,10 +126,7 @@ - - - diff --git a/litewallet/Storyboards/Main.storyboard b/litewallet/Storyboards/Main.storyboard index c648ac707..080ef3a9d 100644 --- a/litewallet/Storyboards/Main.storyboard +++ b/litewallet/Storyboards/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -32,7 +32,8 @@ - + + @@ -118,7 +119,6 @@ - @@ -127,7 +127,7 @@ - + @@ -137,6 +137,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -145,7 +234,7 @@ - + diff --git a/litewallet/Storyboards/XIBs/SyncProgressHeaderView.xib b/litewallet/Storyboards/XIBs/SyncProgressHeaderView.xib index 86811b641..68dd55123 100644 --- a/litewallet/Storyboards/XIBs/SyncProgressHeaderView.xib +++ b/litewallet/Storyboards/XIBs/SyncProgressHeaderView.xib @@ -1,9 +1,9 @@ - + - + @@ -18,7 +18,7 @@ - + @@ -43,7 +43,7 @@ - + @@ -74,6 +74,6 @@ - + diff --git a/litewallet/Strings/Base.lproj/Localizable.strings b/litewallet/Strings/Base.lproj/Localizable.strings index d07f2e339..385d568fb 100644 --- a/litewallet/Strings/Base.lproj/Localizable.strings +++ b/litewallet/Strings/Base.lproj/Localizable.strings @@ -1069,9 +1069,6 @@ /* $53.09/L + 1.07% */ "Confirmation.amountDetailLabel" = "Exchange details:"; -/* Short Network Fee: ($1.00) */ -"Confirmation.shortFeeLabel" = "FEE:"; - /* Address label */ "Confirmation.staticAddressLabel" = "ADDRESS:"; @@ -1429,18 +1426,6 @@ /* sorry */ "Fragment.sorry" = "sorry"; -/* 2FA Error message */ -"LitecoinCard.twoFAErrorMessage" = "There was an error. Please toggle 2FA to *Enabled*, enter the emailed code, and try again."; - -/* Enter domain */ -"Send.UnstoppableDomains.simpleplaceholder" = "Enter domain"; - -/* Enter a */ -"Send.UnstoppableDomains.enterA" = "Enter a"; - -/* domain */ -"Send.UnstoppableDomains.domain" = "domain"; - /* Change language alert message */ "Settings.ChangeLanguage.alertMessage" = "Are you sure you want to change the language to %l?"; diff --git a/litewallet/Strings/it.lproj/Localizable.strings b/litewallet/Strings/it.lproj/Localizable.strings index 699d1997a..985939b1a 100755 --- a/litewallet/Strings/it.lproj/Localizable.strings +++ b/litewallet/Strings/it.lproj/Localizable.strings @@ -718,12 +718,6 @@ /* Fees: $0.01*/ "Send.fee" = "Commissioni: %1$@"; -/* Fees: $0.01*/ -"Send.fee" = "Commissioni: %1$@"; - -/* Fees Blank: */ -"Send.feeBlank" = "Commissioni:"; - /* Fees Blank: */ "Send.feeBlank" = "Commissioni:"; diff --git a/litewallet/Strings/uk.lproj/Localizable.strings b/litewallet/Strings/uk.lproj/Localizable.strings index 048c8a959..eb3b84c83 100644 --- a/litewallet/Strings/uk.lproj/Localizable.strings +++ b/litewallet/Strings/uk.lproj/Localizable.strings @@ -457,6 +457,24 @@ /* Node Selector view title */ "NodeSelector.title" = "Š’ŃƒŠ·Š»Šø Litecoin"; +/* "Email address label" */ +"Notifications.emailLabel" = "ŠŠ“рŠµŃŠ° ŠµŠ»ŠµŠŗтрŠ¾Š½Š½Š¾Ń— ŠæŠ¾ŃˆŃ‚Šø"; + +/* "Email address placeholder" */ +"Notifications.emailPlaceholder" = "Š’Š²ŠµŠ“іть тут"; + +/* "Email title" */ +"Notifications.emailTitle" = "ŠŃ–чŠ¾Š³Š¾ Š½Šµ ŠæрŠ¾Šæустіть!"; + +/* "Language preference label" */ +"Notifications.languagePreference" = "Š‘Š°Š¶Š°Š½Š° Š¼Š¾Š²Š°:"; + +/* "Pitch to get user to sign up" */ +"Notifications.pitchMessage" = "ŠŸŃ–Š“ŠæŠøшіться, щŠ¾Š± Š“іŠ·Š½Š°Š²Š°Ń‚Šøся ŠæрŠ¾ Š¾Š½Š¾Š²Š»ŠµŠ½Š½Ń тŠ° ŠŗŠ¾Š½ŠŗурсŠø."; + +/* Signup cancel */ +"Notifications.signupCancel" = "ŠŃ–, Š“яŠŗую"; + /* Bad Payment request alert title */ "PaymentProtocol.Errors.badPaymentRequest" = "ŠŸŠ¾Š³Š°Š½ŠøŠ¹ Š·Š°ŠæŠøт Š½Š° Š¾ŠæŠ»Š°Ń‚Ńƒ"; @@ -742,6 +760,9 @@ /* Loading request activity view message */ "Send.loadingRequest" = "Š—Š°ŠæŠøт Š½Š° Š·Š°Š²Š°Š½Ń‚Š°Š¶ŠµŠ½Š½Ń"; +/* Network */ +"Send.networkFee" = "ŠœŠµŃ€ŠµŠ¶Š°"; + /* Empty address alert message */ "Send.noAddress" = "Š‘ŃƒŠ“ь Š»Š°ŃŠŗŠ°, Š²Š²ŠµŠ“іть Š°Š“рŠµŃŃƒ Š¾Š“ŠµŃ€Š¶ŃƒŠ²Š°Ń‡Š°."; @@ -763,6 +784,9 @@ /* Send button label */ "Send.sendLabel" = "ŠŠ°Š“ісŠ»Š°Ń‚Šø"; +/* Service */ +"Send.serviceFee" = "Š”ŠµŃ€Š²Ń–с"; + /* Send modal title */ "Send.title" = "ŠŠ°Š“ісŠ»Š°Ń‚Šø"; @@ -1266,27 +1290,3 @@ /* 1 of 3 */ "WritePaperPhrase.step" = "%1$d Š· %2$d"; - -/* "Email address label" */ -"Notifications.emailLabel" = ""; - -/* "Email address placeholder" */ -"Notifications.emailPlaceholder" = ""; - -/* "Email title" */ -"Notifications.emailTitle" = ""; - -/* "Language preference label" */ -"Notifications.languagePreference" = ""; - -/* "Pitch to get user to sign up" */ -"Notifications.pitchMessage" = ""; - -/* Signup cancel */ -"Notifications.signupCancel" = ""; - -/* Network */ -"Send.networkFee" = ""; - -/* Service */ -"Send.serviceFee" = ""; diff --git a/litewallet/SupportLitecoinFoundationView.swift b/litewallet/SupportLitecoinFoundationView.swift index fd2bce07e..1b7acb452 100644 --- a/litewallet/SupportLitecoinFoundationView.swift +++ b/litewallet/SupportLitecoinFoundationView.swift @@ -9,9 +9,6 @@ struct SupportLitecoinFoundationView: View { @ObservedObject var viewModel: SupportLitecoinFoundationViewModel - @State - private var showSupportLFPage: Bool = false - // MARK: - Public var supportSafariView = SupportSafariView(url: FoundationSupport.url, diff --git a/litewallet/SyncProgressHeaderView.swift b/litewallet/SyncProgressHeaderView.swift index 244e7ef0f..2d0767ab5 100644 --- a/litewallet/SyncProgressHeaderView.swift +++ b/litewallet/SyncProgressHeaderView.swift @@ -39,7 +39,7 @@ class SyncProgressHeaderView: UITableViewCell, Subscriber { headerLabel.text = S.SyncingHeader.rescanning.localize() timestampLabel.text = "" progressView.alpha = 0.0 - noSendImageView.alpha = 0.0 + noSendImageView.alpha = 1.0 } else { headerLabel.text = "" timestampLabel.text = "" diff --git a/litewallet/TabBarViewController.swift b/litewallet/TabBarViewController.swift index de7846f3f..8af223d8a 100644 --- a/litewallet/TabBarViewController.swift +++ b/litewallet/TabBarViewController.swift @@ -20,12 +20,13 @@ class TabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDel private var swappedConstraints: [NSLayoutConstraint] = [] private let currencyTapView = UIView() private let storyboardNames: [String] = ["Transactions", "Send", "Receive", "Buy"] - var storyboardIDs: [String] = ["TransactionsViewController", "SendLTCViewController", "ReceiveLTCViewController", "BuyTableViewController"] + var storyboardIDs: [String] = ["TransactionsViewController", "SendLTCViewController", "ReceiveLTCViewController", "BuyHostingController"] var viewControllers: [UIViewController] = [] var activeController: UIViewController? var updateTimer: Timer? var store: Store? var walletManager: WalletManager? + var userIsMoonPaySupported: Bool? var exchangeRate: Rate? { didSet { setBalances() } } @@ -89,8 +90,13 @@ class TabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDel func addViewControllers() { for (index, storyboardID) in storyboardIDs.enumerated() { - let controller = UIStoryboard(name: storyboardNames[index], bundle: nil).instantiateViewController(withIdentifier: storyboardID) - viewControllers.append(controller) + if storyboardID == "BuyHostingController" { + let hostingController = BuyHostingController() + viewControllers.append(hostingController) + } else { + let controller = UIStoryboard(name: storyboardNames[index], bundle: nil).instantiateViewController(withIdentifier: storyboardID) + viewControllers.append(controller) + } } } @@ -130,7 +136,7 @@ class TabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDel let priceLabelArray = [primaryBalanceLabel, secondaryBalanceLabel, equalsLabel] - priceLabelArray.enumerated().forEach { _, view in + for (_, view) in priceLabelArray.enumerated() { view?.backgroundColor = .clear view?.textColor = .white } @@ -311,7 +317,7 @@ class TabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDel return } - array.forEach { item in + for item in array { switch item.tag { case 0: item.title = S.History.barItemTitle.localize() case 1: item.title = S.Send.barItemTitle.localize() @@ -344,13 +350,13 @@ class TabBarViewController: UIViewController, Subscriber, Trackable, UITabBarDel transactionVC.walletManager = walletManager transactionVC.isLtcSwapped = store?.state.isLtcSwapped - case "litewallet.BuyTableViewController": - guard let buyVC = contentController as? BuyTableViewController + case "litewallet.BuyHostingController": + guard let buyHC = contentController as? BuyHostingController else { return } - buyVC.store = store - buyVC.walletManager = walletManager + + buyHC.isLoaded = true case "litewallet.SendLTCViewController": guard let sendVC = contentController as? SendLTCViewController diff --git a/litewallet/TransactionCellViewModel.swift b/litewallet/TransactionCellViewModel.swift index ca9e88eea..b4db09601 100644 --- a/litewallet/TransactionCellViewModel.swift +++ b/litewallet/TransactionCellViewModel.swift @@ -20,8 +20,6 @@ class TransactionCellViewModel: ObservableObject { var feeText: String = "" - var directionText: String = "" - var directionImageText: String = "" var directionArrowColor: Color = .clear diff --git a/litewallet/TransactionModalView.swift b/litewallet/TransactionModalView.swift index 0dd622c46..84951915b 100644 --- a/litewallet/TransactionModalView.swift +++ b/litewallet/TransactionModalView.swift @@ -1,20 +1,12 @@ import SwiftUI import UIKit -private let qrImageSize = 180.0 - struct TransactionModalView: View { @ObservedObject var viewModel: TransactionCellViewModel let dataRowHeight: CGFloat = 65.0 - @State - var isDisplayed: Bool = false - - @State - var didCopy: Bool = false - @State var copiedData: String = "" diff --git a/litewallet/TransactionsViewController.swift b/litewallet/TransactionsViewController.swift index d43be40f0..b19d65fab 100644 --- a/litewallet/TransactionsViewController.swift +++ b/litewallet/TransactionsViewController.swift @@ -10,16 +10,13 @@ let kQRImageSide: CGFloat = 110.0 let kFiveYears: Double = 157_680_000.0 let kTodaysEpochTime: TimeInterval = Date().timeIntervalSince1970 -class TransactionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, Subscriber, Trackable -{ +class TransactionsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, Subscriber, Trackable { @IBOutlet var tableView: UITableView! var store: Store? var walletManager: WalletManager? - var selectedIndexes = [IndexPath: NSNumber]() var shouldBeSyncing: Bool = false var syncingHeaderView: SyncProgressHeaderView? - var shouldShowPrompt = true private var transactions: [Transaction] = [] private var allTransactions: [Transaction] = [] { @@ -35,9 +32,12 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable private var currentPromptType: PromptType? { didSet { if currentPromptType != nil, oldValue == nil { - tableView.beginUpdates() - tableView.reloadSections(IndexSet(integer: 0), with: .automatic) - tableView.endUpdates() + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.tableView.beginUpdates() + self.tableView.reloadSections(IndexSet(integer: 0), with: .automatic) + self.tableView.endUpdates() + } } } } @@ -82,7 +82,7 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable owner: self, options: nil)?.first as? SyncProgressHeaderView syncingHeaderView?.isRescanning = reduxState.walletState.isRescanning - syncingHeaderView?.progress = 0.02 // Small value to show user it is in process + syncingHeaderView?.progress = 0.02 syncingHeaderView?.headerMessage = reduxState.walletState.syncState syncingHeaderView?.noSendImageView.alpha = 1.0 syncingHeaderView?.timestamp = reduxState.walletState.lastBlockTimestamp @@ -102,8 +102,7 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable } let types = PromptType.defaultOrder - if let type = types.first(where: { $0.shouldPrompt(walletManager: walletManager, state: store.state) }) - { + if let type = types.first(where: { $0.shouldPrompt(walletManager: walletManager, state: store.state) }) { saveEvent("prompt.\(type.name).displayed") currentPromptType = type if type == .biometrics { @@ -120,7 +119,7 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable /// Update displayed transactions. Used mainly when the database needs an update /// - Parameter txHash: String reprsentation of the TX private func updateTransactions(txHash: String) { - transactions.enumerated().forEach { i, tx in + for (i, tx) in transactions.enumerated() { if tx.hash == txHash { DispatchQueue.main.async { self.tableView.beginUpdates() @@ -272,8 +271,7 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable // MARK: - UITableView Support Methods - private func configurePromptCell(promptType: PromptType?, indexPath: IndexPath) -> PromptTableViewCell - { + private func configurePromptCell(promptType: PromptType?, indexPath: IndexPath) -> PromptTableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "PromptTVC2", for: indexPath) as? PromptTableViewCell else { NSLog("ERROR No cell found") @@ -390,7 +388,7 @@ class TransactionsViewController: UIViewController, UITableViewDelegate, UITable self.shouldBeSyncing = true self.initSyncingHeaderView(reduxState: reduxState, completion: { self.syncingHeaderView?.isRescanning = reduxState.walletState.isRescanning - self.syncingHeaderView?.progress = 0.02 // Small value to show user it is in process + self.syncingHeaderView?.progress = 0.02 self.syncingHeaderView?.headerMessage = reduxState.walletState.syncState self.syncingHeaderView?.noSendImageView.alpha = 1.0 self.syncingHeaderView?.timestamp = reduxState.walletState.lastBlockTimestamp diff --git a/litewallet/TransferAmountViewModel.swift b/litewallet/TransferAmountViewModel.swift index 3519d6456..e69de29bb 100644 --- a/litewallet/TransferAmountViewModel.swift +++ b/litewallet/TransferAmountViewModel.swift @@ -1,73 +0,0 @@ -import BRCore -import Foundation -import KeychainAccess -import UIKit - -// DEV: To be removed in following issue https://github.com/litecoin-foundation/litewallet-ios/issues/177 - -class TransferAmountViewModel: ObservableObject { - // MARK: - Combine Variables - - @Published - var walletType: WalletType - - // MARK: - Private Variables - - private let walletManager: WalletManager - - private let store: Store - - private var sender: Sender? - - // MARK: - Public Variables - - var litewalletBalance: Double = 0.0 - - var litewalletAddress: String = "" - - var cardBalance: Double = 0.0 - - var cardAddress: String = "" - - var currentBalance: Double = 0.0 - - var transferAmount: Double = 0.0 - - /// This is the LTC address the wallet is sending LTC TO - var destinationAddress: String { - return walletType == .litewallet ? cardAddress : litewalletAddress - } - - var transaction: BRTxRef? - - init(walletType: WalletType, - litewalletBalance: Double, - litewalletAddress: String, - cardBalance: Double, - cardAddress: String, - walletManager: WalletManager, - store: Store) - { - self.walletManager = walletManager - - self.store = store - - self.walletType = walletType - - self.litewalletBalance = litewalletBalance - - self.litewalletAddress = litewalletAddress - - // DEV: The Testnet is not implemented in Loafwallet Core. - // This would be used for the Card testing. - #if DEBUG - self.litewalletAddress = MockData.testLTCAddress - #endif - - self.cardBalance = cardBalance - - self.cardAddress = cardAddress - - currentBalance = walletType == .litewallet ? litewalletBalance : cardBalance - } -} diff --git a/litewallet/UnsafeMutablePointerExtension.swift b/litewallet/UnsafeMutablePointerExtension.swift index 1bb39973c..69efafd08 100644 --- a/litewallet/UnsafeMutablePointerExtension.swift +++ b/litewallet/UnsafeMutablePointerExtension.swift @@ -93,8 +93,7 @@ extension UnsafeMutablePointer where Pointee == BRTransaction { return BRTransactionHash(self) } - public static func == (l: UnsafeMutablePointer, r: UnsafeMutablePointer) -> Bool - { + public static func == (l: UnsafeMutablePointer, r: UnsafeMutablePointer) -> Bool { return BRTransactionEq(l, r) != 0 } } diff --git a/litewallet/ViewControllers/AmountViewController.swift b/litewallet/ViewControllers/AmountViewController.swift index 590849700..20b0675d9 100644 --- a/litewallet/ViewControllers/AmountViewController.swift +++ b/litewallet/ViewControllers/AmountViewController.swift @@ -1,7 +1,7 @@ import UIKit private let currencyToggleConstant: CGFloat = 20.0 -private let amountFont: UIFont = UIFont.barlowMedium(size: 14.0) +private let amountFont: UIFont = .barlowMedium(size: 14.0) class AmountViewController: UIViewController, Trackable { private let store: Store private let isPinPadExpandedAtLaunch: Bool diff --git a/litewallet/ViewControllers/BiometricsSpendingLimitViewController.swift b/litewallet/ViewControllers/BiometricsSpendingLimitViewController.swift index 0bc2e72c0..a7e41ddc8 100644 --- a/litewallet/ViewControllers/BiometricsSpendingLimitViewController.swift +++ b/litewallet/ViewControllers/BiometricsSpendingLimitViewController.swift @@ -56,8 +56,7 @@ class BiometricsSpendingLimitViewController: UITableViewController, Subscriber { return limits.count } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) let limit = limits[indexPath.row] if limit == 0 { diff --git a/litewallet/ViewControllers/ConfirmPaperPhraseViewController.swift b/litewallet/ViewControllers/ConfirmPaperPhraseViewController.swift index 45f74fc47..ecac0606f 100644 --- a/litewallet/ViewControllers/ConfirmPaperPhraseViewController.swift +++ b/litewallet/ViewControllers/ConfirmPaperPhraseViewController.swift @@ -41,12 +41,11 @@ class ConfirmPaperPhraseViewController: UITableViewController { return wordArray }() - private lazy var confirmFirstPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.0 + 1)"), word: self.words[self.fourIndices.0]) - }() + private lazy var confirmFirstPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.0 + 1)"), word: self.words[self.fourIndices.0]) - private lazy var confirmSecondPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.1 + 1)"), word: self.words[self.fourIndices.1]) }() - private lazy var confirmThirdPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.2 + 1)"), word: self.words[self.fourIndices.2]) }() - private lazy var confirmFourthPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.3 + 1)"), word: self.words[self.fourIndices.3]) }() + private lazy var confirmSecondPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.1 + 1)"), word: self.words[self.fourIndices.1]) + private lazy var confirmThirdPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.2 + 1)"), word: self.words[self.fourIndices.2]) + private lazy var confirmFourthPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.3 + 1)"), word: self.words[self.fourIndices.3]) var store: Store? var walletManager: WalletManager? @@ -71,7 +70,8 @@ class ConfirmPaperPhraseViewController: UITableViewController { NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, - queue: nil) { [weak self] _ in + queue: nil) + { [weak self] _ in self?.dismiss(animated: true, completion: nil) } diff --git a/litewallet/ViewControllers/EnterPhraseCollectionViewController.swift b/litewallet/ViewControllers/EnterPhraseCollectionViewController.swift index 1c3c479aa..d8b654ea7 100644 --- a/litewallet/ViewControllers/EnterPhraseCollectionViewController.swift +++ b/litewallet/ViewControllers/EnterPhraseCollectionViewController.swift @@ -59,8 +59,7 @@ class EnterPhraseCollectionViewController: UICollectionViewController { return 12 } - override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell - { + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let item = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) guard let enterPhraseCell = item as? EnterPhraseCell else { return item } enterPhraseCell.index = indexPath.row diff --git a/litewallet/ViewControllers/EnterPhraseViewController.swift b/litewallet/ViewControllers/EnterPhraseViewController.swift index 09d5c449c..8e6a9d9db 100644 --- a/litewallet/ViewControllers/EnterPhraseViewController.swift +++ b/litewallet/ViewControllers/EnterPhraseViewController.swift @@ -8,8 +8,7 @@ enum PhraseEntryReason { typealias EnterPhraseCallback = (String) -> Void -class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomTitleView, Trackable -{ +class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomTitleView, Trackable { init(store: Store, walletManager: WalletManager, reason: PhraseEntryReason) { self.store = store self.walletManager = walletManager @@ -37,7 +36,7 @@ class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomT private let enterPhrase: EnterPhraseCollectionViewController private let errorLabel = UILabel.wrapping(font: .customBody(size: 16.0), color: .litewalletOrange) private let instruction = UILabel(font: .customBold(size: 14.0), color: .darkText) - internal let titleLabel = UILabel.wrapping(font: .customBold(size: 26.0), color: .darkText) + let titleLabel = UILabel.wrapping(font: .customBold(size: 26.0), color: .darkText) private let subheader = UILabel.wrapping(font: .customBody(size: 16.0), color: .darkText) private let faq: UIButton private let scrollView = UIScrollView() @@ -205,8 +204,7 @@ class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomT didScrollForCustomTitle(yOffset: scrollView.contentOffset.y) } - func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) - { + func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) { scrollViewWillEndDraggingForCustomTitle(yOffset: targetContentOffset.pointee.y) } diff --git a/litewallet/ViewControllers/Import/StartImportViewController.swift b/litewallet/ViewControllers/Import/StartImportViewController.swift index 3d59c9f1c..8ff5f5d9e 100644 --- a/litewallet/ViewControllers/Import/StartImportViewController.swift +++ b/litewallet/ViewControllers/Import/StartImportViewController.swift @@ -1,9 +1,7 @@ import BRCore import UIKit -private let mainURL = "https://insight.litecore.io/api/addrs/utxo" -private let fallbackURL = "https://insight.litecore.io/api/addrs/utxo" -private let testnetURL = "https://testnet.litecore.io/api/addrs/utxo" +private let mainURL = "https://litecoinspace.org/graphs/mempool" class StartImportViewController: UIViewController { init(walletManager: WalletManager, store: Store) { @@ -158,24 +156,23 @@ class StartImportViewController: UIViewController { return } - let urlString = E.isTestnet ? testnetURL : mainURL + let urlString = mainURL let request = NSMutableURLRequest(url: URL(string: urlString)!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 20.0) request.httpMethod = "POST" request.httpBody = "addrs=\(address)".data(using: .utf8) - let task = URLSession.shared.dataTask(with: request as URLRequest) - { [weak self] data, _, error in - guard let myself = self else { return } - guard error == nil else { print("error: \(error!)"); return } - guard let data = data, - let jsonData = try? JSONSerialization.jsonObject(with: data, options: []), - let json = jsonData as? [[String: Any]] else { return } + let task = URLSession.shared.dataTask(with: request as URLRequest) { [weak self] data, _, error in + guard let myself = self else { return } + guard error == nil else { print("error: \(error!)"); return } + guard let data = data, + let jsonData = try? JSONSerialization.jsonObject(with: data, options: []), + let json = jsonData as? [[String: Any]] else { return } - DispatchQueue.main.async { - myself.handleData(data: json, key: key) - } + DispatchQueue.main.async { + myself.handleData(data: json, key: key) } + } task.resume() }) } @@ -191,7 +188,7 @@ class StartImportViewController: UIViewController { } let outputs = data.compactMap { SimpleUTXO(json: $0) } let balance = outputs.map { $0.satoshis }.reduce(0, +) - outputs.forEach { output in + for output in outputs { tx.addInput(txHash: output.hash, index: output.index, amount: output.satoshis, script: output.script) } @@ -221,8 +218,7 @@ class StartImportViewController: UIViewController { }) } - private func publish(tx: UnsafeMutablePointer, balance: UInt64, fee: UInt64, key: BRKey) - { + private func publish(tx: UnsafeMutablePointer, balance: UInt64, fee: UInt64, key: BRKey) { present(importingActivity, animated: true, completion: { guard let wallet = self.walletManager.wallet else { return } guard let script = BRAddress(string: wallet.receiveAddress)?.scriptPubKey else { return } diff --git a/litewallet/ViewControllers/LoginViewController.swift b/litewallet/ViewControllers/LoginViewController.swift index 4f2445f07..4e6fca6c1 100644 --- a/litewallet/ViewControllers/LoginViewController.swift +++ b/litewallet/ViewControllers/LoginViewController.swift @@ -31,9 +31,8 @@ class LoginViewController: UIViewController, Subscriber, Trackable { pinView = PinView(style: .login, length: store.state.pinLength) } - let viewModel = LockScreenViewModel(store: self.store) + let viewModel = LockScreenViewModel(store: store) headerView = UIHostingController(rootView: LockScreenHeaderView(viewModel: viewModel)) - super.init(nibName: nil, bundle: nil) } @@ -51,7 +50,7 @@ class LoginViewController: UIViewController, Subscriber, Trackable { return view }() - private let headerView: UIHostingController + private var headerView: UIHostingController private let pinPadViewController = PinPadViewController(style: .clear, keyboardType: .pinPad, maxDigits: 0) private let pinViewContainer = UIView() private var pinView: PinView? @@ -59,6 +58,15 @@ class LoginViewController: UIViewController, Subscriber, Trackable { private let disabledView: WalletDisabledView private let activityView = UIActivityIndicatorView(style: .large) private let wipeBannerButton = UIButton() + private let enterPINLabel = UILabel(font: .barlowSemiBold(size: 18), color: .white) + private var pinPadBottom: NSLayoutConstraint? + private var topControlTop: NSLayoutConstraint? + private var unlockTimer: Timer? + private var pinPadBackground = UIView() + private var hasAttemptedToShowBiometrics = false + private var isResetting = false + private let versionLabel = UILabel(font: .barlowRegular(size: 12), color: .white) + private var isWalletEmpty = false var delegate: LoginViewControllerDelegate? @@ -89,17 +97,6 @@ class LoginViewController: UIViewController, Subscriber, Trackable { return button }() - private let enterPINLabel = UILabel(font: .barlowSemiBold(size: 18), color: .white) - private var pinPadBottom: NSLayoutConstraint? - private var topControlTop: NSLayoutConstraint? - private var unlockTimer: Timer? - private var pinPadBackground = UIView() - private var hasAttemptedToShowBiometrics = false - private let lockedOverlay = UIVisualEffectView() - private var isResetting = false - private let versionLabel = UILabel(font: .barlowRegular(size: 12), color: .white) - private var isWalletEmpty = false - override func viewDidLoad() { checkWalletBalance() addSubviews() @@ -116,18 +113,17 @@ class LoginViewController: UIViewController, Subscriber, Trackable { guard let walletManager = self?.walletManager else { return } self?.isResetting = true let nc = UINavigationController() - let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin - { phrase in - let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) - nc.pushViewController(updatePin, animated: true) - updatePin.resetFromDisabledWillSucceed = { - self?.disabledView.isHidden = true - } - updatePin.resetFromDisabledSuccess = { - self?.authenticationSucceded() - LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) - } - }) + let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin { phrase in + let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) + nc.pushViewController(updatePin, animated: true) + updatePin.resetFromDisabledWillSucceed = { + self?.disabledView.isHidden = true + } + updatePin.resetFromDisabledSuccess = { + self?.authenticationSucceded() + LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) + } + }) recover.addCloseNavigationItem() nc.viewControllers = [recover] nc.navigationBar.tintColor = .darkText @@ -432,7 +428,6 @@ class LoginViewController: UIViewController, Subscriber, Trackable { if let disabledUntil = walletManager?.walletDisabledUntil { let now = Date().timeIntervalSince1970 if disabledUntil > now { - saveEvent("login.locked") let disabledUntilDate = Date(timeIntervalSince1970: disabledUntil) let unlockInterval = disabledUntil - now let df = DateFormatter() diff --git a/litewallet/ViewControllers/PinPadViewController.swift b/litewallet/ViewControllers/PinPadViewController.swift index 786400383..53b459595 100644 --- a/litewallet/ViewControllers/PinPadViewController.swift +++ b/litewallet/ViewControllers/PinPadViewController.swift @@ -110,8 +110,7 @@ class PinPadViewController: UICollectionViewController { return items.count } - override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell - { + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let item = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) guard let pinPadCell = item as? GenericPinPadCell else { return item } pinPadCell.text = items[indexPath.item] @@ -237,10 +236,10 @@ class GenericPinPadCell: UICollectionViewCell { setup() } - internal let topLabel = UILabel(font: .customBody(size: 28.0)) - internal let centerLabel = UILabel(font: .customBody(size: 28.0)) - internal let sublabel = UILabel(font: .customBody(size: 11.0)) - internal let imageView = UIImageView() + let topLabel = UILabel(font: .customBody(size: 28.0)) + let centerLabel = UILabel(font: .customBody(size: 28.0)) + let sublabel = UILabel(font: .customBody(size: 11.0)) + let imageView = UIImageView() private func setup() { setAppearance() diff --git a/litewallet/ViewControllers/ReScanViewController.swift b/litewallet/ViewControllers/ReScanViewController.swift index caef3efd1..2f9a8bf20 100644 --- a/litewallet/ViewControllers/ReScanViewController.swift +++ b/litewallet/ViewControllers/ReScanViewController.swift @@ -3,7 +3,6 @@ import UIKit class ReScanViewController: UIViewController, Subscriber { init(store: Store) { self.store = store - faq = .buildFaqButton(store: store, articleId: ArticleIds.nothing) super.init(nibName: nil, bundle: nil) } @@ -12,7 +11,6 @@ class ReScanViewController: UIViewController, Subscriber { private let button = ShadowButton(title: S.ReScan.buttonTitle.localize(), type: .primary) private let footer = UILabel.wrapping(font: .customBody(size: 16.0), color: .secondaryGrayText) private let store: Store - private let faq: UIButton deinit { store.unsubscribe(self) @@ -26,7 +24,6 @@ class ReScanViewController: UIViewController, Subscriber { private func addSubviews() { view.addSubview(header) - view.addSubview(faq) view.addSubview(body) view.addSubview(button) view.addSubview(footer) @@ -36,21 +33,16 @@ class ReScanViewController: UIViewController, Subscriber { header.constrain([ header.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: C.padding[2]), header.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: C.padding[2]), - ]) - faq.constrain([ - faq.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -C.padding[2]), - faq.centerYAnchor.constraint(equalTo: header.centerYAnchor), - faq.widthAnchor.constraint(equalToConstant: 44.0), - faq.heightAnchor.constraint(equalToConstant: 44.0), + header.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: C.padding[-2]), ]) body.constrain([ body.leadingAnchor.constraint(equalTo: header.leadingAnchor), body.topAnchor.constraint(equalTo: header.bottomAnchor, constant: C.padding[2]), - body.trailingAnchor.constraint(equalTo: faq.trailingAnchor), + body.trailingAnchor.constraint(equalTo: header.trailingAnchor), ]) footer.constrain([ footer.leadingAnchor.constraint(equalTo: header.leadingAnchor), - footer.trailingAnchor.constraint(equalTo: faq.trailingAnchor), + footer.trailingAnchor.constraint(equalTo: header.trailingAnchor), footer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -C.padding[3]), ]) button.constrain([ @@ -90,10 +82,10 @@ class ReScanViewController: UIViewController, Subscriber { let bodyAttributes = [NSAttributedString.Key.font: UIFont.customBody(size: 16.0), NSAttributedString.Key.foregroundColor: UIColor.darkText] - body.append(NSAttributedString(string: "\(S.ReScan.subheader1)\n", attributes: headerAttributes)) - body.append(NSAttributedString(string: "\(S.ReScan.body1)\n\n", attributes: bodyAttributes)) - body.append(NSAttributedString(string: "\(S.ReScan.subheader2)\n", attributes: headerAttributes)) - body.append(NSAttributedString(string: "\(S.ReScan.body2)\n\n\(S.ReScan.body3)", attributes: bodyAttributes)) + body.append(NSAttributedString(string: "\(S.ReScan.subheader1.localize())\n", attributes: headerAttributes)) + body.append(NSAttributedString(string: "\(S.ReScan.body1.localize())\n\n", attributes: bodyAttributes)) + body.append(NSAttributedString(string: "\(S.ReScan.subheader2.localize())\n", attributes: headerAttributes)) + body.append(NSAttributedString(string: "\(S.ReScan.body2.localize())\n\n\(S.ReScan.body3.localize())", attributes: bodyAttributes)) return body } diff --git a/litewallet/ViewControllers/RequestAmountViewController.swift b/litewallet/ViewControllers/RequestAmountViewController.swift index 7966efee6..3bc1d098a 100644 --- a/litewallet/ViewControllers/RequestAmountViewController.swift +++ b/litewallet/ViewControllers/RequestAmountViewController.swift @@ -193,8 +193,7 @@ class RequestAmountViewController: UIViewController { presentText?(text, qrCode.image!) } - private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) - { + private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) { share.isEnabled = false address.isUserInteractionEnabled = false diff --git a/litewallet/ViewControllers/RootModals/ManageWalletViewController.swift b/litewallet/ViewControllers/RootModals/ManageWalletViewController.swift index b47dee2b4..1be5cac79 100644 --- a/litewallet/ViewControllers/RootModals/ManageWalletViewController.swift +++ b/litewallet/ViewControllers/RootModals/ManageWalletViewController.swift @@ -125,8 +125,7 @@ extension ManageWalletViewController: UITextFieldDelegate { return true } - func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool - { + func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool { guard let text = textField.text else { return true } if text.utf8.count + string.utf8.count > maxWalletNameLength { return false diff --git a/litewallet/ViewControllers/RootModals/MenuViewController.swift b/litewallet/ViewControllers/RootModals/MenuViewController.swift index cc6fa9a7e..4e9207f14 100644 --- a/litewallet/ViewControllers/RootModals/MenuViewController.swift +++ b/litewallet/ViewControllers/RootModals/MenuViewController.swift @@ -14,7 +14,7 @@ class MenuViewController: UIViewController, Trackable { fileprivate let buttons: [MenuButton] = { let types: [MenuButtonType] = [.security, .customerSupport, .settings, .lock] return types.compactMap { - return MenuButton(type: $0) + MenuButton(type: $0) } }() @@ -22,7 +22,7 @@ class MenuViewController: UIViewController, Trackable { override func viewDidLoad() { var previousButton: UIView? - buttons.forEach { button in + for button in buttons { button.addTarget(self, action: #selector(MenuViewController.didTapButton(button:)), for: .touchUpInside) view.addSubview(button) var topConstraint: NSLayoutConstraint? diff --git a/litewallet/ViewControllers/RootModals/ReceiveViewController.swift b/litewallet/ViewControllers/RootModals/ReceiveViewController.swift index 0a389cc7d..4eb9ad1a6 100644 --- a/litewallet/ViewControllers/RootModals/ReceiveViewController.swift +++ b/litewallet/ViewControllers/RootModals/ReceiveViewController.swift @@ -225,8 +225,7 @@ class ReceiveViewController: UIViewController, Subscriber, Trackable { presentText?(address.text!, qrCode.image!) } - private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) - { + private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) { share.isEnabled = false address.isUserInteractionEnabled = false diff --git a/litewallet/ViewControllers/RootModals/SendViewController.swift b/litewallet/ViewControllers/RootModals/SendViewController.swift index cbbc4a6ed..14a12b0be 100644 --- a/litewallet/ViewControllers/RootModals/SendViewController.swift +++ b/litewallet/ViewControllers/RootModals/SendViewController.swift @@ -40,8 +40,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka private let keychainPreferences = Keychain(service: "litewallet.user-prefs") private var buttonToBorder: CGFloat = 0.0 - init(store: Store, sender: Sender, walletManager: WalletManager, initialAddress: String? = nil, initialRequest: PaymentRequest? = nil) - { + init(store: Store, sender: Sender, walletManager: WalletManager, initialAddress: String? = nil, initialRequest: PaymentRequest? = nil) { self.store = store self.sender = sender self.walletManager = walletManager @@ -207,8 +206,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka } } - private func balanceTextForAmountWithFormattedFees(enteredAmount: Satoshis?, rate: Rate?) -> (NSAttributedString?, NSAttributedString?) - { + private func balanceTextForAmountWithFormattedFees(enteredAmount: Satoshis?, rate: Rate?) -> (NSAttributedString?, NSAttributedString?) { /// DEV: KCW 12-FEB-24 // The results of this output is doing double duty and the method is a nightmare. // The parent view controller uses the numbers and the text is used in this View Controller @@ -472,6 +470,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka case let .creationError(message): self?.showAlert(title: S.Send.createTransactionError.localize(), message: message, buttonLabel: S.Button.ok.localize()) self?.saveEvent("send.publishFailed", attributes: ["errorMessage": message]) + case let .publishFailure(error): if case let .posixError(code, description) = error { self?.showAlert(title: S.SecurityAlerts.sendFailure.localize(), message: "\(description) (\(code))", buttonLabel: S.Button.ok.localize()) @@ -489,14 +488,13 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka let isValid = protoReq.isValid() var isOutputTooSmall = false - if let errorMessage = protoReq.errorMessage, errorMessage == S.PaymentProtocol.Errors.requestExpired.localize(), !isValid - { + if let errorMessage = protoReq.errorMessage, errorMessage == S.PaymentProtocol.Errors.requestExpired.localize(), !isValid { return showAlert(title: S.PaymentProtocol.Errors.badPaymentRequest.localize(), message: errorMessage, buttonLabel: S.Button.ok.localize()) } // TODO: check for duplicates of already paid requests var requestAmount = Satoshis(0) - protoReq.details.outputs.forEach { output in + for output in protoReq.details.outputs { if output.amount > 0, output.amount < wallet.minOutputAmount { isOutputTooSmall = true } @@ -511,8 +509,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka self?.didIgnoreUsedAddressWarning = true self?.confirmProtocolRequest(protoReq: protoReq) }) - } else if let message = protoReq.errorMessage, !message.utf8.isEmpty, (protoReq.commonName?.utf8.count)! > 0, !didIgnoreIdentityNotCertified - { + } else if let message = protoReq.errorMessage, !message.utf8.isEmpty, (protoReq.commonName?.utf8.count)! > 0, !didIgnoreIdentityNotCertified { return showError(title: S.Send.identityNotCertified.localize(), message: message, ignore: { [weak self] in self?.didIgnoreIdentityNotCertified = true self?.confirmProtocolRequest(protoReq: protoReq) diff --git a/litewallet/ViewControllers/ScanViewController.swift b/litewallet/ViewControllers/ScanViewController.swift index 4690c5b96..92aa009fd 100644 --- a/litewallet/ViewControllers/ScanViewController.swift +++ b/litewallet/ViewControllers/ScanViewController.swift @@ -175,17 +175,16 @@ class ScanViewController: UIViewController, Trackable { } extension ScanViewController: AVCaptureMetadataOutputObjectsDelegate { - func metadataOutput(_: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from _: AVCaptureConnection) - { + func metadataOutput(_: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from _: AVCaptureConnection) { if let data = metadataObjects as? [AVMetadataMachineReadableCodeObject] { if data.isEmpty { guide.state = .normal } else { - data.forEach { - guard let uri = $0.stringValue + for data in data { + guard let uri = data.stringValue else { NSLog("ERROR: URI String not found") - return + continue } if completion != nil, guide.state != .positive { handleURI(uri) diff --git a/litewallet/ViewControllers/SecurityCenter/UpdatePinViewController.swift b/litewallet/ViewControllers/SecurityCenter/UpdatePinViewController.swift index ab00fe2c8..b091aba2f 100644 --- a/litewallet/ViewControllers/SecurityCenter/UpdatePinViewController.swift +++ b/litewallet/ViewControllers/SecurityCenter/UpdatePinViewController.swift @@ -14,8 +14,7 @@ class UpdatePinViewController: UIViewController, Subscriber { var resetFromDisabledSuccess: (() -> Void)? var resetFromDisabledWillSucceed: (() -> Void)? - init(store: Store, walletManager: WalletManager, type: UpdatePinType, showsBackButton: Bool = true, phrase: String? = nil) - { + init(store: Store, walletManager: WalletManager, type: UpdatePinType, showsBackButton: Bool = true, phrase: String? = nil) { self.store = store self.walletManager = walletManager self.phrase = phrase diff --git a/litewallet/ViewControllers/SettingsViewController.swift b/litewallet/ViewControllers/SettingsViewController.swift index 7bf3321c9..8f277f8fb 100644 --- a/litewallet/ViewControllers/SettingsViewController.swift +++ b/litewallet/ViewControllers/SettingsViewController.swift @@ -28,7 +28,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { private let sections: [String] private var rows: [String: [Setting]] private let cellIdentifier = "CellIdentifier" - internal var titleLabel = UILabel(font: .customBold(size: 26.0), color: .darkText) + var titleLabel = UILabel(font: .customBold(size: 26.0), color: .darkText) let customTitle: String private var walletIsEmpty = true @@ -68,8 +68,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { return rows[sections[section]]?.count ?? 0 } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) if let setting = rows[sections[indexPath.section]]?[indexPath.row] { @@ -162,8 +161,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { didScrollForCustomTitle(yOffset: scrollView.contentOffset.y) } - override func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) - { + override func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) { scrollViewWillEndDraggingForCustomTitle(yOffset: targetContentOffset.pointee.y) } diff --git a/litewallet/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift b/litewallet/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift index 260a9a72f..87cd73e24 100644 --- a/litewallet/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift +++ b/litewallet/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift @@ -1,8 +1,7 @@ import UIKit class LoginTransitionDelegate: NSObject, UIViewControllerTransitioningDelegate { - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissLoginAnimator() } } diff --git a/litewallet/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift b/litewallet/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift index 6bd995a3d..cf795646b 100644 --- a/litewallet/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift +++ b/litewallet/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift @@ -81,8 +81,7 @@ class ModalTransitionDelegate: NSObject, Subscriber { } extension ModalTransitionDelegate: UIViewControllerTransitioningDelegate { - func animationController(forPresented presented: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forPresented presented: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? { presentedViewController = presented return PresentModalAnimator(shouldCoverBottomGap: type == .regular, completion: { let panGr = UIPanGestureRecognizer(target: self, action: #selector(ModalTransitionDelegate.didUpdate(gr:))) @@ -93,13 +92,11 @@ extension ModalTransitionDelegate: UIViewControllerTransitioningDelegate { }) } - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissModalAnimator() } - func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? - { + func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { return isInteractive ? interactiveTransition : nil } } diff --git a/litewallet/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift b/litewallet/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift index de8527564..7cbf71cdf 100644 --- a/litewallet/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift +++ b/litewallet/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift @@ -5,13 +5,11 @@ private let duration: TimeInterval = 0.4 class TransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate { var shouldShowMaskView = true - func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return PresentGenericAnimator(shouldShowMaskView: shouldShowMaskView) } - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissGenericAnimator() } } diff --git a/litewallet/ViewControllers/WritePaperPhraseViewController.swift b/litewallet/ViewControllers/WritePaperPhraseViewController.swift index 14218dbd8..d16f0bdaf 100644 --- a/litewallet/ViewControllers/WritePaperPhraseViewController.swift +++ b/litewallet/ViewControllers/WritePaperPhraseViewController.swift @@ -62,7 +62,8 @@ class WritePaperPhraseViewController: UIViewController { NotificationCenter.default.addObserver(forName: UIScene.willDeactivateNotification, object: nil, - queue: nil) { [weak self] _ in + queue: nil) + { [weak self] _ in self?.dismiss(animated: true, completion: nil) } } @@ -87,7 +88,7 @@ class WritePaperPhraseViewController: UIViewController { ]) label.constrainBottomCorners(sidePadding: C.padding[3], bottomPadding: C.padding[2]) - phraseViews.enumerated().forEach { index, phraseView in + for (index, phraseView) in phraseViews.enumerated() { // The first phrase should initially be on the screen let constant = index == 0 ? 0.0 : phraseOffscreenOffset let xConstraint = NSLayoutConstraint(item: phraseView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: constant) diff --git a/litewallet/ViewModels/Transaction.swift b/litewallet/ViewModels/Transaction.swift index 0478effe2..8dc0b8405 100644 --- a/litewallet/ViewModels/Transaction.swift +++ b/litewallet/ViewModels/Transaction.swift @@ -13,6 +13,7 @@ class Transaction { // MARK: - Public private let opsAddressSet: Set = Partner.litewalletOpsSet() + /// Hassan init?(_ tx: BRTxRef, walletManager: WalletManager, kvStore: BRReplicatedKVStore?, rate: Rate?) { guard let wallet = walletManager.wallet else { return nil } guard let peerManager = walletManager.peerManager else { return nil } @@ -20,13 +21,12 @@ class Transaction { self.tx = tx self.wallet = wallet self.kvStore = kvStore - let fee = wallet.feeForTx(tx) ?? 0 var outputAddresses = Set() var opsAmount = UInt64(0) - tx.outputs.enumerated().forEach { _, output in + for (_, output) in tx.outputs.enumerated() { outputAddresses.insert(output.updatedSwiftAddress) } @@ -100,8 +100,7 @@ class Transaction { } var exchangeRateInfo = "" - if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first - { + if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first { let difference = (currentRate.rate - metaData.exchangeRate) / metaData.exchangeRate * 100.0 let prefix = difference > 0.0 ? "+" : "-" let firstLine = direction == .sent ? S.Transaction.exchangeOnDaySent : S.Transaction.exchangeOnDayReceived @@ -117,28 +116,23 @@ class Transaction { return "\(amountString)\n\(startingString)\n\(endingString)\n\(exchangeRateInfo)" } - func amountDetailsAmountString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsAmountString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { let feeAmount = Amount(amount: fee, rate: rate, maxDigits: maxDigits) let feeString = direction == .sent ? String(format: S.Transaction.fee.localize(), "\(feeAmount.string(isLtcSwapped: isLtcSwapped))") : "" return "\(direction.sign)\(Amount(amount: satoshis, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped)) \(feeString)" } - func amountDetailsStartingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsStartingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { return String(format: S.Transaction.starting.localize(), "\(Amount(amount: startingBalance, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped))") } - func amountDetailsEndingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsEndingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { return String(format: String(format: S.Transaction.ending.localize(), "\(Amount(amount: balanceAfter, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped))")) } - func amountExchangeString(isLtcSwapped _: Bool, rate _: Rate, rates: [Rate], maxDigits _: Int) -> String - { + func amountExchangeString(isLtcSwapped _: Bool, rate _: Rate, rates: [Rate], maxDigits _: Int) -> String { var exchangeRateInfo = "" - if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first - { + if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first { let difference = (currentRate.rate - metaData.exchangeRate) / metaData.exchangeRate * 100.0 let prefix = difference > 0.0 ? "+" : "-" let nf = NumberFormatter() @@ -172,7 +166,7 @@ class Transaction { lazy var toAddress: String? = { var outputAddresses = Set() - tx.outputs.enumerated().forEach { _, output in + for (_, output) in tx.outputs.enumerated() { outputAddresses.insert(output.updatedSwiftAddress) } let usedOpsAddress = outputAddresses.intersection(opsAddressSet).first @@ -210,7 +204,6 @@ class Transaction { case .moved: guard let output = self.tx.outputs.filter({ output in self.wallet.containsAddress(output.updatedSwiftAddress) - }).first else { let properties = ["error": "no_moved_address_found"] LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, @@ -226,6 +219,9 @@ class Transaction { } var comment: String? { + if metaData?.comment != nil { + print("=== memo comments \(metaData?.comment ?? "NO MEMO")") + } return metaData?.comment } @@ -386,8 +382,7 @@ private extension String { } } -private func makeStatus(_ txRef: BRTxRef, wallet: BRWallet, peerManager: BRPeerManager, confirms: Int, direction: TransactionDirection) -> String -{ +private func makeStatus(_ txRef: BRTxRef, wallet: BRWallet, peerManager: BRPeerManager, confirms: Int, direction: TransactionDirection) -> String { let tx = txRef.pointee guard wallet.transactionIsValid(txRef) else { diff --git a/litewallet/Views/AlertView.swift b/litewallet/Views/AlertView.swift index 58a72e7db..42888c32c 100644 --- a/litewallet/Views/AlertView.swift +++ b/litewallet/Views/AlertView.swift @@ -4,7 +4,6 @@ enum AlertType { case pinSet(callback: () -> Void) case paperKeySet(callback: () -> Void) case sendSuccess - case resolvedSuccess case addressesCopied case sweepSuccess(callback: () -> Void) @@ -19,13 +18,10 @@ enum AlertType { return S.SecurityAlerts.paperKeySet.localize() case .sendSuccess: return S.SecurityAlerts.sendSuccess.localize() - case .resolvedSuccess: - return S.SecurityAlerts.resolvedSuccess.localize() case .addressesCopied: return S.SecurityAlerts.copiedAddressesHeader.localize() case .sweepSuccess: return S.Import.success.localize() - // Failure(s) case .failedResolution: return S.SecurityAlerts.sendFailure.localize() @@ -40,13 +36,10 @@ enum AlertType { return S.SecurityAlerts.paperKeySetSubheader.localize() case .sendSuccess: return S.SecurityAlerts.sendSuccessSubheader.localize() - case .resolvedSuccess: - return S.SecurityAlerts.resolvedSuccessSubheader.localize() case .addressesCopied: return S.SecurityAlerts.copiedAddressesSubheader.localize() case .sweepSuccess: return S.Import.successBody.localize() - // Failure(s) case .failedResolution: return S.SecurityAlerts.resolvedSuccessSubheader.localize() @@ -68,17 +61,13 @@ func == (lhs: AlertType, rhs: AlertType) -> Bool { return true case (.sendSuccess, .sendSuccess): return true - case (.resolvedSuccess, .resolvedSuccess): - return true case (.addressesCopied, .addressesCopied): return true case (.sweepSuccess(_), .sweepSuccess(_)): return true - // Failure(s) case (.failedResolution, .failedResolution): return true - default: return false } diff --git a/litewallet/Views/DefaultCurrencyViewController.swift b/litewallet/Views/DefaultCurrencyViewController.swift index 35624ca83..44d8c3db3 100644 --- a/litewallet/Views/DefaultCurrencyViewController.swift +++ b/litewallet/Views/DefaultCurrencyViewController.swift @@ -81,8 +81,7 @@ class DefaultCurrencyViewController: UITableViewController, Subscriber { return rates.count } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) let rate = rates[indexPath.row] cell.textLabel?.text = "\(rate.code) (\(rate.currencySymbol))" diff --git a/litewallet/Views/ModalHeaderView.swift b/litewallet/Views/ModalHeaderView.swift index 84e0ff2f4..21a143fce 100644 --- a/litewallet/Views/ModalHeaderView.swift +++ b/litewallet/Views/ModalHeaderView.swift @@ -12,8 +12,7 @@ class ModalHeaderView: UIView { didSet { close.tap = closeCallback } } - init(title: String, style: ModalHeaderViewStyle, faqInfo _: (Store, String)? = nil, showCloseButton: Bool = true) - { + init(title: String, style: ModalHeaderViewStyle, faqInfo _: (Store, String)? = nil, showCloseButton: Bool = true) { self.title.text = title self.style = style diff --git a/litewallet/Views/PinView.swift b/litewallet/Views/PinView.swift index 82e9056e6..bab6cbf4d 100644 --- a/litewallet/Views/PinView.swift +++ b/litewallet/Views/PinView.swift @@ -39,7 +39,7 @@ class PinView: UIView { } func fill(_ number: Int) { - filled.enumerated().forEach { index, circle in + for (index, circle) in filled.enumerated() { circle.isHidden = index > number - 1 } } @@ -80,7 +80,7 @@ class PinView: UIView { } private func addCircleContraints(_ circles: [Circle]) { - circles.enumerated().forEach { index, circle in + for (index, circle) in circles.enumerated() { addSubview(circle) let leadingConstraint: NSLayoutConstraint? if index == 0 { diff --git a/litewallet/Views/SearchHeaderView.swift b/litewallet/Views/SearchHeaderView.swift index f0eecd854..b96931b24 100644 --- a/litewallet/Views/SearchHeaderView.swift +++ b/litewallet/Views/SearchHeaderView.swift @@ -100,9 +100,6 @@ class SearchHeaderView: UIView { } } - private let sentFilter: TransactionFilter = { $0.direction == .sent } - private let receivedFilter: TransactionFilter = { $0.direction == .received } - override func layoutSubviews() { guard !hasSetup else { return } setup() diff --git a/litewallet/Views/SendViewCells/AddressCell.swift b/litewallet/Views/SendViewCells/AddressCell.swift index 7e0a42942..7cdbd1f83 100644 --- a/litewallet/Views/SendViewCells/AddressCell.swift +++ b/litewallet/Views/SendViewCells/AddressCell.swift @@ -98,8 +98,7 @@ extension AddressCell: UITextFieldDelegate { return true } - func textField(_: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool - { + func textField(_: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool { if let request = PaymentRequest(string: string) { didReceivePaymentRequest?(request) return false diff --git a/litewallet/Views/SendViewCells/DescriptionSendCell.swift b/litewallet/Views/SendViewCells/DescriptionSendCell.swift index 80a08fbbd..9a8295713 100644 --- a/litewallet/Views/SendViewCells/DescriptionSendCell.swift +++ b/litewallet/Views/SendViewCells/DescriptionSendCell.swift @@ -84,8 +84,7 @@ extension DescriptionSendCell: UITextViewDelegate { return true } - func textView(_ textView: UITextView, shouldChangeTextIn _: NSRange, replacementText text: String) -> Bool - { + func textView(_ textView: UITextView, shouldChangeTextIn _: NSRange, replacementText text: String) -> Bool { guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else { textView.resignFirstResponder() diff --git a/litewallet/Views/ShadowButton.swift b/litewallet/Views/ShadowButton.swift index 8b3468e1d..8efce3176 100644 --- a/litewallet/Views/ShadowButton.swift +++ b/litewallet/Views/ShadowButton.swift @@ -50,7 +50,6 @@ class ShadowButton: UIControl { private let container = UIView() private let shadowView = UIView() private let label = UILabel() - private let shadowYOffset: CGFloat = 4.0 private let cornerRadius: CGFloat = 4.0 private var imageView: UIImageView? diff --git a/litewallet/Wallet/ExchangeUpdater.swift b/litewallet/Wallet/ExchangeUpdater.swift index 5b52eb0a0..f4f18422f 100644 --- a/litewallet/Wallet/ExchangeUpdater.swift +++ b/litewallet/Wallet/ExchangeUpdater.swift @@ -15,11 +15,13 @@ class ExchangeUpdater: Subscriber { } func refresh(completion: @escaping () -> Void) { - walletManager.apiClient?.exchangeRates { rates, _ in + if walletManager.store.state.walletState.syncState != .syncing { + walletManager.apiClient?.exchangeRates { rates, _ in - guard let currentRate = rates.first(where: { $0.code == self.store.state.defaultCurrencyCode }) else { completion(); return } - self.store.perform(action: ExchangeRates.setRates(currentRate: currentRate, rates: rates)) - completion() + guard let currentRate = rates.first(where: { $0.code == self.store.state.defaultCurrencyCode }) else { completion(); return } + self.store.perform(action: ExchangeRates.setRates(currentRate: currentRate, rates: rates)) + completion() + } } } diff --git a/litewallet/WalletCoordinator.swift b/litewallet/WalletCoordinator.swift index 7f8d0997b..dc1ab8925 100644 --- a/litewallet/WalletCoordinator.swift +++ b/litewallet/WalletCoordinator.swift @@ -121,46 +121,45 @@ class WalletCoordinator: Subscriber, Trackable { updateTimer = nil Task { - guard let txRefs = self.walletManager.wallet?.transactions else { - let properties = ["error_message": "wallet_tx_refs_are_nil"] - LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) - return - } + do { + guard let wallet = self.walletManager.wallet else { + debugPrint("Wallet not found!") + return + } - let transactions = await self.makeTransactionViewModels(transactions: txRefs, walletManager: self.walletManager, kvStore: self.kvStore, rate: self.store.state.currentRate) - if !transactions.isEmpty { - Task { - self.store.perform(action: WalletChange.setTransactions(transactions)) + let transactions = try await self.makeTransactionViewModels(transactions: wallet.transactions, + walletManager: self.walletManager, + kvStore: self.kvStore, + rate: self.store.state.currentRate) + + if !transactions.isEmpty { + Task { + self.store.perform(action: WalletChange.setTransactions(transactions)) + } + } else { + LWAnalytics.logEventWithParameters(itemName: ._20240214_TI, properties: ["transactions_info": "no_txs_found_in_wallet"]) } - } else { - let properties = ["transactions_info": "no_txs_found_in_wallet"] - LWAnalytics.logEventWithParameters(itemName: ._20240214_TI, properties: properties) + } catch { + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error_message": error.localizedDescription]) } } } - func makeTransactionViewModels(transactions: [BRTxRef?], walletManager: WalletManager, kvStore: BRReplicatedKVStore?, rate: Rate?) async -> [Transaction] - { - /// Send analytical data for any nils in this method - if kvStore == nil { - let properties = ["error_message": "replicated_kv_store_is_nil"] - LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) + func makeTransactionViewModels(transactions: [BRTxRef?], walletManager: WalletManager, kvStore: BRReplicatedKVStore?, rate: Rate?) async throws -> [Transaction] { + guard let kvStore = kvStore else { + // throw MakeTransactionError.replicatedKVStoreNotFound + return [] } - if rate == nil { - let properties = ["error_message": "rate_is_nil"] - LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: properties) + guard let rate = rate else { + // throw MakeTransactionError.rateNotFound + return [] } return transactions.compactMap { $0 }.sorted { - if $0.pointee.timestamp == 0 { - return true - } else if $1.pointee.timestamp == 0 { - return false - } else { - return $0.pointee.timestamp > $1.pointee.timestamp - } - }.compactMap { + $0.pointee.timestamp > $1.pointee.timestamp + } + .compactMap { Transaction($0, walletManager: walletManager, kvStore: kvStore, rate: rate) } } diff --git a/litewallet/WalletManager+Auth.swift b/litewallet/WalletManager+Auth.swift index fbe8cb4c9..2c6301962 100644 --- a/litewallet/WalletManager+Auth.swift +++ b/litewallet/WalletManager+Auth.swift @@ -272,8 +272,7 @@ extension WalletManager: WalletAuthenticator { } // sign the given transaction using biometric authentication - func signTransaction(_ tx: BRTxRef, biometricsPrompt: String, completion: @escaping (BiometricsResult) -> Void) - { + func signTransaction(_ tx: BRTxRef, biometricsPrompt: String, completion: @escaping (BiometricsResult) -> Void) { do { let spendLimit: Int64 = try keychainItem(key: KeychainKey.spendLimit) ?? 0 guard let wallet = wallet, wallet.amountSentByTx(tx) - wallet.amountReceivedFromTx(tx) + wallet.totalSent <= UInt64(spendLimit) @@ -592,8 +591,7 @@ private func setKeychainItem(key: String, item: T?, authenticated: Bool = fal if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound { status = SecItemDelete(query as CFDictionary) } - } else if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound - { // update existing item + } else if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound { // update existing item let update = [kSecAttrAccessible as String: accessible, kSecValueData as String: data as Any] status = SecItemUpdate(query as CFDictionary, update as CFDictionary) diff --git a/litewallet/WalletManager.swift b/litewallet/WalletManager.swift index 637aa4dcb..5ddde139c 100644 --- a/litewallet/WalletManager.swift +++ b/litewallet/WalletManager.swift @@ -3,8 +3,8 @@ import Foundation import SQLite3 import SystemConfiguration -internal let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) -internal let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) +let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) +let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) enum WalletManagerError: Error { case sqliteError(errorCode: Int32, description: String) @@ -19,13 +19,13 @@ private func SafeSqlite3ColumnBlob(statement: OpaquePointer, iCol: Int32) -> // After instantiating a WalletManager object, call myWalletManager.peerManager.connect() to begin syncing. class WalletManager: BRWalletListener, BRPeerManagerListener { - internal var didInitWallet = false - internal let dbPath: String - internal var db: OpaquePointer? + var didInitWallet = false + let dbPath: String + var db: OpaquePointer? private var txEnt: Int32 = 0 private var blockEnt: Int32 = 0 private var peerEnt: Int32 = 0 - internal let store: Store + let store: Store var masterPubKey = BRMasterPubKey() var earliestKeyTime: TimeInterval = 0 @@ -67,7 +67,7 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { } // TODO: Pass the fpRate from User Preferences - internal lazy var lazyPeerManager: BRPeerManager? = { + lazy var lazyPeerManager: BRPeerManager? = { if let wallet = self.wallet { return BRPeerManager(wallet: wallet, earliestKeyTime: self.earliestKeyTime, blocks: self.loadBlocks(), peers: self.loadPeers(), listener: self, fpRate: FalsePositiveRates.semiPrivate.rawValue) } else { @@ -75,9 +75,9 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { } }() - internal lazy var lazyWallet: BRWallet? = BRWallet(transactions: self.loadTransactions(), - masterPubKey: self.masterPubKey, - listener: self) + lazy var lazyWallet: BRWallet? = BRWallet(transactions: self.loadTransactions(), + masterPubKey: self.masterPubKey, + listener: self) private lazy var lazyAPIClient: BRAPIClient? = { guard let wallet = self.wallet else { return nil } @@ -91,9 +91,8 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { lazy var allWordsLists: [[NSString]] = { var array: [[NSString]] = [] - Bundle.main.localizations.forEach { lang in - if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) - { + for lang in Bundle.main.localizations { + if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) { if let words = NSArray(contentsOfFile: path) as? [NSString] { array.append(words) } @@ -105,9 +104,8 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { lazy var allWords: Set = { var set: Set = Set() - Bundle.main.localizations.forEach { lang in - if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) - { + for lang in Bundle.main.localizations { + if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) { if let words = NSArray(contentsOfFile: path) as? [NSString] { set.formUnion(words.map { $0 as String }) } diff --git a/litewallet/de.lproj/Localizable.strings b/litewallet/de.lproj/Localizable.strings index b5ba77126..b22946220 100755 --- a/litewallet/de.lproj/Localizable.strings +++ b/litewallet/de.lproj/Localizable.strings @@ -904,21 +904,6 @@ /* Fees: $0.01*/ "Send.fee" = "GebĆ¼hren: %1$@"; -/* Fees: $0.01*/ -"Send.fee" = "GebĆ¼hren: %1$@"; - -/* Fees: $0.01*/ -"Send.fee" = "GebĆ¼hren: %1$@"; - -/* Fees Blank: */ -"Send.feeBlank" = "GebĆ¼hren:"; - -/* Fees Blank: */ -"Send.feeBlank" = "GebĆ¼hren:"; - -/* Fees Blank: */ -"Send.feeBlank" = "GebĆ¼hren:"; - /* Fees Blank: */ "Send.feeBlank" = "GebĆ¼hren:"; diff --git a/litewallet/en.lproj/Localizable.strings b/litewallet/en.lproj/Localizable.strings index 4cc13379c..d93df6696 100644 --- a/litewallet/en.lproj/Localizable.strings +++ b/litewallet/en.lproj/Localizable.strings @@ -907,18 +907,6 @@ /* Fees: $0.01*/ "Send.fee" = "Fees: %1$@"; -/* Fees: $0.01*/ -"Send.fee" = "Fees: %1$@"; - -/* Fees: $0.01*/ -"Send.fee" = "Fees: %1$@"; - -/* Fees Blank: */ -"Send.feeBlank" = "Fees:"; - -/* Fees Blank: */ -"Send.feeBlank" = "Fees:"; - /* Fees Blank: */ "Send.feeBlank" = "Fees:"; diff --git a/litewallet/src/AppDelegate.swift b/litewallet/src/AppDelegate.swift index 8ae9e44bb..ad04fedf7 100644 --- a/litewallet/src/AppDelegate.swift +++ b/litewallet/src/AppDelegate.swift @@ -9,8 +9,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? let applicationController = ApplicationController() let pushNotifications = PushNotifications.shared - func application(_ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool - { + func application(_ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { setFirebaseConfiguration() updateCurrentUserLocale(localeId: Locale.current.identifier) @@ -64,13 +63,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate { applicationController.willResignActive() } - func application(_: UIApplication, shouldAllowExtensionPointIdentifier _: UIApplication.ExtensionPointIdentifier) -> Bool - { + func application(_: UIApplication, shouldAllowExtensionPointIdentifier _: UIApplication.ExtensionPointIdentifier) -> Bool { return false // disable extensions such as custom keyboards for security purposes } - func application(_: UIApplication, open url: URL, options _: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool - { + func application(_: UIApplication, open url: URL, options _: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { return applicationController.open(url: url) } diff --git a/litewallet/src/ApplicationController.swift b/litewallet/src/ApplicationController.swift index 2aa0e518e..31d5d45b8 100644 --- a/litewallet/src/ApplicationController.swift +++ b/litewallet/src/ApplicationController.swift @@ -273,8 +273,7 @@ class ApplicationController: Subscriber, Trackable { func performBackgroundFetch() { saveEvent("appController.performBackgroundFetch") let group = DispatchGroup() - if let peerManager = walletManager?.peerManager, peerManager.syncProgress(fromStartHeight: peerManager.lastBlockHeight) < 1.0 - { + if let peerManager = walletManager?.peerManager, peerManager.syncProgress(fromStartHeight: peerManager.lastBlockHeight) < 1.0 { group.enter() LWAnalytics.logEventWithParameters(itemName: ._20200111_DEDG) diff --git a/litewallet/src/Constants/Functions.swift b/litewallet/src/Constants/Functions.swift index 7805bf290..03ad48682 100644 --- a/litewallet/src/Constants/Functions.swift +++ b/litewallet/src/Constants/Functions.swift @@ -23,16 +23,14 @@ func guardProtected(queue: DispatchQueue, callback: @escaping () -> Void) { } } -func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void -{ +func strongify(_ context: Context, closure: @escaping (Context) -> Void) -> () -> Void { return { [weak context] in guard let strongContext = context else { return } closure(strongContext) } } -func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void -{ +func strongify(_ context: Context?, closure: @escaping (Context, Arguments) -> Void) -> (Arguments) -> Void { return { [weak context] arguments in guard let strongContext = context else { return } closure(strongContext, arguments) diff --git a/litewallet/src/Environment.swift b/litewallet/src/Environment.swift index 8541978fa..942cdce17 100644 --- a/litewallet/src/Environment.swift +++ b/litewallet/src/Environment.swift @@ -126,7 +126,7 @@ struct E { }() static var isIPhone4: Bool { - return (UIScreen.main.bounds.size.height == 480.0) + return UIScreen.main.bounds.size.height == 480.0 } static var isIPhone5: Bool { @@ -134,24 +134,22 @@ struct E { } static var isIPhoneX: Bool { - return (UIScreen.main.bounds.size.height == 812.0) + return UIScreen.main.bounds.size.height == 812.0 } static var isIPhone8Plus: Bool { - return (UIScreen.main.bounds.size.height == 736.0) + return UIScreen.main.bounds.size.height == 736.0 } static var isIPhoneXsMax: Bool { - return (UIScreen.main.bounds.size.height == 812.0) + return UIScreen.main.bounds.size.height == 812.0 } static var isIPad: Bool { - return (UIDevice.current.userInterfaceIdiom == .pad) + return UIDevice.current.userInterfaceIdiom == .pad } - static let is32Bit: Bool = { - MemoryLayout.size == MemoryLayout.size - }() + static let is32Bit: Bool = MemoryLayout.size == MemoryLayout.size static var screenHeight: CGFloat { return UIScreen.main.bounds.size.height diff --git a/litewallet/src/Extensions/Async.swift b/litewallet/src/Extensions/Async.swift index 22dbf25c6..ed43c3625 100644 --- a/litewallet/src/Extensions/Async.swift +++ b/litewallet/src/Extensions/Async.swift @@ -1,10 +1,9 @@ import Foundation enum Async { - static func parallel(callbacks: [(@escaping () -> Void) -> Void], completion: @escaping () -> Void) - { + static func parallel(callbacks: [(@escaping () -> Void) -> Void], completion: @escaping () -> Void) { let dispatchGroup = DispatchGroup() - callbacks.forEach { cb in + for cb in callbacks { dispatchGroup.enter() cb { dispatchGroup.leave() diff --git a/litewallet/src/Extensions/CGContext+Additions.swift b/litewallet/src/Extensions/CGContext+Additions.swift index 29b720a3a..c5196c930 100644 --- a/litewallet/src/Extensions/CGContext+Additions.swift +++ b/litewallet/src/Extensions/CGContext+Additions.swift @@ -4,8 +4,8 @@ extension CGContext { func addLineThrough(_ points: [(CGFloat, CGFloat)]) { guard let first = points.first else { return } move(to: CGPoint(x: first.0, y: first.1)) - points.dropFirst().forEach { - addLine(to: CGPoint(x: $0.0, y: $0.1)) + for point in points.dropFirst() { + addLine(to: CGPoint(x: point.0, y: point.1)) } } } diff --git a/litewallet/src/Extensions/NumberFormatter+Additions.swift b/litewallet/src/Extensions/NumberFormatter+Additions.swift index 7875041e4..8505fb57b 100644 --- a/litewallet/src/Extensions/NumberFormatter+Additions.swift +++ b/litewallet/src/Extensions/NumberFormatter+Additions.swift @@ -1,8 +1,7 @@ import Foundation extension NumberFormatter { - static func formattedString(amount: Satoshis, rate: Rate?, minimumFractionDigits: Int?, maxDigits: Int) -> String - { + static func formattedString(amount: Satoshis, rate: Rate?, minimumFractionDigits: Int?, maxDigits: Int) -> String { let displayAmount = Amount(amount: amount.rawValue, rate: rate ?? Rate.empty, maxDigits: maxDigits) var formatter: NumberFormatter var output = "" diff --git a/litewallet/src/Extensions/UIView+AnimationAdditions.swift b/litewallet/src/Extensions/UIView+AnimationAdditions.swift index f716102c7..355be2644 100644 --- a/litewallet/src/Extensions/UIView+AnimationAdditions.swift +++ b/litewallet/src/Extensions/UIView+AnimationAdditions.swift @@ -1,8 +1,7 @@ import UIKit extension UIView { - static func spring(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) - { + static func spring(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) { if #available(iOS 10.0, *) { UIViewPropertyAnimator.springAnimation(duration, delay: delay, animations: animations, completion: { _ in completion(true) }) } else { @@ -10,8 +9,7 @@ extension UIView { } } - static func spring(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) - { + static func spring(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (Bool) -> Void) { if #available(iOS 10.0, *) { UIViewPropertyAnimator.springAnimation(duration, animations: animations, completion: { _ in completion(true) }) } else { diff --git a/litewallet/src/Extensions/UIView+BRWAdditions.swift b/litewallet/src/Extensions/UIView+BRWAdditions.swift index d67869d60..fc0c99593 100644 --- a/litewallet/src/Extensions/UIView+BRWAdditions.swift +++ b/litewallet/src/Extensions/UIView+BRWAdditions.swift @@ -42,8 +42,7 @@ extension UIView { NSLayoutConstraint.activate(constraints.compactMap { $0 }) } - func constraint(_ attribute: NSLayoutConstraint.Attribute, toView: UIView, constant: CGFloat?) -> NSLayoutConstraint? - { + func constraint(_ attribute: NSLayoutConstraint.Attribute, toView: UIView, constant: CGFloat?) -> NSLayoutConstraint? { guard superview != nil else { assertionFailure("Superview cannot be nil when adding contraints"); return nil } translatesAutoresizingMaskIntoConstraints = false return NSLayoutConstraint(item: self, attribute: attribute, relatedBy: .equal, toItem: toView, attribute: attribute, multiplier: 1.0, constant: constant ?? 0.0) @@ -94,8 +93,7 @@ extension UIView { return NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal, toItem: toLeading, attribute: .leading, multiplier: 1.0, constant: constant) } - func constrainTopCorners(sidePadding: CGFloat, topPadding: CGFloat, topLayoutGuide: UILayoutSupport) - { + func constrainTopCorners(sidePadding: CGFloat, topPadding: CGFloat, topLayoutGuide: UILayoutSupport) { guard let view = superview else { assertionFailure("Superview cannot be nil when adding contraints"); return } constrain([ constraint(.leading, toView: view, constant: sidePadding), diff --git a/litewallet/src/Extensions/UIViewPropertyAnimator+BRWAdditions.swift b/litewallet/src/Extensions/UIViewPropertyAnimator+BRWAdditions.swift index 320650b69..e48569116 100644 --- a/litewallet/src/Extensions/UIViewPropertyAnimator+BRWAdditions.swift +++ b/litewallet/src/Extensions/UIViewPropertyAnimator+BRWAdditions.swift @@ -2,8 +2,7 @@ import UIKit @available(iOS 10.0, *) extension UIViewPropertyAnimator { - static func springAnimation(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) - { + static func springAnimation(_ duration: TimeInterval, delay: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) { let springParameters = UISpringTimingParameters(dampingRatio: 0.7) let animator = UIViewPropertyAnimator(duration: duration, timingParameters: springParameters) animator.addAnimations(animations) @@ -11,8 +10,7 @@ extension UIViewPropertyAnimator { animator.startAnimation(afterDelay: delay) } - static func springAnimation(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) - { + static func springAnimation(_ duration: TimeInterval, animations: @escaping () -> Void, completion: @escaping (UIViewAnimatingPosition) -> Void) { springAnimation(duration, delay: 0.0, animations: animations, completion: completion) } } diff --git a/litewallet/src/FlowControllers/MessageUIPresenter.swift b/litewallet/src/FlowControllers/MessageUIPresenter.swift index 89cf3adbf..6094810fe 100644 --- a/litewallet/src/FlowControllers/MessageUIPresenter.swift +++ b/litewallet/src/FlowControllers/MessageUIPresenter.swift @@ -110,15 +110,13 @@ class MessageUIPresenter: NSObject, Trackable { } extension MessageUIPresenter: MFMailComposeViewControllerDelegate { - func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) - { + func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith _: MFMailComposeResult, error _: Error?) { dismiss(controller) } } extension MessageUIPresenter: MFMessageComposeViewControllerDelegate { - func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) - { + func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith _: MessageComposeResult) { dismiss(controller) } } diff --git a/litewallet/src/FlowControllers/StartNavigationDelegate.swift b/litewallet/src/FlowControllers/StartNavigationDelegate.swift index c6d54b5d4..8ac4726cb 100644 --- a/litewallet/src/FlowControllers/StartNavigationDelegate.swift +++ b/litewallet/src/FlowControllers/StartNavigationDelegate.swift @@ -7,8 +7,7 @@ class StartNavigationDelegate: NSObject, UINavigationControllerDelegate { self.store = store } - func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) - { + func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) { if viewController is RecoverWalletIntroViewController { navigationController.navigationBar.tintColor = .white navigationController.navigationBar.titleTextAttributes = [ diff --git a/litewallet/src/ModalPresenter.swift b/litewallet/src/ModalPresenter.swift index b54f6d4f1..35fd280dc 100644 --- a/litewallet/src/ModalPresenter.swift +++ b/litewallet/src/ModalPresenter.swift @@ -443,10 +443,9 @@ class ModalPresenter: Subscriber, Trackable { nc.setWhiteStyle() nc.delegate = myself.wipeNavigationDelegate let start = StartWipeWalletViewController { - let recover = EnterPhraseViewController(store: myself.store, walletManager: walletManager, reason: .validateForWipingWallet - { - myself.wipeWallet() - }) + let recover = EnterPhraseViewController(store: myself.store, walletManager: walletManager, reason: .validateForWipingWallet { + myself.wipeWallet() + }) nc.pushViewController(recover, animated: true) } start.addCloseNavigationItem(tintColor: .white) @@ -715,8 +714,7 @@ class ModalPresenter: Subscriber, Trackable { presentLoginScan() } else { LWAnalytics.logEventWithParameters(itemName: ._20210427_HCIEEH) - if let presented = UIApplication.shared.windows.filter({ $0.isKeyWindow }).first?.rootViewController?.presentedViewController - { + if let presented = UIApplication.shared.windows.filter({ $0.isKeyWindow }).first?.rootViewController?.presentedViewController { presented.dismiss(animated: true, completion: { self.presentLoginScan() }) @@ -833,8 +831,7 @@ class ModalPresenter: Subscriber, Trackable { } class SecurityCenterNavigationDelegate: NSObject, UINavigationControllerDelegate { - func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) - { + func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated _: Bool) { guard let coordinator = navigationController.topViewController?.transitionCoordinator else { return } if coordinator.isInteractive { diff --git a/litewallet/src/PaymentProtocol.swift b/litewallet/src/PaymentProtocol.swift index 2f21ce87e..8c5b5f11b 100644 --- a/litewallet/src/PaymentProtocol.swift +++ b/litewallet/src/PaymentProtocol.swift @@ -2,10 +2,10 @@ import BRCore import Foundation class PaymentProtocolDetails { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -68,13 +68,13 @@ class PaymentProtocolDetails { } class PaymentProtocolRequest { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool private var cName: String? private var errMsg: String? private var didValidate: Bool = false - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -233,10 +233,10 @@ class PaymentProtocolRequest { } class PaymentProtocolPayment { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } @@ -274,8 +274,7 @@ class PaymentProtocolPayment { return [BRTxRef?](UnsafeBufferPointer(start: cPtr.pointee.transactions, count: cPtr.pointee.txCount)) } - var refundTo: [BRTxOutput] - { // where to send refunds, if a refund is necessary, refundTo[n].amount defaults to 0 + var refundTo: [BRTxOutput] { // where to send refunds, if a refund is necessary, refundTo[n].amount defaults to 0 return [BRTxOutput](UnsafeBufferPointer(start: cPtr.pointee.refundTo, count: cPtr.pointee.refundToCount)) } @@ -290,10 +289,10 @@ class PaymentProtocolPayment { } class PaymentProtocolACK { - internal let cPtr: UnsafeMutablePointer - internal var isManaged: Bool + let cPtr: UnsafeMutablePointer + var isManaged: Bool - internal init(_ cPtr: UnsafeMutablePointer) { + init(_ cPtr: UnsafeMutablePointer) { self.cPtr = cPtr isManaged = false } diff --git a/litewallet/src/PaymentRequest.swift b/litewallet/src/PaymentRequest.swift index 5e56db0ef..b498344a4 100644 --- a/litewallet/src/PaymentRequest.swift +++ b/litewallet/src/PaymentRequest.swift @@ -8,8 +8,7 @@ enum PaymentRequestType { struct PaymentRequest { init?(string: String) { - if var url = NSURL(string: string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).replacingOccurrences(of: " ", with: "%20")) - { + if var url = NSURL(string: string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).replacingOccurrences(of: " ", with: "%20")) { if let scheme = url.scheme, let resourceSpecifier = url.resourceSpecifier, url.host == nil { url = NSURL(string: "\(scheme)://\(resourceSpecifier)")! diff --git a/litewallet/src/PinDigitView.swift b/litewallet/src/PinDigitView.swift index 5b68de505..2453776d9 100644 --- a/litewallet/src/PinDigitView.swift +++ b/litewallet/src/PinDigitView.swift @@ -38,6 +38,7 @@ struct PinDigitView: View { /// Inspired by https://stackoverflow.com/questions/72926965/creating-an-ios-passcode-view-with-swiftui-how-to-hide-a-textview import SwiftUI + struct PasscodeView: View { @EnvironmentObject var viewModel: StartViewModel diff --git a/litewallet/src/Platform/BRAPIClient.swift b/litewallet/src/Platform/BRAPIClient.swift index c7834643a..f37028991 100644 --- a/litewallet/src/Platform/BRAPIClient.swift +++ b/litewallet/src/Platform/BRAPIClient.swift @@ -283,8 +283,7 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR // MARK: URLSession Delegate - public func urlSession(_: URLSession, task _: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { + public func urlSession(_: URLSession, task _: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { if challenge.protectionSpace.host == host, challenge.protectionSpace.serverTrust != nil { log("URLSession challenge accepted!") @@ -297,11 +296,9 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR } } - public func urlSession(_: URLSession, task: URLSessionTask, willPerformHTTPRedirection _: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) - { + public func urlSession(_: URLSession, task: URLSessionTask, willPerformHTTPRedirection _: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { var actualRequest = request - if let currentReq = task.currentRequest, var curHost = currentReq.url?.host, let curScheme = currentReq.url?.scheme - { + if let currentReq = task.currentRequest, var curHost = currentReq.url?.host, let curScheme = currentReq.url?.scheme { if let curPort = currentReq.url?.port, curPort != 443, curPort != 80 { curHost = "\(curHost):\(curPort)" } @@ -309,8 +306,7 @@ open class BRAPIClient: NSObject, URLSessionDelegate, URLSessionTaskDelegate, BR // follow the redirect if we're interacting with our API actualRequest = decorateRequest(request) log("redirecting \(String(describing: currentReq.url)) to \(String(describing: request.url))") - if let curAuth = currentReq.allHTTPHeaderFields?["Authorization"], curAuth.hasPrefix("Litewallet") - { + if let curAuth = currentReq.allHTTPHeaderFields?["Authorization"], curAuth.hasPrefix("Litewallet") { // add authentication because the previous request was authenticated log("adding authentication to redirected request") actualRequest = signRequest(actualRequest) diff --git a/litewallet/src/Platform/BRReplicatedKVStore.swift b/litewallet/src/Platform/BRReplicatedKVStore.swift index bad0eca03..50aea3948 100644 --- a/litewallet/src/Platform/BRReplicatedKVStore.swift +++ b/litewallet/src/Platform/BRReplicatedKVStore.swift @@ -203,7 +203,7 @@ open class BRReplicatedKVStore: NSObject { deleted = sqlite3_column_int(stmt, 3) > 0 ret = Array(UnsafeBufferPointer(start: blob?.assumingMemoryBound(to: UInt8.self), count: Int(blobLength))) } - return (curVer, time, deleted, encrypted ? try decrypt(ret) : ret) + return try (curVer, time, deleted, encrypted ? decrypt(ret) : ret) } /// Set the value of a key locally in the database. If syncImmediately is true (the default) then immediately @@ -330,8 +330,7 @@ open class BRReplicatedKVStore: NSObject { //// return 0 // } - func remoteVersion(_ key: String) throws -> Int - { // this would be UInt64.. but it makes the compiler crash + func remoteVersion(_ key: String) throws -> Int { // this would be UInt64.. but it makes the compiler crash try checkKey(key) var ret: UInt64 = 0 try txn { @@ -737,11 +736,10 @@ open class BRReplicatedKVStore: NSObject { gettimeofday(&tv, nil) var t = UInt64(tv.tv_usec) * 1_000_000 + UInt64(tv.tv_usec) let p = [UInt8](repeating: 0, count: 4) - return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes - { (dat: UnsafePointer) -> [UInt8] in - let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) - return p + Array(buf) - } + return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes { (dat: UnsafePointer) -> [UInt8] in + let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) + return p + Array(buf) + } } fileprivate func log(_ s: String) { diff --git a/litewallet/src/Platform/BRTar.swift b/litewallet/src/Platform/BRTar.swift index 027a6be5f..59b10f0b1 100644 --- a/litewallet/src/Platform/BRTar.swift +++ b/litewallet/src/Platform/BRTar.swift @@ -137,8 +137,7 @@ class BRTar { } } - fileprivate static func readTypeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> BRTarType - { + fileprivate static func readTypeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> BRTarType { log("reading type at location \(location)") handle.seek(toFileOffset: location + tarTypePosition) let typeDat = handle.readData(ofLength: 1) @@ -147,8 +146,7 @@ class BRTar { return ret } - fileprivate static func readNameAtLocation(_ location: UInt64, fromHandle handle: FileHandle) throws -> String - { + fileprivate static func readNameAtLocation(_ location: UInt64, fromHandle handle: FileHandle) throws -> String { handle.seek(toFileOffset: location + tarNamePosition) let dat = handle.readData(ofLength: Int(tarNameSize)) guard let ret = String(bytes: dat, encoding: String.Encoding.ascii) @@ -159,8 +157,7 @@ class BRTar { return ret } - fileprivate static func readSizeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> UInt64 - { + fileprivate static func readSizeAtLocation(_ location: UInt64, fromHandle handle: FileHandle) -> UInt64 { handle.seek(toFileOffset: location + tarSizePosition) let sizeDat = handle.readData(ofLength: Int(tarSizeSize)) let octal = NSString(data: sizeDat, encoding: String.Encoding.ascii.rawValue)! diff --git a/litewallet/src/Platform/BRWebViewController.swift b/litewallet/src/Platform/BRWebViewController.swift index 19f419cba..340cd7a88 100644 --- a/litewallet/src/Platform/BRWebViewController.swift +++ b/litewallet/src/Platform/BRWebViewController.swift @@ -3,8 +3,7 @@ import UIKit import WebKit @available(iOS 8.0, *) -@objc open class BRWebViewController: UIViewController, WKNavigationDelegate, BRWebSocketClient, WKScriptMessageHandler -{ +@objc open class BRWebViewController: UIViewController, WKNavigationDelegate, BRWebSocketClient, WKScriptMessageHandler { var wkProcessPool: WKProcessPool var webView: WKWebView? var server = BRHTTPServer() @@ -36,8 +35,7 @@ import WebKit private let messageUIPresenter = MessageUIPresenter() - init(partner: String?, mountPoint: String = "/", walletManager: WalletManager, store: Store, noAuthApiClient: BRAPIClient? = nil) - { + init(partner: String?, mountPoint: String = "/", walletManager: WalletManager, store: Store, noAuthApiClient: BRAPIClient? = nil) { wkProcessPool = WKProcessPool() self.mountPoint = mountPoint self.walletManager = walletManager @@ -85,20 +83,18 @@ import WebKit view.addSubview(webView!) let center = NotificationCenter.default - center.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) - { [weak self] _ in - self?.didAppear = true - if let info = self?.webViewInfo { - self?.sendToAllSockets(data: info) - } + center.addObserver(forName: .UIApplicationDidBecomeActive, object: nil, queue: .main) { [weak self] _ in + self?.didAppear = true + if let info = self?.webViewInfo { + self?.sendToAllSockets(data: info) } - center.addObserver(forName: .UIApplicationWillResignActive, object: nil, queue: .main) - { [weak self] _ in - self?.didAppear = false - if let info = self?.webViewInfo { - self?.sendToAllSockets(data: info) - } + } + center.addObserver(forName: .UIApplicationWillResignActive, object: nil, queue: .main) { [weak self] _ in + self?.didAppear = false + if let info = self?.webViewInfo { + self?.sendToAllSockets(data: info) } + } activityIndicator.activityIndicatorViewStyle = .white activityIndicator.color = .darkGray @@ -160,8 +156,7 @@ import WebKit activityIndicator.isHidden = true } - public func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) - { + public func userContentController(_: WKUserContentController, didReceive message: WKScriptMessage) { guard let response = message.body as? String else { return } let URLString = URL(string: "https://checkout.simplexcc.com/payments/new") diff --git a/litewallet/src/Platform/Extensions.swift b/litewallet/src/Platform/Extensions.swift index b79051f57..60e497dd4 100644 --- a/litewallet/src/Platform/Extensions.swift +++ b/litewallet/src/Platform/Extensions.swift @@ -1,5 +1,6 @@ import BRCore import Foundation + // import libbz2 import UIKit @@ -23,8 +24,7 @@ public extension String { } static var urlQuoteCharacterSet: CharacterSet { - if let cset = (NSMutableCharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as? NSMutableCharacterSet - { + if let cset = (NSMutableCharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as? NSMutableCharacterSet { cset.removeCharacters(in: "?=&") return cset as CharacterSet } @@ -40,17 +40,16 @@ public extension String { var result = Data(count: 128 / 8) let resultCount = result.count - return result.withUnsafeMutableBytes - { (resultBytes: UnsafeMutablePointer) -> String in - data.withUnsafeBytes { dataBytes in - BRMD5(resultBytes, dataBytes, data.count) - } - var hash = String() - for i in 0 ..< resultCount { - hash = hash.appendingFormat("%02x", resultBytes[i]) - } - return hash + return result.withUnsafeMutableBytes { (resultBytes: UnsafeMutablePointer) -> String in + data.withUnsafeBytes { dataBytes in + BRMD5(resultBytes, dataBytes, data.count) + } + var hash = String() + for i in 0 ..< resultCount { + hash = hash.appendingFormat("%02x", resultBytes[i]) } + return hash + } } func base58DecodedData() -> Data { @@ -287,30 +286,27 @@ public extension Data { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt8 in - ptr.pointee - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt8 in + ptr.pointee + } } func uInt32(atOffset offset: UInt) -> UInt32 { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt32 in - CFSwapInt32LittleToHost(ptr.pointee) - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt32 in + CFSwapInt32LittleToHost(ptr.pointee) + } } func uInt64(atOffset offset: UInt) -> UInt64 { let offt = Int(offset) let size = MemoryLayout.size if count < offt + size { return 0 } - return subdata(in: offt ..< (offt + size)).withUnsafeBytes - { (ptr: UnsafePointer) -> UInt64 in - CFSwapInt64LittleToHost(ptr.pointee) - } + return subdata(in: offt ..< (offt + size)).withUnsafeBytes { (ptr: UnsafePointer) -> UInt64 in + CFSwapInt64LittleToHost(ptr.pointee) + } } func compactSign(key: BRKey) -> Data { @@ -327,11 +323,10 @@ public extension Data { gettimeofday(&tv, nil) var t = UInt64(tv.tv_usec) * 1_000_000 + UInt64(tv.tv_usec) let p = [UInt8](repeating: 0, count: 4) - return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes - { (dat: UnsafePointer) -> [UInt8] in - let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) - return p + Array(buf) - } + return Data(bytes: &t, count: MemoryLayout.size).withUnsafeBytes { (dat: UnsafePointer) -> [UInt8] in + let buf = UnsafeBufferPointer(start: dat, count: MemoryLayout.size) + return p + Array(buf) + } } func chacha20Poly1305AEADEncrypt(key: BRKey) -> Data { @@ -399,8 +394,7 @@ public extension Date { // this is lifted from: https://github.com/Fykec/NSDate-RFC1123/blob/master/NSDate%2BRFC1123.swift // Copyright Ā© 2015 Foster Yin. All rights reserved. - fileprivate static func cachedThreadLocalObjectWithKey(_ key: String, create: () -> T) -> T - { + fileprivate static func cachedThreadLocalObjectWithKey(_ key: String, create: () -> T) -> T { let threadDictionary = Thread.current.threadDictionary if let cachedObject = threadDictionary[key] as! T? { return cachedObject diff --git a/litewallet/src/ReachabilityMonitor.swift b/litewallet/src/ReachabilityMonitor.swift index 7e0ede5cd..f6cef3a29 100644 --- a/litewallet/src/ReachabilityMonitor.swift +++ b/litewallet/src/ReachabilityMonitor.swift @@ -1,8 +1,7 @@ import Foundation import SystemConfiguration -private func callback(reachability _: SCNetworkReachability, flags _: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) -{ +private func callback(reachability _: SCNetworkReachability, flags _: SCNetworkReachabilityFlags, info: UnsafeMutableRawPointer?) { guard let info = info else { return } let reachability = Unmanaged.fromOpaque(info).takeUnretainedValue() reachability.notify() @@ -40,8 +39,7 @@ class ReachabilityMonitor: Trackable { private var flags: SCNetworkReachabilityFlags { var flags = SCNetworkReachabilityFlags(rawValue: 0) - if let reachability = networkReachability, withUnsafeMutablePointer(to: &flags, { SCNetworkReachabilityGetFlags(reachability, UnsafeMutablePointer($0)) }) == true - { + if let reachability = networkReachability, withUnsafeMutablePointer(to: &flags, { SCNetworkReachabilityGetFlags(reachability, UnsafeMutablePointer($0)) }) == true { return flags } else { return [] diff --git a/litewallet/src/Sender.swift b/litewallet/src/Sender.swift index 62b0d11ca..4ea09d554 100644 --- a/litewallet/src/Sender.swift +++ b/litewallet/src/Sender.swift @@ -88,8 +88,8 @@ class Sender { self.comment = comment self.feePerKb = feePerKb - if UserDefaults.isBiometricsEnabled && - walletManager.canUseBiometrics(forTx: tx) + if UserDefaults.isBiometricsEnabled, + walletManager.canUseBiometrics(forTx: tx) { DispatchQueue.walletQueue.async { [weak self] in guard let myself = self else { return } diff --git a/litewallet/src/SimpleRedux.swift b/litewallet/src/SimpleRedux.swift index 1482ceda4..9294681b3 100644 --- a/litewallet/src/SimpleRedux.swift +++ b/litewallet/src/SimpleRedux.swift @@ -131,15 +131,13 @@ class Store { // Subscription callback is immediately called with current State value on subscription // and then any time the selected value changes - func subscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) - { + func subscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) { lazySubscribe(subscriber, selector: selector, callback: callback) callback(state) } // Same as subscribe(), but doesn't call the callback with current state upon subscription - func lazySubscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) - { + func lazySubscribe(_ subscriber: Subscriber, selector: @escaping Selector, callback: @escaping (ReduxState) -> Void) { let key = subscriber.hashValue let subscription = Subscription(selector: selector, callback: callback) if subscriptions[key] != nil { @@ -149,8 +147,7 @@ class Store { } } - func subscribe(_ subscriber: Subscriber, name: TriggerName, callback: @escaping (TriggerName?) -> Void) - { + func subscribe(_ subscriber: Subscriber, name: TriggerName, callback: @escaping (TriggerName?) -> Void) { let key = subscriber.hashValue let trigger = Trigger(name: name, callback: callback) if triggers[key] != nil { diff --git a/litewallet/src/StartView.swift b/litewallet/src/StartView.swift index 60cacbd9e..47bc6ffa4 100644 --- a/litewallet/src/StartView.swift +++ b/litewallet/src/StartView.swift @@ -118,17 +118,18 @@ struct StartView: View { alignment: .center) .alert(startViewModel .alertMessage[startViewModel.currentLanguage.rawValue], - isPresented: $delayedSelect) { - HStack { - Button(S.Button.yes.localize(), role: .cancel) { - startViewModel.setLanguage(code: startViewModel.currentLanguage.code) - selectedLang = false - } - Button(S.Button.cancel.localize(), role: .destructive) { - // Dismisses - selectedLang = false - } + isPresented: $delayedSelect) + { + HStack { + Button(S.Button.yes.localize(), role: .cancel) { + startViewModel.setLanguage(code: startViewModel.currentLanguage.code) + selectedLang = false } + Button(S.Button.cancel.localize(), role: .destructive) { + // Dismisses + selectedLang = false + } + } } Spacer() NavigationLink(destination: diff --git a/litewallet/src/ViewControllers/AmountViewController.swift b/litewallet/src/ViewControllers/AmountViewController.swift index ef3048d71..b3177e314 100644 --- a/litewallet/src/ViewControllers/AmountViewController.swift +++ b/litewallet/src/ViewControllers/AmountViewController.swift @@ -1,7 +1,7 @@ import UIKit private let currencyToggleConstant: CGFloat = 20.0 -private let amountFont: UIFont = UIFont.barlowMedium(size: 14.0) +private let amountFont: UIFont = .barlowMedium(size: 14.0) class AmountViewController: UIViewController, Trackable { private let store: Store private let isPinPadExpandedAtLaunch: Bool diff --git a/litewallet/src/ViewControllers/BiometricsSpendingLimitViewController.swift b/litewallet/src/ViewControllers/BiometricsSpendingLimitViewController.swift index 0bc2e72c0..a7e41ddc8 100644 --- a/litewallet/src/ViewControllers/BiometricsSpendingLimitViewController.swift +++ b/litewallet/src/ViewControllers/BiometricsSpendingLimitViewController.swift @@ -56,8 +56,7 @@ class BiometricsSpendingLimitViewController: UITableViewController, Subscriber { return limits.count } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) let limit = limits[indexPath.row] if limit == 0 { diff --git a/litewallet/src/ViewControllers/ConfirmPaperPhraseViewController.swift b/litewallet/src/ViewControllers/ConfirmPaperPhraseViewController.swift index 45f74fc47..ecac0606f 100644 --- a/litewallet/src/ViewControllers/ConfirmPaperPhraseViewController.swift +++ b/litewallet/src/ViewControllers/ConfirmPaperPhraseViewController.swift @@ -41,12 +41,11 @@ class ConfirmPaperPhraseViewController: UITableViewController { return wordArray }() - private lazy var confirmFirstPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.0 + 1)"), word: self.words[self.fourIndices.0]) - }() + private lazy var confirmFirstPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.0 + 1)"), word: self.words[self.fourIndices.0]) - private lazy var confirmSecondPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.1 + 1)"), word: self.words[self.fourIndices.1]) }() - private lazy var confirmThirdPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.2 + 1)"), word: self.words[self.fourIndices.2]) }() - private lazy var confirmFourthPhrase: ConfirmPhrase = { ConfirmPhrase(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.3 + 1)"), word: self.words[self.fourIndices.3]) }() + private lazy var confirmSecondPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.1 + 1)"), word: self.words[self.fourIndices.1]) + private lazy var confirmThirdPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.2 + 1)"), word: self.words[self.fourIndices.2]) + private lazy var confirmFourthPhrase: ConfirmPhrase = .init(text: String(format: S.ConfirmPaperPhrase.word.localize(), "\(self.fourIndices.3 + 1)"), word: self.words[self.fourIndices.3]) var store: Store? var walletManager: WalletManager? @@ -71,7 +70,8 @@ class ConfirmPaperPhraseViewController: UITableViewController { NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, - queue: nil) { [weak self] _ in + queue: nil) + { [weak self] _ in self?.dismiss(animated: true, completion: nil) } diff --git a/litewallet/src/ViewControllers/EnterPhraseCollectionViewController.swift b/litewallet/src/ViewControllers/EnterPhraseCollectionViewController.swift index 1c3c479aa..d8b654ea7 100644 --- a/litewallet/src/ViewControllers/EnterPhraseCollectionViewController.swift +++ b/litewallet/src/ViewControllers/EnterPhraseCollectionViewController.swift @@ -59,8 +59,7 @@ class EnterPhraseCollectionViewController: UICollectionViewController { return 12 } - override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell - { + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let item = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) guard let enterPhraseCell = item as? EnterPhraseCell else { return item } enterPhraseCell.index = indexPath.row diff --git a/litewallet/src/ViewControllers/EnterPhraseViewController.swift b/litewallet/src/ViewControllers/EnterPhraseViewController.swift index 15a0e1bf8..ba7819911 100644 --- a/litewallet/src/ViewControllers/EnterPhraseViewController.swift +++ b/litewallet/src/ViewControllers/EnterPhraseViewController.swift @@ -8,8 +8,7 @@ enum PhraseEntryReason { typealias EnterPhraseCallback = (String) -> Void -class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomTitleView, Trackable -{ +class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomTitleView, Trackable { init(store: Store, walletManager: WalletManager, reason: PhraseEntryReason) { self.store = store self.walletManager = walletManager @@ -37,7 +36,7 @@ class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomT private let enterPhrase: EnterPhraseCollectionViewController private let errorLabel = UILabel.wrapping(font: .customBody(size: 16.0), color: .litewalletOrange) private let instruction = UILabel(font: .customBold(size: 14.0), color: .darkText) - internal let titleLabel = UILabel.wrapping(font: .customBold(size: 26.0), color: .darkText) + let titleLabel = UILabel.wrapping(font: .customBold(size: 26.0), color: .darkText) private let subheader = UILabel.wrapping(font: .customBody(size: 16.0), color: .darkText) private let faq: UIButton private let scrollView = UIScrollView() @@ -206,8 +205,7 @@ class EnterPhraseViewController: UIViewController, UIScrollViewDelegate, CustomT didScrollForCustomTitle(yOffset: scrollView.contentOffset.y) } - func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) - { + func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) { scrollViewWillEndDraggingForCustomTitle(yOffset: targetContentOffset.pointee.y) } diff --git a/litewallet/src/ViewControllers/Import/StartImportViewController.swift b/litewallet/src/ViewControllers/Import/StartImportViewController.swift index 3d59c9f1c..b9eb28a37 100644 --- a/litewallet/src/ViewControllers/Import/StartImportViewController.swift +++ b/litewallet/src/ViewControllers/Import/StartImportViewController.swift @@ -164,18 +164,17 @@ class StartImportViewController: UIViewController { timeoutInterval: 20.0) request.httpMethod = "POST" request.httpBody = "addrs=\(address)".data(using: .utf8) - let task = URLSession.shared.dataTask(with: request as URLRequest) - { [weak self] data, _, error in - guard let myself = self else { return } - guard error == nil else { print("error: \(error!)"); return } - guard let data = data, - let jsonData = try? JSONSerialization.jsonObject(with: data, options: []), - let json = jsonData as? [[String: Any]] else { return } + let task = URLSession.shared.dataTask(with: request as URLRequest) { [weak self] data, _, error in + guard let myself = self else { return } + guard error == nil else { print("error: \(error!)"); return } + guard let data = data, + let jsonData = try? JSONSerialization.jsonObject(with: data, options: []), + let json = jsonData as? [[String: Any]] else { return } - DispatchQueue.main.async { - myself.handleData(data: json, key: key) - } + DispatchQueue.main.async { + myself.handleData(data: json, key: key) } + } task.resume() }) } @@ -191,7 +190,7 @@ class StartImportViewController: UIViewController { } let outputs = data.compactMap { SimpleUTXO(json: $0) } let balance = outputs.map { $0.satoshis }.reduce(0, +) - outputs.forEach { output in + for output in outputs { tx.addInput(txHash: output.hash, index: output.index, amount: output.satoshis, script: output.script) } @@ -221,8 +220,7 @@ class StartImportViewController: UIViewController { }) } - private func publish(tx: UnsafeMutablePointer, balance: UInt64, fee: UInt64, key: BRKey) - { + private func publish(tx: UnsafeMutablePointer, balance: UInt64, fee: UInt64, key: BRKey) { present(importingActivity, animated: true, completion: { guard let wallet = self.walletManager.wallet else { return } guard let script = BRAddress(string: wallet.receiveAddress)?.scriptPubKey else { return } diff --git a/litewallet/src/ViewControllers/LoginViewController.swift b/litewallet/src/ViewControllers/LoginViewController.swift index 4f2445f07..96f3785a5 100644 --- a/litewallet/src/ViewControllers/LoginViewController.swift +++ b/litewallet/src/ViewControllers/LoginViewController.swift @@ -116,18 +116,17 @@ class LoginViewController: UIViewController, Subscriber, Trackable { guard let walletManager = self?.walletManager else { return } self?.isResetting = true let nc = UINavigationController() - let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin - { phrase in - let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) - nc.pushViewController(updatePin, animated: true) - updatePin.resetFromDisabledWillSucceed = { - self?.disabledView.isHidden = true - } - updatePin.resetFromDisabledSuccess = { - self?.authenticationSucceded() - LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) - } - }) + let recover = EnterPhraseViewController(store: store, walletManager: walletManager, reason: .validateForResettingPin { phrase in + let updatePin = UpdatePinViewController(store: store, walletManager: walletManager, type: .creationWithPhrase, showsBackButton: false, phrase: phrase) + nc.pushViewController(updatePin, animated: true) + updatePin.resetFromDisabledWillSucceed = { + self?.disabledView.isHidden = true + } + updatePin.resetFromDisabledSuccess = { + self?.authenticationSucceded() + LWAnalytics.logEventWithParameters(itemName: ._20200217_DUWP) + } + }) recover.addCloseNavigationItem() nc.viewControllers = [recover] nc.navigationBar.tintColor = .darkText diff --git a/litewallet/src/ViewControllers/PinPadViewController.swift b/litewallet/src/ViewControllers/PinPadViewController.swift index 786400383..53b459595 100644 --- a/litewallet/src/ViewControllers/PinPadViewController.swift +++ b/litewallet/src/ViewControllers/PinPadViewController.swift @@ -110,8 +110,7 @@ class PinPadViewController: UICollectionViewController { return items.count } - override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell - { + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let item = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) guard let pinPadCell = item as? GenericPinPadCell else { return item } pinPadCell.text = items[indexPath.item] @@ -237,10 +236,10 @@ class GenericPinPadCell: UICollectionViewCell { setup() } - internal let topLabel = UILabel(font: .customBody(size: 28.0)) - internal let centerLabel = UILabel(font: .customBody(size: 28.0)) - internal let sublabel = UILabel(font: .customBody(size: 11.0)) - internal let imageView = UIImageView() + let topLabel = UILabel(font: .customBody(size: 28.0)) + let centerLabel = UILabel(font: .customBody(size: 28.0)) + let sublabel = UILabel(font: .customBody(size: 11.0)) + let imageView = UIImageView() private func setup() { setAppearance() diff --git a/litewallet/src/ViewControllers/RequestAmountViewController.swift b/litewallet/src/ViewControllers/RequestAmountViewController.swift index 7966efee6..3bc1d098a 100644 --- a/litewallet/src/ViewControllers/RequestAmountViewController.swift +++ b/litewallet/src/ViewControllers/RequestAmountViewController.swift @@ -193,8 +193,7 @@ class RequestAmountViewController: UIViewController { presentText?(text, qrCode.image!) } - private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) - { + private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) { share.isEnabled = false address.isUserInteractionEnabled = false diff --git a/litewallet/src/ViewControllers/RootModals/ManageWalletViewController.swift b/litewallet/src/ViewControllers/RootModals/ManageWalletViewController.swift index b47dee2b4..1be5cac79 100644 --- a/litewallet/src/ViewControllers/RootModals/ManageWalletViewController.swift +++ b/litewallet/src/ViewControllers/RootModals/ManageWalletViewController.swift @@ -125,8 +125,7 @@ extension ManageWalletViewController: UITextFieldDelegate { return true } - func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool - { + func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool { guard let text = textField.text else { return true } if text.utf8.count + string.utf8.count > maxWalletNameLength { return false diff --git a/litewallet/src/ViewControllers/RootModals/MenuViewController.swift b/litewallet/src/ViewControllers/RootModals/MenuViewController.swift index cc6fa9a7e..4e9207f14 100644 --- a/litewallet/src/ViewControllers/RootModals/MenuViewController.swift +++ b/litewallet/src/ViewControllers/RootModals/MenuViewController.swift @@ -14,7 +14,7 @@ class MenuViewController: UIViewController, Trackable { fileprivate let buttons: [MenuButton] = { let types: [MenuButtonType] = [.security, .customerSupport, .settings, .lock] return types.compactMap { - return MenuButton(type: $0) + MenuButton(type: $0) } }() @@ -22,7 +22,7 @@ class MenuViewController: UIViewController, Trackable { override func viewDidLoad() { var previousButton: UIView? - buttons.forEach { button in + for button in buttons { button.addTarget(self, action: #selector(MenuViewController.didTapButton(button:)), for: .touchUpInside) view.addSubview(button) var topConstraint: NSLayoutConstraint? diff --git a/litewallet/src/ViewControllers/RootModals/ReceiveViewController.swift b/litewallet/src/ViewControllers/RootModals/ReceiveViewController.swift index 0a389cc7d..4eb9ad1a6 100644 --- a/litewallet/src/ViewControllers/RootModals/ReceiveViewController.swift +++ b/litewallet/src/ViewControllers/RootModals/ReceiveViewController.swift @@ -225,8 +225,7 @@ class ReceiveViewController: UIViewController, Subscriber, Trackable { presentText?(address.text!, qrCode.image!) } - private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) - { + private func toggle(alertView: InViewAlert, shouldAdjustPadding: Bool, shouldShrinkAfter: Bool = false) { share.isEnabled = false address.isUserInteractionEnabled = false diff --git a/litewallet/src/ViewControllers/RootModals/SendViewController.swift b/litewallet/src/ViewControllers/RootModals/SendViewController.swift index 218370beb..0ed63ba17 100644 --- a/litewallet/src/ViewControllers/RootModals/SendViewController.swift +++ b/litewallet/src/ViewControllers/RootModals/SendViewController.swift @@ -42,8 +42,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka private var adjustmentHeight: CGFloat = 0.0 private var buttonToBorder: CGFloat = 0.0 - init(store: Store, sender: Sender, walletManager: WalletManager, initialAddress: String? = nil, initialRequest: PaymentRequest? = nil) - { + init(store: Store, sender: Sender, walletManager: WalletManager, initialAddress: String? = nil, initialRequest: PaymentRequest? = nil) { self.store = store self.sender = sender self.walletManager = walletManager @@ -207,8 +206,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka } } - private func balanceTextForAmount(amount: Satoshis?, rate: Rate?) -> (NSAttributedString?, NSAttributedString?) - { + private func balanceTextForAmount(amount: Satoshis?, rate: Rate?) -> (NSAttributedString?, NSAttributedString?) { let balanceAmount = DisplayAmount(amount: Satoshis(rawValue: balance), state: store.state, selectedRate: rate, minimumFractionDigits: 2) let balanceText = balanceAmount.description @@ -447,6 +445,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka case let .creationError(message): self?.showAlert(title: S.Send.createTransactionError.localize(), message: message, buttonLabel: S.Button.ok.localize()) self?.saveEvent("send.publishFailed", attributes: ["errorMessage": message]) + case let .publishFailure(error): if case let .posixError(code, description) = error { self?.showAlert(title: S.SecurityAlerts.sendFailure.localize(), message: "\(description) (\(code))", buttonLabel: S.Button.ok.localize()) @@ -464,14 +463,13 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka let isValid = protoReq.isValid() var isOutputTooSmall = false - if let errorMessage = protoReq.errorMessage, errorMessage == S.PaymentProtocol.Errors.requestExpired.localize(), !isValid - { + if let errorMessage = protoReq.errorMessage, errorMessage == S.PaymentProtocol.Errors.requestExpired.localize(), !isValid { return showAlert(title: S.PaymentProtocol.Errors.badPaymentRequest.localize(), message: errorMessage, buttonLabel: S.Button.ok.localize()) } // TODO: check for duplicates of already paid requests var requestAmount = Satoshis(0) - protoReq.details.outputs.forEach { output in + for output in protoReq.details.outputs { if output.amount > 0, output.amount < wallet.minOutputAmount { isOutputTooSmall = true } @@ -486,8 +484,7 @@ class SendViewController: UIViewController, Subscriber, ModalPresentable, Tracka self?.didIgnoreUsedAddressWarning = true self?.confirmProtocolRequest(protoReq: protoReq) }) - } else if let message = protoReq.errorMessage, !message.utf8.isEmpty, (protoReq.commonName?.utf8.count)! > 0, !didIgnoreIdentityNotCertified - { + } else if let message = protoReq.errorMessage, !message.utf8.isEmpty, (protoReq.commonName?.utf8.count)! > 0, !didIgnoreIdentityNotCertified { return showError(title: S.Send.identityNotCertified.localize(), message: message, ignore: { [weak self] in self?.didIgnoreIdentityNotCertified = true self?.confirmProtocolRequest(protoReq: protoReq) diff --git a/litewallet/src/ViewControllers/ScanViewController.swift b/litewallet/src/ViewControllers/ScanViewController.swift index 4690c5b96..92aa009fd 100644 --- a/litewallet/src/ViewControllers/ScanViewController.swift +++ b/litewallet/src/ViewControllers/ScanViewController.swift @@ -175,17 +175,16 @@ class ScanViewController: UIViewController, Trackable { } extension ScanViewController: AVCaptureMetadataOutputObjectsDelegate { - func metadataOutput(_: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from _: AVCaptureConnection) - { + func metadataOutput(_: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from _: AVCaptureConnection) { if let data = metadataObjects as? [AVMetadataMachineReadableCodeObject] { if data.isEmpty { guide.state = .normal } else { - data.forEach { - guard let uri = $0.stringValue + for data in data { + guard let uri = data.stringValue else { NSLog("ERROR: URI String not found") - return + continue } if completion != nil, guide.state != .positive { handleURI(uri) diff --git a/litewallet/src/ViewControllers/SecurityCenter/UpdatePinViewController.swift b/litewallet/src/ViewControllers/SecurityCenter/UpdatePinViewController.swift index ab00fe2c8..b091aba2f 100644 --- a/litewallet/src/ViewControllers/SecurityCenter/UpdatePinViewController.swift +++ b/litewallet/src/ViewControllers/SecurityCenter/UpdatePinViewController.swift @@ -14,8 +14,7 @@ class UpdatePinViewController: UIViewController, Subscriber { var resetFromDisabledSuccess: (() -> Void)? var resetFromDisabledWillSucceed: (() -> Void)? - init(store: Store, walletManager: WalletManager, type: UpdatePinType, showsBackButton: Bool = true, phrase: String? = nil) - { + init(store: Store, walletManager: WalletManager, type: UpdatePinType, showsBackButton: Bool = true, phrase: String? = nil) { self.store = store self.walletManager = walletManager self.phrase = phrase diff --git a/litewallet/src/ViewControllers/SettingsViewController.swift b/litewallet/src/ViewControllers/SettingsViewController.swift index 7bf3321c9..8f277f8fb 100644 --- a/litewallet/src/ViewControllers/SettingsViewController.swift +++ b/litewallet/src/ViewControllers/SettingsViewController.swift @@ -28,7 +28,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { private let sections: [String] private var rows: [String: [Setting]] private let cellIdentifier = "CellIdentifier" - internal var titleLabel = UILabel(font: .customBold(size: 26.0), color: .darkText) + var titleLabel = UILabel(font: .customBold(size: 26.0), color: .darkText) let customTitle: String private var walletIsEmpty = true @@ -68,8 +68,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { return rows[sections[section]]?.count ?? 0 } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) if let setting = rows[sections[indexPath.section]]?[indexPath.row] { @@ -162,8 +161,7 @@ class SettingsViewController: UITableViewController, CustomTitleView { didScrollForCustomTitle(yOffset: scrollView.contentOffset.y) } - override func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) - { + override func scrollViewWillEndDragging(_: UIScrollView, withVelocity _: CGPoint, targetContentOffset: UnsafeMutablePointer) { scrollViewWillEndDraggingForCustomTitle(yOffset: targetContentOffset.pointee.y) } diff --git a/litewallet/src/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift b/litewallet/src/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift index 260a9a72f..87cd73e24 100644 --- a/litewallet/src/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift +++ b/litewallet/src/ViewControllers/ViewControllerTransitions/LoginTransitionDelegate.swift @@ -1,8 +1,7 @@ import UIKit class LoginTransitionDelegate: NSObject, UIViewControllerTransitioningDelegate { - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissLoginAnimator() } } diff --git a/litewallet/src/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift b/litewallet/src/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift index 6bd995a3d..cf795646b 100644 --- a/litewallet/src/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift +++ b/litewallet/src/ViewControllers/ViewControllerTransitions/ModalTransitionDelegate.swift @@ -81,8 +81,7 @@ class ModalTransitionDelegate: NSObject, Subscriber { } extension ModalTransitionDelegate: UIViewControllerTransitioningDelegate { - func animationController(forPresented presented: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forPresented presented: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? { presentedViewController = presented return PresentModalAnimator(shouldCoverBottomGap: type == .regular, completion: { let panGr = UIPanGestureRecognizer(target: self, action: #selector(ModalTransitionDelegate.didUpdate(gr:))) @@ -93,13 +92,11 @@ extension ModalTransitionDelegate: UIViewControllerTransitioningDelegate { }) } - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissModalAnimator() } - func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? - { + func interactionControllerForDismissal(using _: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { return isInteractive ? interactiveTransition : nil } } diff --git a/litewallet/src/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift b/litewallet/src/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift index de8527564..7cbf71cdf 100644 --- a/litewallet/src/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift +++ b/litewallet/src/ViewControllers/ViewControllerTransitions/PinTransitioningDelegate.swift @@ -5,13 +5,11 @@ private let duration: TimeInterval = 0.4 class TransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate { var shouldShowMaskView = true - func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forPresented _: UIViewController, presenting _: UIViewController, source _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return PresentGenericAnimator(shouldShowMaskView: shouldShowMaskView) } - func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? - { + func animationController(forDismissed _: UIViewController) -> UIViewControllerAnimatedTransitioning? { return DismissGenericAnimator() } } diff --git a/litewallet/src/ViewControllers/WritePaperPhraseViewController.swift b/litewallet/src/ViewControllers/WritePaperPhraseViewController.swift index 383ab57e2..216b00976 100644 --- a/litewallet/src/ViewControllers/WritePaperPhraseViewController.swift +++ b/litewallet/src/ViewControllers/WritePaperPhraseViewController.swift @@ -64,7 +64,8 @@ class WritePaperPhraseViewController: UIViewController { NotificationCenter.default.addObserver(forName: UIScene.willDeactivateNotification, object: nil, - queue: nil) { [weak self] _ in + queue: nil) + { [weak self] _ in self?.dismiss(animated: true, completion: nil) } } @@ -89,7 +90,7 @@ class WritePaperPhraseViewController: UIViewController { ]) label.constrainBottomCorners(sidePadding: C.padding[3], bottomPadding: C.padding[2]) - phraseViews.enumerated().forEach { index, phraseView in + for (index, phraseView) in phraseViews.enumerated() { // The first phrase should initially be on the screen let constant = index == 0 ? 0.0 : phraseOffscreenOffset let xConstraint = NSLayoutConstraint(item: phraseView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: constant) diff --git a/litewallet/src/ViewModels/Transaction.swift b/litewallet/src/ViewModels/Transaction.swift index 9e02031ea..6dd29bcea 100644 --- a/litewallet/src/ViewModels/Transaction.swift +++ b/litewallet/src/ViewModels/Transaction.swift @@ -84,8 +84,7 @@ class Transaction { } var exchangeRateInfo = "" - if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first - { + if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first { let difference = (currentRate.rate - metaData.exchangeRate) / metaData.exchangeRate * 100.0 let prefix = difference > 0.0 ? "+" : "-" let firstLine = direction == .sent ? S.Transaction.exchangeOnDaySent : S.Transaction.exchangeOnDayReceived @@ -101,28 +100,23 @@ class Transaction { return "\(amountString)\n\(startingString)\n\(endingString)\n\(exchangeRateInfo)" } - func amountDetailsAmountString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsAmountString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { let feeAmount = Amount(amount: fee, rate: rate, maxDigits: maxDigits) let feeString = direction == .sent ? String(format: S.Transaction.fee.localize(), "\(feeAmount.string(isLtcSwapped: isLtcSwapped))") : "" return "\(direction.sign)\(Amount(amount: satoshis, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped)) \(feeString)" } - func amountDetailsStartingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsStartingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { return String(format: S.Transaction.starting.localize(), "\(Amount(amount: startingBalance, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped))") } - func amountDetailsEndingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String - { + func amountDetailsEndingBalanceString(isLtcSwapped: Bool, rate: Rate, rates _: [Rate], maxDigits: Int) -> String { return String(format: String(format: S.Transaction.ending.localize(), "\(Amount(amount: balanceAfter, rate: rate, maxDigits: maxDigits).string(isLtcSwapped: isLtcSwapped))")) } - func amountExchangeString(isLtcSwapped _: Bool, rate _: Rate, rates: [Rate], maxDigits _: Int) -> String - { + func amountExchangeString(isLtcSwapped _: Bool, rate _: Rate, rates: [Rate], maxDigits _: Int) -> String { var exchangeRateInfo = "" - if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first - { + if let metaData = metaData, let currentRate = rates.filter({ $0.code.lowercased() == metaData.exchangeRateCurrency.lowercased() }).first { let difference = (currentRate.rate - metaData.exchangeRate) / metaData.exchangeRate * 100.0 let prefix = difference > 0.0 ? "+" : "-" let nf = NumberFormatter() @@ -355,8 +349,7 @@ private extension String { } } -private func makeStatus(_ txRef: BRTxRef, wallet: BRWallet, peerManager: BRPeerManager, confirms: Int, direction: TransactionDirection) -> String -{ +private func makeStatus(_ txRef: BRTxRef, wallet: BRWallet, peerManager: BRPeerManager, confirms: Int, direction: TransactionDirection) -> String { let tx = txRef.pointee guard wallet.transactionIsValid(txRef) else { diff --git a/litewallet/src/Views/AlertView.swift b/litewallet/src/Views/AlertView.swift index 58a72e7db..b1fee561b 100644 --- a/litewallet/src/Views/AlertView.swift +++ b/litewallet/src/Views/AlertView.swift @@ -25,7 +25,6 @@ enum AlertType { return S.SecurityAlerts.copiedAddressesHeader.localize() case .sweepSuccess: return S.Import.success.localize() - // Failure(s) case .failedResolution: return S.SecurityAlerts.sendFailure.localize() @@ -46,7 +45,6 @@ enum AlertType { return S.SecurityAlerts.copiedAddressesSubheader.localize() case .sweepSuccess: return S.Import.successBody.localize() - // Failure(s) case .failedResolution: return S.SecurityAlerts.resolvedSuccessSubheader.localize() @@ -74,11 +72,9 @@ func == (lhs: AlertType, rhs: AlertType) -> Bool { return true case (.sweepSuccess(_), .sweepSuccess(_)): return true - // Failure(s) case (.failedResolution, .failedResolution): return true - default: return false } diff --git a/litewallet/src/Views/DefaultCurrencyViewController.swift b/litewallet/src/Views/DefaultCurrencyViewController.swift index 35624ca83..44d8c3db3 100644 --- a/litewallet/src/Views/DefaultCurrencyViewController.swift +++ b/litewallet/src/Views/DefaultCurrencyViewController.swift @@ -81,8 +81,7 @@ class DefaultCurrencyViewController: UITableViewController, Subscriber { return rates.count } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) let rate = rates[indexPath.row] cell.textLabel?.text = "\(rate.code) (\(rate.currencySymbol))" diff --git a/litewallet/src/Views/ModalHeaderView.swift b/litewallet/src/Views/ModalHeaderView.swift index 84e0ff2f4..21a143fce 100644 --- a/litewallet/src/Views/ModalHeaderView.swift +++ b/litewallet/src/Views/ModalHeaderView.swift @@ -12,8 +12,7 @@ class ModalHeaderView: UIView { didSet { close.tap = closeCallback } } - init(title: String, style: ModalHeaderViewStyle, faqInfo _: (Store, String)? = nil, showCloseButton: Bool = true) - { + init(title: String, style: ModalHeaderViewStyle, faqInfo _: (Store, String)? = nil, showCloseButton: Bool = true) { self.title.text = title self.style = style diff --git a/litewallet/src/Views/PinView.swift b/litewallet/src/Views/PinView.swift index 39b266ed1..1785db214 100644 --- a/litewallet/src/Views/PinView.swift +++ b/litewallet/src/Views/PinView.swift @@ -39,7 +39,7 @@ class PinView: UIView { } func fill(_ number: Int) { - filled.enumerated().forEach { index, circle in + for (index, circle) in filled.enumerated() { circle.isHidden = index > number - 1 } } @@ -81,7 +81,7 @@ class PinView: UIView { } private func addCircleContraints(_ circles: [Circle]) { - circles.enumerated().forEach { index, circle in + for (index, circle) in circles.enumerated() { addSubview(circle) let leadingConstraint: NSLayoutConstraint? if index == 0 { diff --git a/litewallet/src/Views/SendViewCells/AddressCell.swift b/litewallet/src/Views/SendViewCells/AddressCell.swift index 7e0a42942..7cdbd1f83 100644 --- a/litewallet/src/Views/SendViewCells/AddressCell.swift +++ b/litewallet/src/Views/SendViewCells/AddressCell.swift @@ -98,8 +98,7 @@ extension AddressCell: UITextFieldDelegate { return true } - func textField(_: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool - { + func textField(_: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool { if let request = PaymentRequest(string: string) { didReceivePaymentRequest?(request) return false diff --git a/litewallet/src/Views/SendViewCells/DescriptionSendCell.swift b/litewallet/src/Views/SendViewCells/DescriptionSendCell.swift index 80a08fbbd..9a8295713 100644 --- a/litewallet/src/Views/SendViewCells/DescriptionSendCell.swift +++ b/litewallet/src/Views/SendViewCells/DescriptionSendCell.swift @@ -84,8 +84,7 @@ extension DescriptionSendCell: UITextViewDelegate { return true } - func textView(_ textView: UITextView, shouldChangeTextIn _: NSRange, replacementText text: String) -> Bool - { + func textView(_ textView: UITextView, shouldChangeTextIn _: NSRange, replacementText text: String) -> Bool { guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else { textView.resignFirstResponder() diff --git a/litewallet/src/WalletCoordinator.swift b/litewallet/src/WalletCoordinator.swift index 83695f719..821d8559e 100644 --- a/litewallet/src/WalletCoordinator.swift +++ b/litewallet/src/WalletCoordinator.swift @@ -130,8 +130,7 @@ class WalletCoordinator: Subscriber, Trackable { } } - func makeTransactionViewModels(transactions: [BRTxRef?], walletManager: WalletManager, kvStore: BRReplicatedKVStore?, rate: Rate?) -> [Transaction] - { + func makeTransactionViewModels(transactions: [BRTxRef?], walletManager: WalletManager, kvStore: BRReplicatedKVStore?, rate: Rate?) -> [Transaction] { return transactions.compactMap { $0 }.sorted { if $0.pointee.timestamp == 0 { return true diff --git a/litewallet/src/WalletManager+Auth.swift b/litewallet/src/WalletManager+Auth.swift index 6393cc4fc..064325b6c 100644 --- a/litewallet/src/WalletManager+Auth.swift +++ b/litewallet/src/WalletManager+Auth.swift @@ -270,8 +270,7 @@ extension WalletManager: WalletAuthenticator { } // sign the given transaction using biometric authentication - func signTransaction(_ tx: BRTxRef, biometricsPrompt: String, completion: @escaping (BiometricsResult) -> Void) - { + func signTransaction(_ tx: BRTxRef, biometricsPrompt: String, completion: @escaping (BiometricsResult) -> Void) { do { let spendLimit: Int64 = try keychainItem(key: KeychainKey.spendLimit) ?? 0 guard let wallet = wallet, wallet.amountSentByTx(tx) - wallet.amountReceivedFromTx(tx) + wallet.totalSent <= UInt64(spendLimit) @@ -590,8 +589,7 @@ private func setKeychainItem(key: String, item: T?, authenticated: Bool = fal if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound { status = SecItemDelete(query as CFDictionary) } - } else if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound - { // update existing item + } else if SecItemCopyMatching(query as CFDictionary, nil) != errSecItemNotFound { // update existing item let update = [kSecAttrAccessible as String: accessible, kSecValueData as String: data as Any] status = SecItemUpdate(query as CFDictionary, update as CFDictionary) diff --git a/litewallet/src/WalletManager.swift b/litewallet/src/WalletManager.swift index 71250d313..86bfa0134 100644 --- a/litewallet/src/WalletManager.swift +++ b/litewallet/src/WalletManager.swift @@ -1,11 +1,12 @@ import BRCore import Foundation + // import sqlite3 import SQLite3 import SystemConfiguration -internal let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) -internal let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) +let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) +let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) enum WalletManagerError: Error { case sqliteError(errorCode: Int32, description: String) @@ -20,13 +21,13 @@ private func SafeSqlite3ColumnBlob(statement: OpaquePointer, iCol: Int32) -> // After instantiating a WalletManager object, call myWalletManager.peerManager.connect() to begin syncing. class WalletManager: BRWalletListener, BRPeerManagerListener { - internal var didInitWallet = false - internal let dbPath: String - internal var db: OpaquePointer? + var didInitWallet = false + let dbPath: String + var db: OpaquePointer? private var txEnt: Int32 = 0 private var blockEnt: Int32 = 0 private var peerEnt: Int32 = 0 - internal let store: Store + let store: Store var masterPubKey = BRMasterPubKey() var earliestKeyTime: TimeInterval = 0 @@ -68,7 +69,7 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { } // TODO: Pass the fpRate from User Preferences - internal lazy var lazyPeerManager: BRPeerManager? = { + lazy var lazyPeerManager: BRPeerManager? = { if let wallet = self.wallet { return BRPeerManager(wallet: wallet, earliestKeyTime: self.earliestKeyTime, blocks: self.loadBlocks(), peers: self.loadPeers(), listener: self, fpRate: FalsePositiveRates.semiPrivate.rawValue) } else { @@ -76,9 +77,9 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { } }() - internal lazy var lazyWallet: BRWallet? = BRWallet(transactions: self.loadTransactions(), - masterPubKey: self.masterPubKey, - listener: self) + lazy var lazyWallet: BRWallet? = BRWallet(transactions: self.loadTransactions(), + masterPubKey: self.masterPubKey, + listener: self) private lazy var lazyAPIClient: BRAPIClient? = { guard let wallet = self.wallet else { return nil } @@ -92,9 +93,8 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { lazy var allWordsLists: [[NSString]] = { var array: [[NSString]] = [] - Bundle.main.localizations.forEach { lang in - if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) - { + for lang in Bundle.main.localizations { + if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) { if let words = NSArray(contentsOfFile: path) as? [NSString] { array.append(words) } @@ -106,9 +106,8 @@ class WalletManager: BRWalletListener, BRPeerManagerListener { lazy var allWords: Set = { var set: Set = Set() - Bundle.main.localizations.forEach { lang in - if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) - { + for lang in Bundle.main.localizations { + if let path = Bundle.main.path(forResource: "BIP39Words", ofType: "plist", inDirectory: nil, forLocalization: lang) { if let words = NSArray(contentsOfFile: path) as? [NSString] { set.formUnion(words.map { $0 as String }) } diff --git a/litewalletTests/Class Tests/TabBarViewControllerTests.swift b/litewalletTests/Class Tests/TabBarViewControllerTests.swift index d8a2fa4c8..053a9493e 100644 --- a/litewalletTests/Class Tests/TabBarViewControllerTests.swift +++ b/litewalletTests/Class Tests/TabBarViewControllerTests.swift @@ -4,6 +4,8 @@ import XCTest class TabBarViewControllerTests: XCTestCase { var viewController: TabBarViewController! + var noBuyVewController: NoBuyTabBarViewController! + override func setUpWithError() throws { viewController = UIStoryboard(name: "Main", bundle: nil) @@ -11,16 +13,26 @@ class TabBarViewControllerTests: XCTestCase { TabBarViewController viewController.loadViewIfNeeded() + + noBuyVewController = UIStoryboard(name: "Main", + bundle: nil) + .instantiateViewController(withIdentifier: "NoBuyTabBarViewController") as? + NoBuyTabBarViewController + + noBuyVewController.loadViewIfNeeded() } override func tearDownWithError() throws { viewController = nil + noBuyVewController = nil } func testTabBarItemCount() throws { // There should be 4 tabs in this version for all users XCTAssertTrue(viewController.tabBar.items?.count == 4) + + XCTAssertTrue(noBuyVewController.tabBar.items?.count == 3) } func testTabBarItemRange() throws { @@ -33,5 +45,11 @@ class TabBarViewControllerTests: XCTestCase { XCTAssertTrue(viewController.tabBar.items?[2].tag == 2) XCTAssertTrue(viewController.tabBar.items?[3].tag == 3) + + XCTAssertTrue(noBuyVewController.tabBar.items?[0].tag == 0) + + XCTAssertTrue(noBuyVewController.tabBar.items?[1].tag == 1) + + XCTAssertTrue(noBuyVewController.tabBar.items?[2].tag == 2) } } diff --git a/litewalletTests/Language Selection Tests/LocaleTests.swift b/litewalletTests/Language Selection Tests/LocaleTests.swift new file mode 100644 index 000000000..efbfc489c --- /dev/null +++ b/litewalletTests/Language Selection Tests/LocaleTests.swift @@ -0,0 +1,140 @@ +@testable import litewallet +import XCTest + +final class LocaleTests: XCTestCase { + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testFilteringUnsupportedCountries() throws { + /// Based on the live list: https://support.moonpay.com/customers/docs/moonpays_unsupported_countries + + // Afghanistan: `fa_AF`, `ps_AF`, `uz_AF` + let afghanistanLocale = Locale(identifier: "fa_AF") + XCTAssertTrue(afghanistanLocale.identifier == "fa_AF") + + // Barbados: `en_BB` + let barbadosLocale = Locale(identifier: "en_BB") + XCTAssertTrue(barbadosLocale.identifier == "en_BB") + + // Belarus: `be_BY`, `ru_BY` + let belarusLocale = Locale(identifier: "be_BY") + XCTAssertTrue(belarusLocale.identifier == "be_BY") + + // Burkina Faso: `fr_BF` + let burkinaFasoLocale = Locale(identifier: "fr_BF") + XCTAssertTrue(burkinaFasoLocale.identifier == "fr_BF") + + // China: `zh_CN`, `zh_Hans_CN`, `zh_Hant_CN`, `ug_CN` + let chinaLocale = Locale(identifier: "zh_CN") + XCTAssertTrue(chinaLocale.identifier == "zh_CN") + + // Iceland: `is_IS` + let icelandLocale = Locale(identifier: "is_IS") + XCTAssertTrue(icelandLocale.identifier == "is_IS") + + // Iraq: `ar_IQ`, `ku_IQ` + let iraqLocale = Locale(identifier: "ar_IQ") + XCTAssertTrue(iraqLocale.identifier == "ar_IQ") + + // Jamaica: `en_JM`, `jam_JM` + let jamaicaLocale = Locale(identifier: "en_JM") + XCTAssertTrue(jamaicaLocale.identifier == "en_JM") + + // Japan: `ja_JP` + let japanLocale = Locale(identifier: "ja_JP") + XCTAssertTrue(japanLocale.identifier == "ja_JP") + + // Kosovo: `sq_XK`, `sr_XK` + let kosovoLocale = Locale(identifier: "sq_XK") + XCTAssertTrue(kosovoLocale.identifier == "sq_XK") + + // Liberia: `en_LR` + let liberiaLocale = Locale(identifier: "en_LR") + XCTAssertTrue(liberiaLocale.identifier == "en_LR") + + // Macao: `zh_MO`, `pt_MO` + let macaoLocale = Locale(identifier: "zh_MO") + XCTAssertTrue(macaoLocale.identifier == "zh_MO") + + // Malaysia: `ms_MY`, `zh_MY`, `ta_MY`, `en_MY` + let malaysiaLocale = Locale(identifier: "ms_MY") + XCTAssertTrue(malaysiaLocale.identifier == "ms_MY") + + // Malta: `mt_MT`, `en_MT` + let maltaLocale = Locale(identifier: "mt_MT") + XCTAssertTrue(maltaLocale.identifier == "mt_MT") + + // Mongolia: `mn_MN` + let mongoliaLocale = Locale(identifier: "mn_MN") + XCTAssertTrue(mongoliaLocale.identifier == "mn_MN") + + // Morocco: `ar_MA`, `fr_MA`, `ber_MA` + let moroccoLocale = Locale(identifier: "ar_MA") + XCTAssertTrue(moroccoLocale.identifier == "ar_MA") + + // Myanmar: `my_MM` + let myanmarLocale = Locale(identifier: "my_MM") + XCTAssertTrue(myanmarLocale.identifier == "my_MM") + + // Nicaragua: `es_NI` + let nicaraguaLocale = Locale(identifier: "es_NI") + XCTAssertTrue(nicaraguaLocale.identifier == "es_NI") + + // Pakistan: `ur_PK`, `en_PK` + let pakistanLocale = Locale(identifier: "ur_PK") + XCTAssertTrue(pakistanLocale.identifier == "ur_PK") + + // Panama: `es_PA` + let panamaLocale = Locale(identifier: "es_PA") + XCTAssertTrue(panamaLocale.identifier == "es_PA") + + // Russia: `ru_RU` + let russiaLocale = Locale(identifier: "ru_RU") + XCTAssertTrue(russiaLocale.identifier == "ru_RU") + + // Senegal: `fr_SN`, `wo_SN` + let senegalLocale = Locale(identifier: "fr_SN") + XCTAssertTrue(senegalLocale.identifier == "fr_SN") + + // The Democratic Republic Of The Congo: `fr_CD`, `ln_CD`, `sw_CD` + let drCongoLocale = Locale(identifier: "fr_CD") + XCTAssertTrue(drCongoLocale.identifier == "fr_CD") + + // Uganda: `en_UG`, `sw_UG` + let ugandaLocale = Locale(identifier: "en_UG") + XCTAssertTrue(ugandaLocale.identifier == "en_UG") + + // Ukraine: `uk_UA`, `ru_UA` + let ukraineLocale = Locale(identifier: "uk_UA") + XCTAssertTrue(ukraineLocale.identifier == "uk_UA") + + // Venezuela: `es_VE` + let venezuelaLocale = Locale(identifier: "es_VE") + XCTAssertTrue(venezuelaLocale.identifier == "es_VE") + + // Yemen: `ar_YE` + let yemenLocale = Locale(identifier: "ar_YE") + XCTAssertTrue(yemenLocale.identifier == "ar_YE") + + // Zimbabwe: `en_ZW`, `sn_ZW`, `nd_ZW` + let zimbabweLocale = Locale(identifier: "en_ZW") + XCTAssertTrue(zimbabweLocale.identifier == "en_ZW") + } + + func testUnsupportedCountriesEnum() throws { + let unsupportedCases = UnsupportedCountries.allCases + XCTAssertTrue(unsupportedCases.count == 28) + + let supportedCountry = Locale(identifier: "en_US").identifier + + for unsupportedLocale in unsupportedCases { + let unsupportedCode = unsupportedLocale.localeCode + XCTAssertTrue(unsupportedCode != supportedCountry) + } + } +} diff --git a/litewalletTests/Legacy BRTests/BRReplicatedKVStoreTests.swift b/litewalletTests/Legacy BRTests/BRReplicatedKVStoreTests.swift index 6edc4df58..395242cf5 100644 --- a/litewalletTests/Legacy BRTests/BRReplicatedKVStoreTests.swift +++ b/litewalletTests/Legacy BRTests/BRReplicatedKVStoreTests.swift @@ -10,8 +10,7 @@ class BRReplicatedKVStoreTestAdapter: BRRemoteKVStoreAdaptor { self.testCase = testCase } - func keys(_ completionFunc: @escaping ([(String, UInt64, Date, BRRemoteKVStoreError?)], BRRemoteKVStoreError?) -> Void) - { + func keys(_ completionFunc: @escaping ([(String, UInt64, Date, BRRemoteKVStoreError?)], BRRemoteKVStoreError?) -> Void) { print("[TestRemoteKVStore] KEYS") DispatchQueue.main.async { let res = self.db.map { t -> (String, UInt64, Date, BRRemoteKVStoreError?) in @@ -32,8 +31,7 @@ class BRReplicatedKVStoreTestAdapter: BRRemoteKVStoreAdaptor { } } - func get(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, [UInt8], BRRemoteKVStoreError?) -> Void) - { + func get(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, [UInt8], BRRemoteKVStoreError?) -> Void) { print("[TestRemoteKVStore] GET \(key) \(version)") DispatchQueue.main.async { guard let obj = self.db[key] @@ -47,8 +45,7 @@ class BRReplicatedKVStoreTestAdapter: BRRemoteKVStoreAdaptor { } } - func put(_ key: String, value: [UInt8], version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) - { + func put(_ key: String, value: [UInt8], version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) { print("[TestRemoteKVStore] PUT \(key) \(version)") DispatchQueue.main.async { guard let obj = self.db[key] @@ -69,8 +66,7 @@ class BRReplicatedKVStoreTestAdapter: BRRemoteKVStoreAdaptor { } } - func del(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) - { + func del(_ key: String, version: UInt64, completionFunc: @escaping (UInt64, Date, BRRemoteKVStoreError?) -> Void) { print("[TestRemoteKVStore] DEL \(key) \(version)") DispatchQueue.main.async { guard let obj = self.db[key] diff --git a/litewalletTests/TestHelpers.swift b/litewalletTests/TestHelpers.swift index 5bb834e28..a2008052e 100644 --- a/litewalletTests/TestHelpers.swift +++ b/litewalletTests/TestHelpers.swift @@ -7,7 +7,7 @@ func clearKeychain() { kSecClassCertificate as String, kSecClassKey as String, kSecClassIdentity as String] - classes.forEach { className in + for className in classes { SecItemDelete([kSecClass as String: className] as CFDictionary) } }