From 3c30a4b33641adec1711d5e0581b194e82ed8bad Mon Sep 17 00:00:00 2001 From: Conrad Kramer Date: Tue, 9 May 2023 22:06:56 -0400 Subject: [PATCH] Enable SwiftLint inside of Xcode This commit also fixes all linter warnings and errors. --- Apple/App/BurrowApp.swift | 1 - Apple/App/Status.swift | 3 +- Apple/App/Tunnel.swift | 16 ++-- Apple/App/TunnelView.swift | 6 +- Apple/Burrow.xcodeproj/project.pbxproj | 37 +++++++++ .../xcshareddata/swiftpm/Package.resolved | 77 +++++++++++++++++++ .../PacketTunnelProvider.swift | 11 ++- 7 files changed, 130 insertions(+), 21 deletions(-) create mode 100644 Apple/Burrow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Apple/App/BurrowApp.swift b/Apple/App/BurrowApp.swift index da0bf52..50a7231 100644 --- a/Apple/App/BurrowApp.swift +++ b/Apple/App/BurrowApp.swift @@ -4,7 +4,6 @@ import SwiftUI @main @MainActor struct BurrowApp: App { - static let tunnel = Tunnel { manager, proto in proto.serverAddress = "hackclub.com" manager.localizedDescription = "Burrow" diff --git a/Apple/App/Status.swift b/Apple/App/Status.swift index d2ed65a..c08cdd1 100644 --- a/Apple/App/Status.swift +++ b/Apple/App/Status.swift @@ -26,7 +26,7 @@ extension Tunnel { return "Disabled" case .connecting: return "Connecting" - case .connected(_): + case .connected: return "Connected" case .disconnecting: return "Disconnecting" @@ -40,4 +40,3 @@ extension Tunnel { } } } - diff --git a/Apple/App/Tunnel.swift b/Apple/App/Tunnel.swift index 64808d5..e782eff 100644 --- a/Apple/App/Tunnel.swift +++ b/Apple/App/Tunnel.swift @@ -1,6 +1,6 @@ +import Combine import NetworkExtension import SwiftUI -import Combine @MainActor class Tunnel: ObservableObject { @@ -61,10 +61,6 @@ class Tunnel: ObservableObject { tasks = [statusTask, configurationTask] } - deinit { - tasks.forEach { $0.cancel() } - } - func update() async { do { managers = try await NETunnelProviderManager.managers @@ -96,7 +92,7 @@ class Tunnel: ObservableObject { let proto = NETunnelProviderProtocol() proto.providerBundleIdentifier = bundleIdentifier manager.protocolConfiguration = proto - + configure(manager, proto) try await manager.save() } @@ -111,10 +107,14 @@ class Tunnel: ObservableObject { guard let manager = managers?.first else { return } manager.connection.stopVPNTunnel() } + + deinit { + tasks.forEach { $0.cancel() } + } } -private extension NEVPNConnection { - var tunnelStatus: Tunnel.Status { +extension NEVPNConnection { + var tunnelStatus: Tunnel.Status { switch status { case .connected: return .connected(connectedDate!) diff --git a/Apple/App/TunnelView.swift b/Apple/App/TunnelView.swift index 58153d4..6692a04 100644 --- a/Apple/App/TunnelView.swift +++ b/Apple/App/TunnelView.swift @@ -1,15 +1,13 @@ import SwiftUI struct TunnelView: View { - - @ObservedObject - var tunnel: Tunnel + @ObservedObject var tunnel: Tunnel var body: some View { VStack { Text(verbatim: tunnel.status.description) switch tunnel.status { - case .connected(_): + case .connected: Button("Disconnect", action: stop) case .permissionRequired: Button("Allow", action: configure) diff --git a/Apple/Burrow.xcodeproj/project.pbxproj b/Apple/Burrow.xcodeproj/project.pbxproj index f65dc39..56b64e4 100644 --- a/Apple/Burrow.xcodeproj/project.pbxproj +++ b/Apple/Burrow.xcodeproj/project.pbxproj @@ -176,6 +176,7 @@ buildRules = ( ); dependencies = ( + D0BCC6122A0B328800AD070D /* PBXTargetDependency */, ); name = NetworkExtension; productName = BurrowNetworkExtension; @@ -194,6 +195,7 @@ buildRules = ( ); dependencies = ( + D0BCC6142A0B329200AD070D /* PBXTargetDependency */, D020F65C29E4A697002790F6 /* PBXTargetDependency */, ); name = App; @@ -228,6 +230,9 @@ Base, ); mainGroup = D05B9F6929E39EEC008CB1F9; + packageReferences = ( + D0BCC6102A0B327700AD070D /* XCRemoteSwiftPackageReference "SwiftLint" */, + ); productRefGroup = D05B9F7329E39EEC008CB1F9 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -309,6 +314,14 @@ target = D020F65229E4A697002790F6 /* NetworkExtension */; targetProxy = D020F65B29E4A697002790F6 /* PBXContainerItemProxy */; }; + D0BCC6122A0B328800AD070D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + productRef = D0BCC6112A0B328800AD070D /* SwiftLintPlugin */; + }; + D0BCC6142A0B329200AD070D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + productRef = D0BCC6132A0B329200AD070D /* SwiftLintPlugin */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -385,6 +398,30 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + D0BCC6102A0B327700AD070D /* XCRemoteSwiftPackageReference "SwiftLint" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/realm/SwiftLint.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.51.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + D0BCC6112A0B328800AD070D /* SwiftLintPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = D0BCC6102A0B327700AD070D /* XCRemoteSwiftPackageReference "SwiftLint" */; + productName = "plugin:SwiftLintPlugin"; + }; + D0BCC6132A0B329200AD070D /* SwiftLintPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = D0BCC6102A0B327700AD070D /* XCRemoteSwiftPackageReference "SwiftLint" */; + productName = "plugin:SwiftLintPlugin"; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = D05B9F6A29E39EEC008CB1F9 /* Project object */; } diff --git a/Apple/Burrow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Apple/Burrow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..233bbf9 --- /dev/null +++ b/Apple/Burrow.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,77 @@ +{ + "pins" : [ + { + "identity" : "collectionconcurrencykit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/JohnSundell/CollectionConcurrencyKit.git", + "state" : { + "revision" : "b4f23e24b5a1bff301efc5e70871083ca029ff95", + "version" : "0.2.0" + } + }, + { + "identity" : "sourcekitten", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jpsim/SourceKitten.git", + "state" : { + "revision" : "b6dc09ee51dfb0c66e042d2328c017483a1a5d56", + "version" : "0.34.1" + } + }, + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "fee6933f37fde9a5e12a1e4aeaa93fe60116ff2a", + "version" : "1.2.2" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax.git", + "state" : { + "revision" : "013a48e2312e57b7b355db25bd3ea75282ebf274", + "version" : "0.50900.0-swift-DEVELOPMENT-SNAPSHOT-2023-02-06-a" + } + }, + { + "identity" : "swiftlint", + "kind" : "remoteSourceControl", + "location" : "https://github.com/realm/SwiftLint.git", + "state" : { + "revision" : "eb85125a5f293de3d3248af259980c98bc2b1faa", + "version" : "0.51.0" + } + }, + { + "identity" : "swiftytexttable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scottrhoyt/SwiftyTextTable.git", + "state" : { + "revision" : "c6df6cf533d120716bff38f8ff9885e1ce2a4ac3", + "version" : "0.9.0" + } + }, + { + "identity" : "swxmlhash", + "kind" : "remoteSourceControl", + "location" : "https://github.com/drmohundro/SWXMLHash.git", + "state" : { + "revision" : "4d0f62f561458cbe1f732171e625f03195151b60", + "version" : "7.0.1" + } + }, + { + "identity" : "yams", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jpsim/Yams.git", + "state" : { + "revision" : "f47ba4838c30dbd59998a4e4c87ab620ff959e8a", + "version" : "5.0.5" + } + } + ], + "version" : 2 +} diff --git a/Apple/NetworkExtension/PacketTunnelProvider.swift b/Apple/NetworkExtension/PacketTunnelProvider.swift index 1ac4a3b..ff08261 100644 --- a/Apple/NetworkExtension/PacketTunnelProvider.swift +++ b/Apple/NetworkExtension/PacketTunnelProvider.swift @@ -1,25 +1,24 @@ import NetworkExtension class PacketTunnelProvider: NEPacketTunnelProvider { - - override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) { + override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) { completionHandler(nil) } - + override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) { completionHandler() } - + override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { if let handler = completionHandler { handler(messageData) } } - + override func sleep(completionHandler: @escaping () -> Void) { completionHandler() } - + override func wake() { } }