Skip to content

Commit fa009e6

Browse files
committed
ios: react to change in connectivity.
Use NwPathMonitor to monitor change in connectivity, and trigger the offline banner when going offline, and a manual reconnection when going back online.
1 parent f4d4769 commit fa009e6

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

backend/mobileserver/mobileserver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ func UsingMobileDataChanged() {
157157
bridgecommon.UsingMobileDataChanged()
158158
}
159159

160+
// SetOnline exposes `bridgecommon.SetOnline` to Java/Kotlin.
161+
func SetOnline(online bool) {
162+
bridgecommon.SetOnline(online)
163+
}
164+
160165
// UsbUpdate exposes `bridgecommon.UsbUpdate` to Java/Kotlin.
161166
func UsbUpdate() {
162167
bridgecommon.UsbUpdate()

frontends/ios/BitBoxApp/BitBoxApp.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
8E1846EB2E0AFF6000802D8B /* NetworkMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E1846EA2E0AFF5B00802D8B /* NetworkMonitor.swift */; };
11+
8E1846EC2E0AFF6000802D8B /* NetworkMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E1846EA2E0AFF5B00802D8B /* NetworkMonitor.swift */; };
1012
D700B5F62C884C34000496D4 /* Mobileserver.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D76518BB2B1F8F7400DC03A9 /* Mobileserver.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1113
D700B5FD2CA2FFAF000496D4 /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76516322B1F3D1A00DC03A9 /* WebView.swift */; };
1214
D700B5FE2CA2FFAF000496D4 /* BitBoxAppApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76516082B1F3B1300DC03A9 /* BitBoxAppApp.swift */; };
@@ -71,6 +73,7 @@
7173
/* End PBXCopyFilesBuildPhase section */
7274

7375
/* Begin PBXFileReference section */
76+
8E1846EA2E0AFF5B00802D8B /* NetworkMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitor.swift; sourceTree = "<group>"; };
7477
D700B5F82C888CB9000496D4 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
7578
D700B5F92C986A3C000496D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
7679
D700B60A2CA2FFAF000496D4 /* BitBoxApp Testnet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BitBoxApp Testnet.app"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -151,6 +154,7 @@
151154
D76516072B1F3B1300DC03A9 /* BitBoxApp */ = {
152155
isa = PBXGroup;
153156
children = (
157+
8E1846EA2E0AFF5B00802D8B /* NetworkMonitor.swift */,
154158
D700B5F92C986A3C000496D4 /* Info.plist */,
155159
D76518B52B1F45B300DC03A9 /* assets */,
156160
D76516082B1F3B1300DC03A9 /* BitBoxAppApp.swift */,
@@ -400,6 +404,7 @@
400404
buildActionMask = 2147483647;
401405
files = (
402406
D700B5FD2CA2FFAF000496D4 /* WebView.swift in Sources */,
407+
8E1846EC2E0AFF6000802D8B /* NetworkMonitor.swift in Sources */,
403408
D721B20E2D36A00000767080 /* Bluetooth.swift in Sources */,
404409
D700B5FE2CA2FFAF000496D4 /* BitBoxAppApp.swift in Sources */,
405410
);
@@ -410,6 +415,7 @@
410415
buildActionMask = 2147483647;
411416
files = (
412417
D76516332B1F3D1B00DC03A9 /* WebView.swift in Sources */,
418+
8E1846EB2E0AFF6000802D8B /* NetworkMonitor.swift in Sources */,
413419
D721B20D2D369EC100767080 /* Bluetooth.swift in Sources */,
414420
D76516092B1F3B1300DC03A9 /* BitBoxAppApp.swift in Sources */,
415421
);

frontends/ios/BitBoxApp/BitBoxApp/BitBoxAppApp.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import SwiftUI
99
import Mobileserver
1010
import LocalAuthentication
11+
import Network
1112

1213
protocol MessageHandlersProtocol {
1314
func callResponseHandler(queryID: Int, response: String)
@@ -184,6 +185,8 @@ struct BitBoxAppApp: App {
184185
.edgesIgnoringSafeArea(.all)
185186
.onAppear {
186187
setupGoAPI(goAPI: goAPI)
188+
// Manual trigger at startup
189+
MobileserverSetOnline(NetworkMonitor.shared.isOnline())
187190
}
188191
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
189192
MobileserverManualReconnect()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// NetworkMonitor.swift
3+
// BitBoxApp
4+
//
5+
// Created by Nikolas De Giorgis on 24/06/2025.
6+
//
7+
8+
import Network
9+
import Mobileserver
10+
11+
class NetworkMonitor {
12+
static let shared = NetworkMonitor()
13+
private let monitor = NWPathMonitor()
14+
private let queue = DispatchQueue(label: "NetworkMonitor")
15+
16+
private init() {
17+
monitor.pathUpdateHandler = { path in
18+
let isOnline = self.isOnline()
19+
MobileserverSetOnline(isOnline)
20+
}
21+
monitor.start(queue: queue)
22+
}
23+
24+
func isOnline() -> Bool {
25+
return monitor.currentPath.status == .satisfied
26+
}
27+
}

0 commit comments

Comments
 (0)