Closes#575
- Added `SupportDataGenerator` object which generates data sent with
support email. Format of the data is based on what Android has.
- Support button is moved to settings from profile.
- Support button opens mail composer.
- added alert view asking if nuke is triggered or canceled
- wipe of the keychain
- wipe publisher properly used
- functional wipe accessible through debug menu
Closes#554
- WalletConfigProvider and WalletConfig are used in the Secant app.
- First feature flag (`onboarding`) is in use.
Co-authored-by: Lukas Korba <lukas.korba@seznam.cz>
- Added `WalletConfigProvider` object which handles loading and caching of
feature flags.
- Added `WalletConfig` which represents one configuration
of all feature flags.
- draft of the removal, home screen updated
[#559] Remove the circular progress bar from home screen
- circular area removed
- snapshot tests of the circular area removed
- home screen simplified
1. duplicates secant-testnet target and call it secant mainnet https://github.com/zcash/secant-ios-wallet/issues/273
2. renames Info copy plist file and Display name
3. Fixes TCA code bootstrapping so it has the mainnet environment
Fixed Info-Plist
4. (off code repo) create the mainnet app on the app store
4. create the mainnet app on the app store
5. create the mainnet variant on Crashlytics
6. create a GoogleServices-Plist file
7. change tag triggers to mainnet and testnet can be built independently from each other
8. add Icons for testnet
Creates TargetConstants enum for network target
Closes [#568] Change display name to sECCant
make Derivation tool be static by SECANT_{NETWORK} target
Closes [#570] Change AppIcon to ECC icon
Closes#207
* [#541] Adopt Latest main commit of SDK
This adopts commit `cf60f44aa83938432c81361917406483ff42c719` from `main`
branch of ZcashLightClientKit.
It includes changes to remove a fake "defaultBirthday" and use the real
`BlockHeight.ofLatestCheckpoint()` function that allows the wallets
to fetch the latest checkpoint available from bundle and define it as the
birthday. Also "defaultBirthday" birthday was incorrectly being used as a
replacement for Sapling Activation height which is the minimum birthday
supported by the wallet in terms of shielded pools.
Wallets with lower heights that have only transparent funds could in theory
work, but they won't be able to see sprout funds. Also the the SDK won't provide a birthday prior to sapling activation.
removes references to `LightWalletService` since this class has been made
internal to the SDK only.
adopts FsBlockDb and adds a FsBlockDbRoot directory dependency for the
Databases dependencies. Which should be renamed in a later commit
Closes#541
* Fix SwiftLint issues
* [#525] Adds functions to configure, testCrash and check if it can start.
This adds a build phase where a dummy file is added to the project to
make the build and Plist copy happy. When building in the CI there
will be a script to replace this Plist file with the real one that
then will be copied to the bundle
Crashlytics will be "off" by default and then be turned on when
starting up to be an Opt-Out thing.
This is the only way it can be turned off later.
reference: https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=ios#enable_opt-in_reporting
The app will start with crash reporting turned off and will set it up
on by default on the application's code. Then if the user wants to
opt-out of crash reporting, it can. Otherwise, it won't be possible.
Adds opting out of crash reporting as a stored user preference.
This adds a value inside UserPreferencesStorage and its live and
mock counterparts.
also creates a builer for `CrashReporterClient` that has a Dependency
to `@Dependency(\.userStoredPreferences)` and sets the references
for the client to set the appropriate values into the user storage
`UserPreferencesStorage` as been adapted to be a TCA Dependency.
`SettingsStore` now as a `Toogle()` to turn off and on crash
reporting. But it doesn't work yet because I haven't found out
how to make a TCA Binding that can rely on an initial value that
is not hardcoded but injected from somewhere else.
See https://www.pointfree.co/episodes/ep158-safer-conciser-forms-part-1https://www.pointfree.co/episodes/ep158-safer-conciser-forms-part-2
Adds Test Crash button and enable crash reporting
Adds upload-symbols run script phase
Closes#525
Add a custom build environment variable "UPLOAD_CRASHLYTICS_SYMBOLS"
that will let Xcode skip the upload_symbols script for debug builds
Fix Initialization tests
* bump build
- SensitiveData file holding utilities to hide all strings and data that holds information we don't want to leak or log
- wallet storage fields redacted
- import wallet fields redacted
- create wallet chips redacted
- import wallet reducer changed: BindableStates replaced by bindings to bridge redacted data
- redacted wallet balance
- redacted birthday value (BlockHeight helper)
- Redacted protocol conforming to Undescribable for release/production and testflight builds
- new target for the unredacted debug development
- unit tests fixed
- sensitive data helpers commented
- unit test for conformation to the Undescribable
- memo is redacted
- immutability of redactable structs
- log test capped to look for 6mins at most
- OSLogger for the defined categories
- TCA logger for the TCA logs
- WalletLogger for the secant logs
- SDKLogger passed to the SDK
- unit tests for the loggers
- export category OS logs
- share txt files (sdk, tca, wallet logs) via native share dialog
- timestamp extension so we see even milliseconds
- txt files up to some X size
- simple button enable/disable logic and wrapping the export work in the Task
- TODO for empty catches
- OSLogger refactored to OSLogger_, just temporary change
- export and share divided into business logic and view logic parts
- unit tests for the TCA part
- async let syntax for the export logs
- simple activity indicator so testers know export is in progress
- static date formatters so we don't instantiate it over and over
- destination related actions have been isolated
- app/wallet initialization related actions have been isolated
- AppViewStore helpers encapsulating nested actions for the destinations and deeplinking
- destination enum and state moved to separate file as well
Fix _URLRouting error on project
Fix: Wallet account identifiers must be sequential on initialization
Adopt async API of SDK
Fixes after rebase
Fix tests
- library updated
- overrides for the dependencies are now done in the trailing closures
- some tests were split to so they cover only 1 case (not 2 cases in one test)
- TCA debug trace back again
- all dependencies are now consolidated
- cleanup of dependencies
- getting rid of all .live instances in the tests
- all dependencies use mocked or noOp instances
- BalanceBreakdown migrated
- unit and snapshot tests fixed
- some terminology cleanup beyond scope of this task, the dependencies are keys essentially so I refactored all of them to follow the same syntax
- SDKSynchronizer refactored to sdkSynchronizer
- RecoveryPhraseDisplay migrated to new TCA's ReducerProtocol
- fixed unit tests
- TODO Ensure that sensitive information can't be logged intentionally or by accident #444
Closes#428
- Update images on onboarding screens.
- Update view that shows images on onboarding screen. Previously images
were square and wrapped into `CircularFrame`. Now each onboarding
screen is little bit different and each images has different size a
bit.
Closes#82
- Add new `TransactionSendingView` which implements in progress state.
- Copied lottie animation from ECC reference wallet.
- Update routing in send flow to support new screen.
Closes#427
- This is scaffold work for #427. Logic is done and some basic UI.
- Logic that works with free disk space is in `DiskSpaceChecker`. Use
`WrappedDiskSpaceChecker` to get live or mocked instances of `DiskSpaceChecker`.
- You can either use `mockEmptyDisk` which mocks situation when there
is enough space on disk.
- Or you can use `mockFullDisk` to mock situation when there isn't enough space on disk.
Closes#81
- Ported ZcashHoldToSendButton from ECC referecne wallet and make it work with TCA. And then use it on Send Confirmation screen.
- Added colors that are used by HoldToSendButton to asset catalogue.
- Update Send confirmation screen look according to designs.
- Ported ZcashCheckCircle from ECC reference wallet and use it on Send confirmation screen.
- Added colors used by CheckCircle to assets catalogue.
- Add test for the case when not including memo in transaction.
- Updated ZcashLightClientKit to 0.16.10-beta to fix transaction failure when memo is nil.
- full screen cover for the balance breakdown
- clearing out the background so we can do semi transparency
- bindings for the full screen cover
[224] [Scaffold] Balance Breakdown
- draft of UI
[224] [Scaffold] Balance Breakdown
- latest block business logic
- mocked auto shielding threshold
- unit tests
- snapshot tests
[224] [Scaffold] Balance Breakdown (412)
- comments resolved
- bigger refactor of the synchronizer, taking advantage of SynchronizerState being reported every time .synced pass
- unit tests fixed and refactored
[224] [Scaffold] Balance Breakdown (412)
- ClearBackgroundView documented, reference to the proposed solution added
- MultiLineTextField Store & View implemented
- memo char limit is set from the zcash sdk environment
- fixed tests
- unit tests for the multiline textfield
- send flow form validity unit tests extended to cover memo char limit
- rescan blockchain feature
- backup phrase feature
- system (biometrics) authentication dependency implemented
- unit tests
- snapshot tests
[75] [Scaffold] Settings Screen
- rescan cleanup
[75] [Scaffold] Settings Screen
- quick and full rescan reset to home screen unit tests
[75] [Scaffold] Settings Screen (398)
- biometrics (touch ID, face ID) preferred, passcode is fallback, when no protection is set, we let users go to the sensitive content
- initial frame connected to available data (progress)
- zboto balance
- $ balance
- inner / outer progress logic
- isDownloading and isUpToDate controls added
- outer circle parametrical solution implemented
- unit tests fixed
- SyncStatusSnapshot implemented
- snapshot tests
[102] [Functional] Full Wallet History
- latest design updates
- solved issue with the List and accessory views
[102] [Functional] Full Wallet History
- fixes for the 'all' button
- reduced actions for the detail binding
[102] [Functional] Full Wallet History
- padding fixes (all events are visible)
- home screen drawer's height set to show 3 events on screen
[102] [Functional] Full Wallet History
- final UI for all states of transaction for rows
- Lottie package added
- Lottie animation for the pending transaction added
[102] [Functional] Full Wallet History
- snapshot tests cleaned up and refactored
- snapshotting all 4 types of transaction wallet events rows (sent, pending, received, failed)
[102] [Functional] Full Wallet History (393)
- Rubik fonts
[102] [Functional] Full Wallet History (393)
- leading padding fixed
- UITableView appearance moved to onAppear()
[153] [Scaffold] Progress Status Circular Bar (#389)
- rebased
- the view holding all requested (mocked) data is prepared
- copy to pasteboard implemented
- deeplink 'reply-to' memo implemented
- view online implemented and button visible only when the URL is valid
- asset colors for the texts
- unit tests
- snapshot tests
- concept of activities instead of transactions
- the drawer is now fully universal and data driven, rendering some View, going to some detail View
- unit tests work again
- refactor of Activity -> WalletEvent
- WalletEvent view builders simplified
- transactions & wallet events timestamps instead of Date type
- review comments resolved
- missing 'Transactions' terms updated to 'WalletEvents'
- The app responds to openURL scheme starting with zcash://
- The currently implemented routes:
home
send :no parameters provided
send: amount
send: amount, address
send: amount, address and memo
- making the DeeplinkManager fully independent from the AppAction
- the app processes the deeplink only when fully capable of (initialized and synced) for now
- unit tests
- support for the zcash:{address} format
- the backup is the whole flow so the implementation covers all screens:
- preamble
- validation with 4 steps to fill in the chips
- success/failure screens
- snapshot package added
- welcome snapshot taken
[337] Set up Snapshot Testing
- iPhone 8 Plus welcome screen references
[337] Set up Snapshot Testing
- snapshot references removed
- snapshots only recorded, no comparison
[337] Set up Snapshot Testing
- isRecording removed
[337] Set up Snapshot Testing
- iPhone 8 Plus, iOS 15.4 screenshots
[337] Set up Snapshot Testing
- lowering the precision to 0.999
[337] Set up Snapshot Testing
- attempts to get it pass the test
[337] Set up Snapshot Testing
- frame set up
[337] Set up Snapshot Testing
- resized image
[337] Set up Snapshot Testing
- many different snapshot tests
[337] Set up Snapshot Testing
- low precision test
[337] Set up Snapshot Testing
- updated pngs
[337] Set up Snapshot Testing
- another set of pngs
[337] Set up Snapshot Testing
- precision 0.99
[337] Set up Snapshot Testing
- XCTAttachments
[337] Set up Snapshot Testing
- typo fixed
[337] Set up Snapshot Testing
- reference images
[337] Set up Snapshot Testing
- no precision set
[337] Set up Snapshot Testing
- screenshot names added
- precision so low it passes all the time
[337] Set up Snapshot Testing (350)
- cleanup
[337] Set up Snapshot Testing (350)
- removed snapshot library completely
[337] Set up Snapshot Testing (350)
- code simplification and cleanup
[337] Set up Snapshot Testing (350)
- adding attachments refactored to simplify the code even more
[337] Set up Snapshot Testing (350)
- last simplification to wrap both light and dark under the hood
[337] Set up Snapshot Testing (350)
- addAttachments method to follow the same XCTestCase terminology
[337] Set up Snapshot Testing (350)
- attachments name fix
- recovery phrase randomizer & wrapper
- did finish launching -> initialized wallet test
- cleanup of static dependencies
- did finish launching -> keys missing integration test
- did finish launching -> uninitialized integration test
- database files were missing, mocked to behave like it's available
- key missing test fix, the database files were missing too => mocked to act like being present
- Int64+Zcash.swift and Double+Zcash.swift removed
- Balances and amounts updated to use Zatoshi
- Remove TODOs
- Tests updated
- FIXED: Send amount being in Zatoshi is clamping $ value to 21M max -> send amount input is no longer Zatoshi typed
[329] Update wallet to use Zatoshi type (333)
- alphabetical order(s)
[329] Update wallet to use Zatoshi type (333)
- static .zero for the Zatoshi
- conformance to Equatable moved to extension
[329] Update wallet to use Zatoshi type (333)
- small improvement by reducing code duplicity
- added words counter X/24
- added input for the birthday
- all kinds of validity check implemented
- unit tests for the whole import wallet business logic implemented
[301] Import Wallet does not have a Birthday input field (328)
- support for the birthday to be optional input
[301] Import Wallet does not have a Birthday input field (328)
- Int -> BlockHeight refactor
- scan UI view
- UI representable
- scaffold of scan view
- rect of interest support
- simple URI parser and validator
- tests
[106] [Scaffold] Scan QR Screen
- scan status added
- scan status tests
[106] [Scaffold] Scan QR Screen
- custom back button added
[106] [Scaffold] Scan QR Screen
- fixed typo
[106] [Scaffold] Scan QR Screen (321)
- valid vs. invalid code part of the enum
[106] [Scaffold] Scan QR Screen (321)
- refactor
[106] [Scaffold] Scan QR Screen (321)
- cleanup
[106] [Scaffold] Scan QR Screen (321)
- review comments solved
- some improvements added
- firing the valid qr code after 1s
[106] [Scaffold] Scan QR Screen (321)
- tests fixed
- onAppear test added
- print() cleanup
[106] [Scaffold] Scan QR Screen (321)
- wrapped audio services
- vibrate when QR found
- alphabetical order of environmental parameters
- AVCaptureSession stopRunning explicit call, probably handled by AVCaptureSession itself but I didn't find proof
- QRCodeScanView simplified and cleaned up
[106] [Scaffold] Scan QR Screen (321)
- URIParser added to the project
[#306] Release build is broken because placeholder is not compiled
[#215] Warning: Non-constant range: argument must be an integer literal
Fix comment spacing warning