Skip to content

Commit 399ba8f

Browse files
committed
Run macOS smoke commands before app startup
1 parent 8870d51 commit 399ba8f

6 files changed

Lines changed: 27 additions & 39 deletions

File tree

macos/Runner.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
5F53D0402E4414A100740586 /* FilePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F53D03F2E4414A100740586 /* FilePath.swift */; };
5353
5F53D0452E4414D000740586 /* FilePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F53D03F2E4414A100740586 /* FilePath.swift */; };
5454
5FAE10022F1C000100000001 /* SystemExtensionSmokeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAE10012F1C000100000001 /* SystemExtensionSmokeCommand.swift */; };
55+
5FAE10042F1C000100000001 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAE10032F1C000100000001 /* main.swift */; };
5556
5F53D0512E44EBB700740586 /* org.getlantern.lantern.PacketTunnel.systemextension in Embed System Extensions */ = {isa = PBXBuildFile; fileRef = 29952B042DE79CB200640E7F /* org.getlantern.lantern.PacketTunnel.systemextension */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
5657
5F53D0642E4502A700740586 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29952B052DE79CB200640E7F /* NetworkExtension.framework */; };
5758
5F53D0692E45078400740586 /* Liblantern.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 293C302F2DEF247F00691115 /* Liblantern.xcframework */; };
@@ -181,6 +182,7 @@
181182
5F53D0392E44112E00740586 /* SystemExtensionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemExtensionManager.swift; sourceTree = "<group>"; };
182183
5F53D03F2E4414A100740586 /* FilePath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePath.swift; sourceTree = "<group>"; };
183184
5FAE10012F1C000100000001 /* SystemExtensionSmokeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemExtensionSmokeCommand.swift; sourceTree = "<group>"; };
185+
5FAE10032F1C000100000001 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
184186
5F7422202E7C1FB000FC72BE /* LogsEventHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogsEventHandler.swift; sourceTree = "<group>"; };
185187
5F7B9A592F0C13AC0019E3E0 /* AppStreamHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStreamHandler.swift; sourceTree = "<group>"; };
186188
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
@@ -351,6 +353,7 @@
351353
children = (
352354
293C305D2DEF67EB00691115 /* VPN */,
353355
293C30572DEF649500691115 /* Handlers */,
356+
5FAE10032F1C000100000001 /* main.swift */,
354357
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
355358
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
356359
33E51914231749380026EE4D /* Release.entitlements */,
@@ -683,6 +686,7 @@
683686
03A255852E71B27A0054C0D7 /* SystemExtensionStatusEventHandler.swift in Sources */,
684687
5F53D03A2E44112E00740586 /* SystemExtensionManager.swift in Sources */,
685688
5FAE10022F1C000100000001 /* SystemExtensionSmokeCommand.swift in Sources */,
689+
5FAE10042F1C000100000001 /* main.swift in Sources */,
686690
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
687691
293C305E2DEF67EB00691115 /* VPNManager.swift in Sources */,
688692
293C305F2DEF67EB00691115 /* VPNBase.swift in Sources */,

macos/Runner/AppDelegate.swift

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
import Darwin
21
import FlutterMacOS
32
import Liblantern
43
import OSLog
54
import app_links
65

7-
@main
86
class AppDelegate: FlutterAppDelegate {
97

108
private let systemExtensionManager = SystemExtensionManager.shared
119

1210
private let vpnManager = VPNManager.shared
1311
private var methodHandler: MethodHandler?
14-
private var systemExtensionSmokeRunner: SystemExtensionSmokeCommandRunner?
1512

1613
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
1714
return false
@@ -41,25 +38,6 @@ class AppDelegate: FlutterAppDelegate {
4138
override func applicationDidFinishLaunching(_ aNotification: Notification) {
4239
FilePath.setupFileSystem()
4340

44-
switch SystemExtensionSmokeCommand.parse(arguments: ProcessInfo.processInfo.arguments) {
45-
case .failure(let error):
46-
SystemExtensionSmokeCommand.writeStdout(SystemExtensionSmokeCommand.errorJSON(error.message))
47-
exit(64)
48-
case .success(let command):
49-
if let command {
50-
NSApp.setActivationPolicy(.accessory)
51-
mainFlutterWindow?.orderOut(nil)
52-
systemExtensionSmokeRunner = SystemExtensionSmokeCommandRunner(
53-
command: command,
54-
manager: systemExtensionManager,
55-
output: SystemExtensionSmokeCommand.writeStdout,
56-
complete: { code in exit(code) }
57-
)
58-
systemExtensionSmokeRunner?.start()
59-
return
60-
}
61-
}
62-
6341
guard let controller = mainFlutterWindow?.contentViewController as? FlutterViewController else {
6442
fatalError("contentViewController is not a FlutterViewController")
6543
}

macos/Runner/MainFlutterWindow.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ import IOKit.ps
66
class MainFlutterWindow: NSWindow {
77

88
override func awakeFromNib() {
9-
if SystemExtensionSmokeCommand.isRequested(arguments: ProcessInfo.processInfo.arguments) {
10-
super.awakeFromNib()
11-
return
12-
}
13-
149
let flutterViewController = FlutterViewController()
1510

1611
let size = NSSize(width: 390, height: 760)

macos/Runner/VPN/SystemExtensionSmokeCommand.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,13 @@ internal struct SystemExtensionSmokeCommand: Equatable {
2020
let action: SystemExtensionSmokeAction
2121
let timeout: TimeInterval
2222

23-
static func isRequested(arguments: [String]) -> Bool {
24-
arguments.contains(statusFlag) || arguments.contains(activateFlag)
25-
}
26-
2723
static func parse(
2824
arguments: [String]
2925
) -> Result<SystemExtensionSmokeCommand?, SystemExtensionSmokeParseError> {
3026
let hasStatusFlag = arguments.contains(statusFlag)
3127
let hasActivateFlag = arguments.contains(activateFlag)
3228

33-
guard isRequested(arguments: arguments) else {
29+
guard hasStatusFlag || hasActivateFlag else {
3430
return .success(nil)
3531
}
3632

macos/Runner/main.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Cocoa
2+
import Darwin
3+
4+
private var smokeCommandRunner: SystemExtensionSmokeCommandRunner?
5+
6+
switch SystemExtensionSmokeCommand.parse(arguments: ProcessInfo.processInfo.arguments) {
7+
case .failure(let error):
8+
SystemExtensionSmokeCommand.writeStdout(SystemExtensionSmokeCommand.errorJSON(error.message))
9+
exit(64)
10+
case .success(let command?):
11+
FilePath.setupFileSystem()
12+
smokeCommandRunner = SystemExtensionSmokeCommandRunner(
13+
command: command,
14+
manager: SystemExtensionManager.shared,
15+
output: SystemExtensionSmokeCommand.writeStdout,
16+
complete: { code in exit(code) }
17+
)
18+
smokeCommandRunner?.start()
19+
dispatchMain()
20+
case .success(nil):
21+
_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
22+
}

macos/RunnerTests/RunnerTests.swift

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -558,13 +558,6 @@ final class RunnerTests: XCTestCase {
558558
}
559559

560560
func testSystemExtensionSmokeCommandParsesStatus() {
561-
XCTAssertTrue(
562-
SystemExtensionSmokeCommand.isRequested(
563-
arguments: ["Lantern", "--smoke-system-extension-status"]
564-
)
565-
)
566-
XCTAssertFalse(SystemExtensionSmokeCommand.isRequested(arguments: ["Lantern"]))
567-
568561
switch SystemExtensionSmokeCommand.parse(arguments: ["Lantern", "--smoke-system-extension-status"]) {
569562
case .success(let command?):
570563
XCTAssertEqual(command.action, .status)

0 commit comments

Comments
 (0)