Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/ai-device-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ jobs:
E2E: "true"
E2E_BACKEND: "local"
E2E_NETWORK: "regtest"
GEO: "false"
SIMULATOR_NAME: ${{ inputs.simulator_name }}
SIMULATOR_OS: ${{ inputs.simulator_os }}
run: |
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/e2e-staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ jobs:
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GEO: false
E2E_BACKEND: network
E2E_NETWORK: regtest
run: |
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ jobs:
CHATWOOT_API: ${{ secrets.CHATWOOT_API }}
SIMULATOR_NAME: "iPhone 17"
OS_VERSION: "26.2"
GEO: false
run: |
echo "=== Building iOS app (local) ==="
echo "Using simulator: $SIMULATOR_NAME (iOS $OS_VERSION)"
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/e2e_migration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ jobs:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CHATWOOT_API: ${{ secrets.CHATWOOT_API }}
GEO: false
E2E_BACKEND: network
E2E_NETWORK: regtest
run: |
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ jobs:
-test-iterations 2 \
-only-testing:BitkitTests/UtxoSelectionTests \
-only-testing:BitkitTests/BlocktankTests \
-only-testing:BitkitTests/PaymentFlowTests \
-only-testing:BitkitTests/BlocktankRefundAddressLiveIntegrationTests \
-only-testing:BitkitTests/AddressTypeIntegrationTests \
-only-testing:BitkitTests/RNMigrationCleanupTests \
| xcbeautify --report junit
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ jobs:
-parallel-testing-enabled NO \
-skip-testing:BitkitTests/UtxoSelectionTests \
-skip-testing:BitkitTests/BlocktankTests \
-skip-testing:BitkitTests/PaymentFlowTests \
-skip-testing:BitkitTests/BlocktankRefundAddressLiveIntegrationTests \
-skip-testing:BitkitTests/AddressTypeIntegrationTests \
-skip-testing:BitkitTests/RNMigrationCleanupTests \
| xcbeautify --report junit
Expand Down
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,8 @@ xcodebuildmcp simulator test
```

Separately from the test suites, `journeys/` holds XML walkthroughs of app behaviour that an agent
evaluates by driving a running simulator — number pad caps, notification permission, widget flows,
hardware wallet pairing and transfers. Nothing in `.github/workflows` runs them; reviewers drive the
evaluates by driving a running simulator — number pad caps, widget flows, hardware wallet pairing
and the Transfer Unavailable sheet. Nothing in `.github/workflows` runs them; reviewers drive the
ones a PR lists. Read `journeys/README.md` before running or writing one, and see the Journeys
section under Code Style & Conventions.

Expand Down Expand Up @@ -443,7 +443,7 @@ While the project is transitioning away from traditional ViewModels, these still
- `ActivityListViewModel`: Transaction/payment history
- `TransferViewModel`: Transfer flows (send/receive)
- `NavigationViewModel`, `SheetViewModel`: UI navigation state
- `BlocktankViewModel`: Lightning channel ordering via Blocktank
- `BlocktankViewModel`: Reads existing Blocktank channel orders and CJIT entries

**Key Directories:**
- `Components/`: Reusable UI components (buttons, sliders, widgets)
Expand Down Expand Up @@ -561,7 +561,7 @@ Ensure accessibility modifiers and labels are added to custom components.
two platforms stay diffable. Change only what the platform forces: `adb` becomes `xcodebuildmcp`,
and Android `testTag`s become iOS `accessibilityIdentifier`s.
- MATCH the Android identifier string when adding an `accessibilityIdentifier` for a journey — the
vocabulary is deliberately shared (`N9`, `NRemove`, `SpendingAmountContinue`, `HardwareTransferSign`).
vocabulary is deliberately shared (`N9`, `NRemove`, `TransferUnavailableContinue`, `HardwareTransferToSpending`).
Record any name that cannot match in the table in `journeys/README.md`.
- PAIR a container identifier with `.accessibilityElement(children: .contain)` so it is queryable.
- ADAPT rather than transcribe when iOS genuinely behaves differently, and say so in the journey's
Expand Down
8 changes: 2 additions & 6 deletions Bitkit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -163,15 +163,13 @@
Extensions/PaymentDetails.swift,
"Extensions/PaymentFailureReason+UserMessage.swift",
Models/BlocksWidgetOptions.swift,
Models/BlocktankNotificationType.swift,
Models/LnPeer.swift,
Models/PubkyPublicKeyFormat.swift,
Models/Toast.swift,
Models/Transfer.swift,
Models/TransferType.swift,
Services/BackupFieldMigration.swift,
Services/CoreService.swift,
Services/GeoService.swift,
Services/HwActivityTagBackup.swift,
Services/HwSnapshotMerge.swift,
Services/LightningService.swift,
Expand Down Expand Up @@ -200,12 +198,10 @@
"Extensions/LDKNode+AddressType.swift",
Extensions/PaymentDetails.swift,
"Extensions/PaymentFailureReason+UserMessage.swift",
Models/BlocktankNotificationType.swift,
Models/LnPeer.swift,
Models/PubkyPublicKeyFormat.swift,
Models/Toast.swift,
Services/CoreService.swift,
Services/GeoService.swift,
Services/HwActivityTagBackup.swift,
Services/HwSnapshotMerge.swift,
Services/LightningService.swift,
Expand Down Expand Up @@ -886,7 +882,7 @@
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -warnings-as-errors -Wwarning DeprecatedDeclaration";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG CHECK_GEOBLOCK $(inherited)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
Expand Down Expand Up @@ -941,7 +937,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -warnings-as-errors -Wwarning DeprecatedDeclaration";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "CHECK_GEOBLOCK $(inherited)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
SWIFT_COMPILATION_MODE = wholemodule;
};
name = Release;
Expand Down
18 changes: 3 additions & 15 deletions Bitkit/AppScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -402,8 +402,7 @@ struct AppScene: View {
let sheetViewModel = SheetViewModel()
let navigationViewModel = NavigationViewModel()
let transferService = TransferService(
lightningService: LightningService.shared,
blocktankService: CoreService.shared.blocktank
lightningService: LightningService.shared
)

// Run app data migrations before any feature code loads migrated state
Expand Down Expand Up @@ -442,15 +441,6 @@ struct AppScene: View {
_transfer = StateObject(wrappedValue: TransferViewModel(
transferService: transferService,
sheetViewModel: sheetViewModel,
hwFunding: hwWalletManager,
hwConnecting: hwWalletManager,
hwFeeRateProvider: {
guard let rates = await feeEstimatesManager.getEstimates() else { return nil }
return UInt64(TransactionSpeed.fast.getFeeRate(from: rates))
},
hwAddressProvider: {
try await LightningService.shared.addressInfoForType(.nativeSegwit, atIndex: 0).address
},
onBalanceRefresh: { await walletVm.updateBalanceState() }
))
_widgets = StateObject(wrappedValue: WidgetsViewModel())
Expand Down Expand Up @@ -1029,9 +1019,6 @@ struct AppScene: View {
await retryPendingPaykitEndpointRemoval()
}

// Start watching pending orders after wallet is ready
await blocktank.startWatchingPendingOrders(transferViewModel: transfer)

// Open the swap updates stream so any pending LN -> onchain swaps resume
// and auto-claim once their lockup confirms. Retries until the stream starts.
wallet.ensureSwapUpdatesRunning()
Expand Down Expand Up @@ -1111,7 +1098,8 @@ struct AppScene: View {
appViewModel: app,
settingsViewModel: settings,
walletViewModel: wallet,
currencyViewModel: currency
currencyViewModel: currency,
paykitPaymentRequestManager: paykitPaymentRequestManager
)
} catch {
app.toast(error)
Expand Down

This file was deleted.

Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "device-tablet-speaker.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "template"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 2 additions & 11 deletions Bitkit/Components/NotificationPreview.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,6 @@ import SwiftUI

struct NotificationPreview: View {
var disabled: Bool
var enableAmount: Bool

var amountText: String {
if enableAmount {
return "₿ 21 000 ($21.00)"
} else {
return t("settings__notifications__settings__preview__text")
}
}

var body: some View {
HStack(alignment: .top, spacing: 8) {
Expand All @@ -21,7 +12,7 @@ struct NotificationPreview: View {

VStack(alignment: .leading, spacing: 2) {
HStack {
Text(t("settings__notifications__settings__preview__title"))
Text(t("subscriptions__payment_due_title"))
.font(.system(size: 15, weight: .semibold))
.foregroundColor(Color(hex: 0x222222))
Spacer()
Expand All @@ -30,7 +21,7 @@ struct NotificationPreview: View {
.foregroundColor(Color(hex: 0x3F3F3F).opacity(0.5))
}

Text(amountText)
Text(t("subscriptions__payment_due_description"))
.font(.system(size: 15))
.foregroundColor(Color(hex: 0x3F3F3F))
}
Expand Down
65 changes: 0 additions & 65 deletions Bitkit/Components/ProgressSteps.swift

This file was deleted.

6 changes: 5 additions & 1 deletion Bitkit/Components/SheetIntro.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ struct SheetIntro: View {
let testID: String?
let cancelTestID: String?
let continueTestID: String?
let showBackButton: Bool
let onCancel: (() -> Void)?
let onContinue: () -> Void
private var baseTestID: String {
Expand All @@ -30,6 +31,7 @@ struct SheetIntro: View {
testID: String? = nil,
cancelTestID: String? = nil,
continueTestID: String? = nil,
showBackButton: Bool = false,
onCancel: (() -> Void)? = nil,
onContinue: @escaping () -> Void
) {
Expand All @@ -44,13 +46,14 @@ struct SheetIntro: View {
self.testID = testID
self.cancelTestID = cancelTestID
self.continueTestID = continueTestID
self.showBackButton = showBackButton
self.onCancel = onCancel
self.onContinue = onContinue
}

var body: some View {
VStack(alignment: .leading, spacing: 0) {
SheetHeader(title: navTitle)
SheetHeader(title: navTitle, showBackButton: showBackButton)

VStack(spacing: 0) {
Spacer()
Expand All @@ -66,6 +69,7 @@ struct SheetIntro: View {
DisplayText(title, accentColor: accentColor)
.padding(.bottom, 14)
.frame(maxWidth: .infinity, alignment: .leading)
.accessibilityIdentifier("\(baseTestID)Title")

BodyMText(description, accentFont: accentFont)
.frame(maxWidth: .infinity, alignment: .leading)
Expand Down
10 changes: 5 additions & 5 deletions Bitkit/Components/TabBar/TabBar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ struct TabBar: View {
sheets.showSheet(
.receive,
data: ReceiveConfig(
view: .qr(cjitInvoice: nil, tab: .hardware),
view: .qr(tab: .hardware),
hardwareWalletId: walletId
)
)
Expand All @@ -74,13 +74,13 @@ struct TabBar: View {

let hasPendingTransfersToSpending = wallet.balanceInTransferToSpending > 0

if Self.shouldOpenSpendingCjitEntry(
if Self.shouldOpenSpendingTransferUnavailable(
isSpendingWallet: navigation.currentRoute == .spendingWallet,
wallet: wallet,
hasPendingTransfersToSpending: hasPendingTransfersToSpending
) {
// On spending wallet screen, show CJIT flow when user can't receive normally
sheets.showSheet(.receive, data: ReceiveConfig(view: .cjitAmount))
// Spending can't receive without inbound capacity, and Blocktank no longer sells it.
sheets.showSheet(.receive, data: ReceiveConfig(view: .transferUnavailable))
} else {
sheets.showSheet(.receive)
}
Expand All @@ -90,7 +90,7 @@ struct TabBar: View {
sheets.showSheet(.scanner)
}

static func shouldOpenSpendingCjitEntry(
static func shouldOpenSpendingTransferUnavailable(
isSpendingWallet: Bool,
wallet: WalletViewModel,
hasPendingTransfersToSpending: Bool
Expand Down
Loading
Loading