Skip to content

Release v3.10.0 - #199

Open
grunt-claude-bot wants to merge 19 commits into
mainfrom
release/v3.10.0
Open

grunt-claude-bot wants to merge 19 commits into
mainfrom
release/v3.10.0

Conversation

@grunt-claude-bot

Copy link
Copy Markdown
Collaborator

Release v3.10.0

  • Trusted Node: connect to your own Litecoin node (IP + port) via in-app purchase, with a toggle between trusted node and random mainnet peers; sync status shows the current peer mode.
  • Live network fees: Settings fee picker shows real Economy/Regular/Luxury tiers with fiat cost and remembers the choice.
  • Redesigned Settings: consistent expandable rows, clearer blockchain section, sync confirmation alert restored.
  • Safer wallet wipe: waits for wallet, database and keychain (incl. trusted-node data) cleanup and shows an error on failure.
  • Refreshed translations, updated submodules (Modules/core, Private/general-purpose).

Full notes: RELEASE_NOTES.md

Note: develop has translation PR #198 and a stale-catalog removal that are not in this branch.

🤖 Generated with Claude Code

kcw-grunt and others added 19 commits September 13, 2026 18:42
Layout:
- Refactor SettingsView's expanding rows (Blockchain, Currency, Security,
  Theme/Lock actions) to a consistent structure and normalize row heights
  via shared closedRowHeight/expandArrowSize/leadRowPad/trailRowPad
  constants in SettingsHelpers.
- Rebuild SettingsLitecoinDetailView's peer-sync, blockchain-sync, and
  network-fee sections with clearer grouping, spacing, and typography
  (BWIPSSemiBold/BWIPSRegular, BrainwalletColor.content), and scaffold the
  trusted-node toggle and "Set IP Address" action.
- Size the network-fee wheel picker to 40% of the row width via
  GeometryReader, top-align it with its "Choose preferred fee" label, and
  always show the blockchain detail ScrollView's scroll indicators.

Network fees:
- Add NewMainViewModel.currentFees, fetched via
  BWAPIClient.feePerKb(_:) (GET v1/fee-per-kb), and thread it through
  SettingsExpandingBlockchainView into SettingsLitecoinDetailView so the
  fee picker shows real economy/regular/luxury tiers instead of
  placeholder values.
- Compute the fiat cost of the selected fee tier by converting litoshis to
  LTC and multiplying by the current exchange rate, and persist the
  user's choice via UserDefaults.userSetPreferredNetworkFee.
- Extract the tier math (litoshis-per-tier, nearest-tier lookup for a
  restored preference, litoshi-to-fiat formatting) into a standalone
  NetworkFeeTier enum in FeeManager.swift so it's unit-testable without
  instantiating SwiftUI view state, and add NetworkFeeTierTests covering
  it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUKEfvG7cDWbPc1nBhwNgU
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
bump version
Co-Authored-By: grunt-claude-bot <noreply@github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
App Review rejected 3.10.0 (2602315) under 2.1(b): the Trusted Litecoin Node
IAP could not be found. ProductItem in Private/general-purpose only knew the
retired trusted_ltc_node_1 id, so the product was filtered out of the sheet.

- Bump Private/general-purpose to 124e7b5 (ProductItem/plist/storekit -> _2, id tests)
- Add TrustedNodeProductIdTests (app constant matches App Store Connect and plist)
- RELEASE_NOTES: trusted_ltc_node_1 -> _2
- Build number 2602315 -> 2602316

Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
@focusstate was bound to a container, never reaching the UITextField, so
the keyboard never appeared. Drive first responder from a single
selectedField state instead, only while page 2 is active, and delay the
keyboard by 1s without delaying the selection border.

Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
iOS 27 traps at launch when an app has no scene lifecycle. Add
SceneDelegate and a scene manifest, drop the main storyboard window,
and move window setup and lifecycle/URL handling out of AppDelegate.
Update and add unit tests.

Co-Authored-By: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Co-Authored-By: kcw-grunt <mrkerrywashington@icloud.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants