Skip to content
Closed
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
28 changes: 28 additions & 0 deletions BDKSwiftExampleWallet.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@

/* Begin PBXBuildFile section */
774586B52DB7B2BC00A631E1 /* BalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774586B42DB7B2BC00A631E1 /* BalanceView.swift */; };
7745E1912DD7C47F00D52A40 /* BDKSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7745E1902DD7C47600D52A40 /* BDKSyncService.swift */; };
7745E1942DD7D2F900D52A40 /* EsploraServerSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7745E1932DD7D2F500D52A40 /* EsploraServerSyncService.swift */; };
7745E1962DD7D8FE00D52A40 /* KyotoSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7745E1952DD7D8FD00D52A40 /* KyotoSyncService.swift */; };
7745E1982DD8A0AF00D52A40 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7745E1972DD8A0A600D52A40 /* URL+Extensions.swift */; };
779E70872DB9C98A006E22D3 /* WalletSyncScriptInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779E70862DB9C98A006E22D3 /* WalletSyncScriptInspector.swift */; };
779E70892DB9C9AB006E22D3 /* WalletFullScanScriptInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779E70882DB9C9AB006E22D3 /* WalletFullScanScriptInspector.swift */; };
77AD9F062DBB031D00182E65 /* ActivityHomeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77AD9F052DBB031D00182E65 /* ActivityHomeHeaderView.swift */; };
77F0FDC92DA9A93D00B30E4F /* Connection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */; };
77F6A9E02DE23CA8003568F0 /* StorageUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F6A9DF2DE23CA5003568F0 /* StorageUtil.swift */; };
A733D6D02A81113000F333B4 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = A733D6CF2A81113000F333B4 /* Localizable.xcstrings */; };
A73F7A362A3B778E00B87FC6 /* Int+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */; };
AE0C30F72A804A2D008F1EAE /* TransactionListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */; };
Expand Down Expand Up @@ -113,10 +118,15 @@

/* Begin PBXFileReference section */
774586B42DB7B2BC00A631E1 /* BalanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceView.swift; sourceTree = "<group>"; };
7745E1902DD7C47600D52A40 /* BDKSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BDKSyncService.swift; sourceTree = "<group>"; };
7745E1932DD7D2F500D52A40 /* EsploraServerSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EsploraServerSyncService.swift; sourceTree = "<group>"; };
7745E1952DD7D8FD00D52A40 /* KyotoSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KyotoSyncService.swift; sourceTree = "<group>"; };
7745E1972DD8A0A600D52A40 /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = "<group>"; };
779E70862DB9C98A006E22D3 /* WalletSyncScriptInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSyncScriptInspector.swift; sourceTree = "<group>"; };
779E70882DB9C9AB006E22D3 /* WalletFullScanScriptInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletFullScanScriptInspector.swift; sourceTree = "<group>"; };
77AD9F052DBB031D00182E65 /* ActivityHomeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityHomeHeaderView.swift; sourceTree = "<group>"; };
77F0FDC82DA9A93700B30E4F /* Connection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Connection+Extensions.swift"; sourceTree = "<group>"; };
77F6A9DF2DE23CA5003568F0 /* StorageUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageUtil.swift; sourceTree = "<group>"; };
A733D6CF2A81113000F333B4 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Extensions.swift"; sourceTree = "<group>"; };
AE0C30F62A804A2D008F1EAE /* TransactionListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionListView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -228,6 +238,16 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
7745E1922DD7D2E600D52A40 /* BDKSyncService */ = {
isa = PBXGroup;
children = (
7745E1902DD7C47600D52A40 /* BDKSyncService.swift */,
7745E1952DD7D8FD00D52A40 /* KyotoSyncService.swift */,
7745E1932DD7D2F500D52A40 /* EsploraServerSyncService.swift */,
);
path = BDKSyncService;
sourceTree = "<group>";
};
779E70832DB9C94C006E22D3 /* Actor */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -271,6 +291,7 @@
AE1C341E2A42440A008F807A /* Extensions */ = {
isa = PBXGroup;
children = (
7745E1972DD8A0A600D52A40 /* URL+Extensions.swift */,
AE18E9372A9528200019D2A4 /* Bundle+Extensions.swift */,
AE3646252BEDB01200B04E25 /* FileManager+Extensions.swift */,
A73F7A352A3B778E00B87FC6 /* Int+Extensions.swift */,
Expand Down Expand Up @@ -302,6 +323,7 @@
AE1C34202A42441F008F807A /* Utilities */ = {
isa = PBXGroup;
children = (
77F6A9DF2DE23CA5003568F0 /* StorageUtil.swift */,
AE79538D2A2D59F000CCB277 /* Constants.swift */,
AE2F255C2BED0BFB002A9AC6 /* AppError.swift */,
);
Expand Down Expand Up @@ -512,6 +534,7 @@
AEB905C52A7EECD900CD0337 /* Service */ = {
isa = PBXGroup;
children = (
7745E1922DD7D2E600D52A40 /* BDKSyncService */,
AE1C34212A424434008F807A /* BDK Service */,
AEB905C42A7EECAF00CD0337 /* Price Service */,
AE6715FB2A9ABF30005C193F /* Fee Service */,
Expand Down Expand Up @@ -712,7 +735,9 @@
AE7953902A2D5B4400CCB277 /* BDKSwiftExampleWalletError.swift in Sources */,
AE91CEEF2C0FDBC7000AAD20 /* CanonicalTx+Extensions.swift in Sources */,
AE2381B52C60878E00F6B00C /* LocalOutputItemView.swift in Sources */,
7745E1912DD7C47F00D52A40 /* BDKSyncService.swift in Sources */,
AE3646262BEDB01200B04E25 /* FileManager+Extensions.swift in Sources */,
77F6A9E02DE23CA8003568F0 /* StorageUtil.swift in Sources */,
AEB6C9D12B7E8529003AD704 /* TransactionDetailViewModel.swift in Sources */,
AEB159D32D51A7E00006AE9E /* BalanceDisplayFormat.swift in Sources */,
AE18E9382A9528200019D2A4 /* Bundle+Extensions.swift in Sources */,
Expand Down Expand Up @@ -746,16 +771,19 @@
AE6716012A9AC089005C193F /* KeyServiceError.swift in Sources */,
77AD9F062DBB031D00182E65 /* ActivityHomeHeaderView.swift in Sources */,
AE0C30FB2A804B95008F1EAE /* WalletViewModel.swift in Sources */,
7745E1982DD8A0AF00D52A40 /* URL+Extensions.swift in Sources */,
AE49847C2A1BBBD6009951E2 /* BDKSwiftExampleWalletApp.swift in Sources */,
AE6715FF2A9AC066005C193F /* FeeServiceError.swift in Sources */,
AE2381AD2C60578500F6B00C /* ActivityListView.swift in Sources */,
AE2381B32C60877600F6B00C /* LocalOutputListView.swift in Sources */,
AE783A052AB4F51F005F0CBA /* String+Extensions.swift in Sources */,
7745E1942DD7D2F900D52A40 /* EsploraServerSyncService.swift in Sources */,
AE29ED112BBE318A00EB9C4F /* TransactionItemView.swift in Sources */,
AE34DDAE2B6B320F00F04AD4 /* WalletRecoveryViewModel.swift in Sources */,
AE0C30F92A804B65008F1EAE /* OnboardingViewModel.swift in Sources */,
AE3902A42A3B4CD900BEC318 /* HomeView.swift in Sources */,
AE0C30FD2A804BC1008F1EAE /* ReceiveViewModel.swift in Sources */,
7745E1962DD7D8FE00D52A40 /* KyotoSyncService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
27 changes: 20 additions & 7 deletions BDKSwiftExampleWallet/App/BDKSwiftExampleWalletApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,30 @@ struct BDKSwiftExampleWalletApp: App {
var body: some Scene {
WindowGroup {
NavigationStack(path: $navigationPath) {
let value = try? KeyClient.live.getBackupInfo()
if isOnboarding && (value == nil) {
OnboardingView(viewModel: .init(bdkClient: .live))
} else if !isOnboarding && (value == nil) {
OnboardingView(viewModel: .init(bdkClient: .live))
let keyClient = KeyClient.live
let syncService: BDKSyncService = EsploraServerSyncService(
keyClient: keyClient,
network: .signet
)

if let _ = try? KeyClient.live.getBackupInfo() {
HomeView(
viewModel: .init(
bdkClient: .live,
bdkSyncService: syncService
),
navigationPath: $navigationPath
)
} else {
HomeView(viewModel: .init(bdkClient: .live), navigationPath: $navigationPath)
OnboardingView(
viewModel: .init(
bdkSyncService: syncService
)
)
}
}
.onChange(of: isOnboarding) { oldValue, newValue in
BDKClient.live.setNeedsFullScan(true)
StorageUtil.shared.isNeedFullScan = true
navigationPath = NavigationPath()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,21 @@ import Foundation

extension Connection {
static func createConnection() throws -> Connection {
let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
let documentsDirectoryURL = URL.defaultWalletDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent(URL.walletDirectoryName)

if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
}

try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
let connection = try Connection(path: URL.persistenceBackendPath)
return connection
}

static func loadConnection() throws -> Connection {
let persistenceBackendPath = URL.persistenceBackendPath
let connection = try Connection(path: persistenceBackendPath)
return connection
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ extension FileManager {
}

func removeOldFlatFileIfNeeded(at directoryURL: URL) throws {
let flatFileURL = directoryURL.appendingPathComponent("wallet_data")
let flatFileURL = directoryURL.appendingPathComponent(URL.walletDirectoryName)
var isDir: ObjCBool = false
if fileExists(atPath: flatFileURL.path, isDirectory: &isDir) {
if !isDir.boolValue {
Expand Down
31 changes: 31 additions & 0 deletions BDKSwiftExampleWallet/Extensions/URL+Extensions.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// URL+Extensions.swift
// BDKSwiftExampleWallet
//
// Created by Rubens Machion on 17/05/25.
//

import Foundation

extension URL {

static var defaultWalletDirectory: URL {
URL.documentsDirectory
}

static var walletDirectoryName: String {
"wallet_data"
}

static var walletDBName: String {
"wallet.sqlite"
}

static var walletDataDirectoryURL: URL {
defaultWalletDirectory.appendingPathComponent(walletDirectoryName)
}

static var persistenceBackendPath: String {
walletDataDirectoryURL.appendingPathComponent(walletDBName).path
}
}
9 changes: 9 additions & 0 deletions BDKSwiftExampleWallet/Resources/Localizable.xcstrings
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,12 @@
}
}
}
},
"Kyoto" : {

},
"Main" : {

},
"Navigation Title" : {
"extractionState" : "stale",
Expand Down Expand Up @@ -1143,6 +1149,9 @@
}
}
}
},
"Sync type" : {

},
"Syncing" : {
"extractionState" : "manual",
Expand Down
12 changes: 4 additions & 8 deletions BDKSwiftExampleWallet/Service/BDK Service/BDKService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,9 @@ private class BDKService {
}

private func loadWallet(descriptor: Descriptor, changeDescriptor: Descriptor) throws {
let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
try FileManager.default.ensureDirectoryExists(at: walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: documentsDirectoryURL)
let persistenceBackendPath = walletDataDirectoryURL.appendingPathComponent("wallet.sqlite")
.path
try FileManager.default.ensureDirectoryExists(at: URL.walletDataDirectoryURL)
try FileManager.default.removeOldFlatFileIfNeeded(at: URL.defaultWalletDirectory)
let persistenceBackendPath = URL.persistenceBackendPath
let connection = try Connection(path: persistenceBackendPath)
self.connection = connection
let wallet = try Wallet.load(
Expand Down Expand Up @@ -290,8 +287,7 @@ private class BDKService {

try self.keyClient.deleteBackupInfo()

let documentsDirectoryURL = URL.documentsDirectory
let walletDataDirectoryURL = documentsDirectoryURL.appendingPathComponent("wallet_data")
let walletDataDirectoryURL = URL.walletDataDirectoryURL
if FileManager.default.fileExists(atPath: walletDataDirectoryURL.path) {
try FileManager.default.removeItem(at: walletDataDirectoryURL)
}
Expand Down
Loading
Loading