From 79e628ec96911c303dfa808a13cf701839dc1d9e Mon Sep 17 00:00:00 2001 From: Dallas Groot Date: Sun, 12 Apr 2026 10:16:21 -0700 Subject: [PATCH] initial working build --- Daemon/BuildManager.swift | 2 +- Daemon/DaemonController.swift | 14 +- Daemon/LSPProxy.swift | 4 +- Daemon/PreBuildRunner.swift | 7 +- Daemon/routes.swift | 4 +- PadXcodeDaemon.xcodeproj/project.pbxproj | 439 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 267 +++++++++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 41154 bytes .../xcschemes/xcschememanagement.plist | 14 + UI/DaemonLogWindowView.swift | 2 - 11 files changed, 747 insertions(+), 13 deletions(-) create mode 100644 PadXcodeDaemon.xcodeproj/project.pbxproj create mode 100644 PadXcodeDaemon.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 PadXcodeDaemon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 PadXcodeDaemon.xcodeproj/project.xcworkspace/xcuserdata/dallasgroot.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 PadXcodeDaemon.xcodeproj/xcuserdata/dallasgroot.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/Daemon/BuildManager.swift b/Daemon/BuildManager.swift index 7e4290d..4b7c642 100644 --- a/Daemon/BuildManager.swift +++ b/Daemon/BuildManager.swift @@ -23,7 +23,7 @@ final class BuildSession: @unchecked Sendable { guard let data = try? JSONEncoder().encode(message), let text = String(data: data, encoding: .utf8) else { return } lock.lock(); let snap = clients; lock.unlock() - for ws in snap where !ws.isClosed { ws.send(text) } + for ws in snap where !ws.isClosed { let w = ws; Task { try? await w.send(text) } } } @discardableResult diff --git a/Daemon/DaemonController.swift b/Daemon/DaemonController.swift index d9345f6..a51d924 100644 --- a/Daemon/DaemonController.swift +++ b/Daemon/DaemonController.swift @@ -47,6 +47,7 @@ struct DaemonLogLine: Identifiable { } @Observable +@MainActor final class DaemonController { var serverState: ServerState = .stopped var connectedClients: [ConnectedClient] = [] @@ -58,14 +59,21 @@ final class DaemonController { init(preferences: AppPreferences) { self.preferences = preferences } + // LoggingSystem can only be bootstrapped once per process lifetime. + // Guard with a static flag so restarts don't crash NIO's internal storage box. + private static var loggingBootstrapped = false + func start() async { guard !serverState.isRunning else { return } serverState = .starting appendLog("Starting PadXcode daemon on port \(preferences.port)…", level: .info) do { var env = try Environment.detect() - try LoggingSystem.bootstrap(from: &env) - let app = Application(env) + if !DaemonController.loggingBootstrapped { + try LoggingSystem.bootstrap(from: &env) + DaemonController.loggingBootstrapped = true + } + let app = try await Application.make(env) app.http.server.configuration.hostname = "0.0.0.0" app.http.server.configuration.port = preferences.port try configure(app, controller: self) @@ -83,7 +91,7 @@ final class DaemonController { func stop() async { guard serverState.isRunning else { return } appendLog("Stopping daemon…", level: .info) - await vaporApp?.asyncShutdown() + try? await vaporApp?.asyncShutdown() vaporApp = nil; serverState = .stopped; connectedClients = [] appendLog("Daemon stopped.", level: .info) } diff --git a/Daemon/LSPProxy.swift b/Daemon/LSPProxy.swift index 1e6aa2e..e82c463 100644 --- a/Daemon/LSPProxy.swift +++ b/Daemon/LSPProxy.swift @@ -43,12 +43,12 @@ actor LSPProxy { let messages = extractJSONBodies(from: data) for msg in messages { guard let text = String(data: msg, encoding: .utf8) else { continue } - for ws in clients where !ws.isClosed { ws.send(text) } + for ws in clients where !ws.isClosed { let w = ws; Task { try? await w.send(text) } } } } private func broadcastStatus(_ s: String) { - for ws in clients where !ws.isClosed { ws.send(#"{"padxcode_status":"\#(s)"}"#) } + for ws in clients where !ws.isClosed { let w = ws; let msg = #"{"padxcode_status":"\#(s)"}"#; Task { try? await w.send(msg) } } } private func extractJSONBodies(from data: Data) -> [Data] { diff --git a/Daemon/PreBuildRunner.swift b/Daemon/PreBuildRunner.swift index 88730a4..a520a3a 100644 --- a/Daemon/PreBuildRunner.swift +++ b/Daemon/PreBuildRunner.swift @@ -27,8 +27,9 @@ final class PreBuildRunner { p.environment = env let out = Pipe(); let err = Pipe() p.standardOutput = out; p.standardError = err - var timedOut = false - let wd = DispatchWorkItem { timedOut = true; p.terminate() + final class TimedOutBox { var value = false } + let timedOutBox = TimedOutBox() + let wd = DispatchWorkItem { timedOutBox.value = true; p.terminate() session.broadcast(BuildLogMessage(type: .stderr, text: "⏱ Hook '\(hook.name)' timed out.", exitCode: nil)) } DispatchQueue.global().asyncAfter(deadline: .now() + .seconds(hook.timeoutSeconds), execute: wd) @@ -47,7 +48,7 @@ final class PreBuildRunner { } p.terminationHandler = { proc in wd.cancel() - g.notify(queue: .global()) { cont.resume(returning: proc.terminationStatus == 0 && !timedOut) } + g.notify(queue: .global()) { cont.resume(returning: proc.terminationStatus == 0 && !timedOutBox.value) } } do { try p.run() } catch { diff --git a/Daemon/routes.swift b/Daemon/routes.swift index 83a0e12..1daf90b 100644 --- a/Daemon/routes.swift +++ b/Daemon/routes.swift @@ -87,7 +87,7 @@ func routes(_ app: Application) throws { app.webSocket("build", "stream", ":sessionId") { req, ws async in guard let sid = req.parameters.get("sessionId"), let session = await BuildSessionStore.shared.session(for: sid) else { - ws.send(#"{"type":"stderr","text":"Unknown session.","exitCode":-1}"#) + try? await ws.send(#"{"type":"stderr","text":"Unknown session.","exitCode":-1}"#) try? await ws.close() return } @@ -189,7 +189,7 @@ private func runBuildPipeline( let ddPath = "/tmp/padxcode-derived-\(abs(request.projectPath.hashValue))" let teamID = loadTeamID() - var args = projectArg + [ + let args = projectArg + [ "-scheme", request.scheme, "-destination", request.destination, "-configuration", request.configuration, diff --git a/PadXcodeDaemon.xcodeproj/project.pbxproj b/PadXcodeDaemon.xcodeproj/project.pbxproj new file mode 100644 index 0000000..55dc6aa --- /dev/null +++ b/PadXcodeDaemon.xcodeproj/project.pbxproj @@ -0,0 +1,439 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 1B6A53333ADE88D27E193DAF /* MenuBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15255A727EB7B9AE155AF08 /* MenuBarView.swift */; }; + 1D0729C238EF2340F425CBEF /* Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC3B5F8E7CE925E0253CC87 /* Setup.swift */; }; + 3B514E5E11E532D6D83D2EB6 /* DaemonController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB419157DD86DA847DDAEF24 /* DaemonController.swift */; }; + 3BAB259291C30EBC6467FEB5 /* DaemonStartupValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF818883682630070DC58E /* DaemonStartupValidator.swift */; }; + 3DF5168029CD2350925BBE71 /* DaemonLogWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CEAAFE243EE7D46DA03814A /* DaemonLogWindowView.swift */; }; + 4259E7DAFF6FFFDC9A30586F /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = C50869843830B3A4FFEE7853 /* Models.swift */; }; + 44F3AD560D7FEB8B3E561938 /* AppPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10E3F42DD5F533A4D619E70 /* AppPreferences.swift */; }; + 56C6C2631AAF1BAC7FED7101 /* LSPProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F963173D95BB0EAD72FA34 /* LSPProxy.swift */; }; + AC206C8AFBF320BF415BD0D7 /* DaemonSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA955F827B9885BF83868479 /* DaemonSettingsView.swift */; }; + B3CC9EE3D46085287CFBA724 /* BuildManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034262CCE3AF0F6848BD64B4 /* BuildManager.swift */; }; + BFF05264DBA7DAA9AA1E636E /* Vapor in Frameworks */ = {isa = PBXBuildFile; productRef = 45D3B3290761A848F13B231C /* Vapor */; }; + C67E517D8E6A987EFAB951B2 /* routes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 246FF7AD109555D46919B8CC /* routes.swift */; }; + C6A5644FA5D18B9BC5DA5CB4 /* PreBuildRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92230516F53BB02DF04FB13C /* PreBuildRunner.swift */; }; + E29649F27603E1FEA7C03CCB /* PadXcodeDaemonApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CB0717ABE6309094BB5EDE /* PadXcodeDaemonApp.swift */; }; + F177C85DD553A8E0BE469868 /* DeviceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38610E65DCF293138C0AF0AA /* DeviceManager.swift */; }; + F36FC42736240D6F427A34E8 /* configure.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD285422D4F9DA8BF11FEDF9 /* configure.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 034262CCE3AF0F6848BD64B4 /* BuildManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildManager.swift; sourceTree = ""; }; + 246FF7AD109555D46919B8CC /* routes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = routes.swift; sourceTree = ""; }; + 32F963173D95BB0EAD72FA34 /* LSPProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LSPProxy.swift; sourceTree = ""; }; + 38610E65DCF293138C0AF0AA /* DeviceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceManager.swift; sourceTree = ""; }; + 3E7929609E3195F4999953E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 3EA5BF4FA2338D1085F5FFED /* PadXcodeDaemon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PadXcodeDaemon.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CEAAFE243EE7D46DA03814A /* DaemonLogWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaemonLogWindowView.swift; sourceTree = ""; }; + 92230516F53BB02DF04FB13C /* PreBuildRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreBuildRunner.swift; sourceTree = ""; }; + 9AC3B5F8E7CE925E0253CC87 /* Setup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Setup.swift; sourceTree = ""; }; + A5CB0717ABE6309094BB5EDE /* PadXcodeDaemonApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PadXcodeDaemonApp.swift; sourceTree = ""; }; + AD285422D4F9DA8BF11FEDF9 /* configure.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = configure.swift; sourceTree = ""; }; + C10E3F42DD5F533A4D619E70 /* AppPreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPreferences.swift; sourceTree = ""; }; + C15255A727EB7B9AE155AF08 /* MenuBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarView.swift; sourceTree = ""; }; + C50869843830B3A4FFEE7853 /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; }; + CA955F827B9885BF83868479 /* DaemonSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaemonSettingsView.swift; sourceTree = ""; }; + D0AF818883682630070DC58E /* DaemonStartupValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaemonStartupValidator.swift; sourceTree = ""; }; + FB419157DD86DA847DDAEF24 /* DaemonController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaemonController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1418A8CB4A52579C5B219E01 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BFF05264DBA7DAA9AA1E636E /* Vapor in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A21B5225C3C9A96438FBAF9 /* UI */ = { + isa = PBXGroup; + children = ( + 7CEAAFE243EE7D46DA03814A /* DaemonLogWindowView.swift */, + CA955F827B9885BF83868479 /* DaemonSettingsView.swift */, + C15255A727EB7B9AE155AF08 /* MenuBarView.swift */, + ); + path = UI; + sourceTree = ""; + }; + 4A44A5A57FB7321EB559FF0D /* Daemon */ = { + isa = PBXGroup; + children = ( + 034262CCE3AF0F6848BD64B4 /* BuildManager.swift */, + AD285422D4F9DA8BF11FEDF9 /* configure.swift */, + FB419157DD86DA847DDAEF24 /* DaemonController.swift */, + D0AF818883682630070DC58E /* DaemonStartupValidator.swift */, + 38610E65DCF293138C0AF0AA /* DeviceManager.swift */, + 32F963173D95BB0EAD72FA34 /* LSPProxy.swift */, + C50869843830B3A4FFEE7853 /* Models.swift */, + 92230516F53BB02DF04FB13C /* PreBuildRunner.swift */, + 246FF7AD109555D46919B8CC /* routes.swift */, + 9AC3B5F8E7CE925E0253CC87 /* Setup.swift */, + ); + path = Daemon; + sourceTree = ""; + }; + 51BC908BBF37E5CC2F08CF99 /* Products */ = { + isa = PBXGroup; + children = ( + 3EA5BF4FA2338D1085F5FFED /* PadXcodeDaemon.app */, + ); + name = Products; + sourceTree = ""; + }; + E9DAE6B1D26A70FB2A667B50 /* Preferences */ = { + isa = PBXGroup; + children = ( + C10E3F42DD5F533A4D619E70 /* AppPreferences.swift */, + ); + path = Preferences; + sourceTree = ""; + }; + F22661C748C8E28CB121EB51 = { + isa = PBXGroup; + children = ( + FDAAE564F78B03A018B8AE18 /* App */, + 4A44A5A57FB7321EB559FF0D /* Daemon */, + E9DAE6B1D26A70FB2A667B50 /* Preferences */, + 0A21B5225C3C9A96438FBAF9 /* UI */, + 51BC908BBF37E5CC2F08CF99 /* Products */, + ); + sourceTree = ""; + }; + FDAAE564F78B03A018B8AE18 /* App */ = { + isa = PBXGroup; + children = ( + 3E7929609E3195F4999953E2 /* Info.plist */, + A5CB0717ABE6309094BB5EDE /* PadXcodeDaemonApp.swift */, + ); + path = App; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + ABE87B3C7636957D1A544F00 /* PadXcodeDaemon */ = { + isa = PBXNativeTarget; + buildConfigurationList = 100A9A4BABA7FF9382033998 /* Build configuration list for PBXNativeTarget "PadXcodeDaemon" */; + buildPhases = ( + BA90D4A52795991570822DB4 /* SwiftLint (optional) */, + D843E4BC4962B18D4CEF6896 /* Sources */, + 1418A8CB4A52579C5B219E01 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PadXcodeDaemon; + packageProductDependencies = ( + 45D3B3290761A848F13B231C /* Vapor */, + ); + productName = PadXcodeDaemon; + productReference = 3EA5BF4FA2338D1085F5FFED /* PadXcodeDaemon.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 98748342E09229F37FF71755 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; + TargetAttributes = { + ABE87B3C7636957D1A544F00 = { + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 180A2CD21BD43F9EE8E4F649 /* Build configuration list for PBXProject "PadXcodeDaemon" */; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + en, + ); + mainGroup = F22661C748C8E28CB121EB51; + minimizedProjectReferenceProxies = 1; + packageReferences = ( + 488F7B44CBC16B080F74A5E4 /* XCRemoteSwiftPackageReference "vapor" */, + ); + preferredProjectObjectVersion = 77; + productRefGroup = 51BC908BBF37E5CC2F08CF99 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ABE87B3C7636957D1A544F00 /* PadXcodeDaemon */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + BA90D4A52795991570822DB4 /* SwiftLint (optional) */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "SwiftLint (optional)"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint > /dev/null; then\n swiftlint\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D843E4BC4962B18D4CEF6896 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44F3AD560D7FEB8B3E561938 /* AppPreferences.swift in Sources */, + B3CC9EE3D46085287CFBA724 /* BuildManager.swift in Sources */, + 3B514E5E11E532D6D83D2EB6 /* DaemonController.swift in Sources */, + 3DF5168029CD2350925BBE71 /* DaemonLogWindowView.swift in Sources */, + AC206C8AFBF320BF415BD0D7 /* DaemonSettingsView.swift in Sources */, + 3BAB259291C30EBC6467FEB5 /* DaemonStartupValidator.swift in Sources */, + F177C85DD553A8E0BE469868 /* DeviceManager.swift in Sources */, + 56C6C2631AAF1BAC7FED7101 /* LSPProxy.swift in Sources */, + 1B6A53333ADE88D27E193DAF /* MenuBarView.swift in Sources */, + 4259E7DAFF6FFFDC9A30586F /* Models.swift in Sources */, + E29649F27603E1FEA7C03CCB /* PadXcodeDaemonApp.swift in Sources */, + C6A5644FA5D18B9BC5DA5CB4 /* PreBuildRunner.swift in Sources */, + 1D0729C238EF2340F425CBEF /* Setup.swift in Sources */, + F36FC42736240D6F427A34E8 /* configure.swift in Sources */, + C67E517D8E6A987EFAB951B2 /* routes.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 06E291A8A5AC3F52DE9BE434 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = PadXcodeDaemon.entitlements; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = E9C9AGS9K6; + INFOPLIST_FILE = App/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 14.0; + SDKROOT = macosx; + }; + name = Release; + }; + 8F34E43F0510978FD5A1B56E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = ca.dallasgroot.PadXcodeDaemon; + PRODUCT_NAME = PadXcodeDaemon; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.9; + }; + name = Release; + }; + ADFC073DAD442B1EF0D0B191 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = PadXcodeDaemon.entitlements; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = E9C9AGS9K6; + INFOPLIST_FILE = App/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 14.0; + SDKROOT = macosx; + }; + name = Debug; + }; + D5E2326F7EE5A874159D618E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = ca.dallasgroot.PadXcodeDaemon; + PRODUCT_NAME = PadXcodeDaemon; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.9; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 100A9A4BABA7FF9382033998 /* Build configuration list for PBXNativeTarget "PadXcodeDaemon" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ADFC073DAD442B1EF0D0B191 /* Debug */, + 06E291A8A5AC3F52DE9BE434 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 180A2CD21BD43F9EE8E4F649 /* Build configuration list for PBXProject "PadXcodeDaemon" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D5E2326F7EE5A874159D618E /* Debug */, + 8F34E43F0510978FD5A1B56E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 488F7B44CBC16B080F74A5E4 /* XCRemoteSwiftPackageReference "vapor" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/vapor/vapor.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.99.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 45D3B3290761A848F13B231C /* Vapor */ = { + isa = XCSwiftPackageProductDependency; + package = 488F7B44CBC16B080F74A5E4 /* XCRemoteSwiftPackageReference "vapor" */; + productName = Vapor; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 98748342E09229F37FF71755 /* Project object */; +} diff --git a/PadXcodeDaemon.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/PadXcodeDaemon.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/PadXcodeDaemon.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/PadXcodeDaemon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/PadXcodeDaemon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..d034570 --- /dev/null +++ b/PadXcodeDaemon.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,267 @@ +{ + "originHash" : "2c13b66e45ccca8ad633ea9b5beb846babe35a4b10a9226e1279c92a3017165f", + "pins" : [ + { + "identity" : "async-http-client", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swift-server/async-http-client.git", + "state" : { + "revision" : "3a5b74a58782c3b4c1f0bc75e9b67b10c2494e8f", + "version" : "1.33.1" + } + }, + { + "identity" : "async-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/async-kit.git", + "state" : { + "revision" : "6bbb83cbf9d886623a967a965c8fb1b73e6566f9", + "version" : "1.22.0" + } + }, + { + "identity" : "console-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/console-kit.git", + "state" : { + "revision" : "32ad16dfc7677b927b225595ed18f3debb32f577", + "version" : "4.16.0" + } + }, + { + "identity" : "multipart-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/multipart-kit.git", + "state" : { + "revision" : "3498e60218e6003894ff95192d756e238c01f44e", + "version" : "4.7.1" + } + }, + { + "identity" : "routing-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/routing-kit.git", + "state" : { + "revision" : "1a10ccea61e4248effd23b6e814999ce7bdf0ee0", + "version" : "4.9.3" + } + }, + { + "identity" : "swift-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-algorithms.git", + "state" : { + "revision" : "87e50f483c54e6efd60e885f7f5aa946cee68023", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-asn1", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-asn1.git", + "state" : { + "revision" : "9f542610331815e29cc3821d3b6f488db8715517", + "version" : "1.6.0" + } + }, + { + "identity" : "swift-async-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-async-algorithms.git", + "state" : { + "revision" : "9d349bcc328ac3c31ce40e746b5882742a0d1272", + "version" : "1.1.3" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7", + "version" : "1.3.0" + } + }, + { + "identity" : "swift-certificates", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-certificates.git", + "state" : { + "revision" : "24ccdeeeed4dfaae7955fcac9dbf5489ed4f1a25", + "version" : "1.18.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "6675bc0ff86e61436e615df6fc5174e043e57924", + "version" : "1.4.1" + } + }, + { + "identity" : "swift-configuration", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-configuration.git", + "state" : { + "revision" : "be76c4ad929eb6c4bcaf3351799f2adf9e6848a9", + "version" : "1.2.0" + } + }, + { + "identity" : "swift-crypto", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-crypto.git", + "state" : { + "revision" : "bb4ba815dab96d4edc1e0b86d7b9acf9ff973a84", + "version" : "4.3.1" + } + }, + { + "identity" : "swift-distributed-tracing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-distributed-tracing.git", + "state" : { + "revision" : "dc4030184203ffafbb2ec614352487235d747fe0", + "version" : "1.4.1" + } + }, + { + "identity" : "swift-http-structured-headers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-structured-headers.git", + "state" : { + "revision" : "76d7627bd88b47bf5a0f8497dd244885960dde0b", + "version" : "1.6.0" + } + }, + { + "identity" : "swift-http-types", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-types.git", + "state" : { + "revision" : "45eb0224913ea070ec4fba17291b9e7ecf4749ca", + "version" : "1.5.1" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "8c0f217f01000dd30f60d6e536569ad4e74291f9", + "version" : "1.11.0" + } + }, + { + "identity" : "swift-metrics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-metrics.git", + "state" : { + "revision" : "f17c111cec972c2a4922cef38cf64f76f7e87886", + "version" : "2.8.0" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "558f24a4647193b5a0e2104031b71c55d31ff83a", + "version" : "2.97.1" + } + }, + { + "identity" : "swift-nio-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-extras.git", + "state" : { + "revision" : "abcf5312eb8ed2fb11916078aef7c46b06f20813", + "version" : "1.33.0" + } + }, + { + "identity" : "swift-nio-http2", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-http2.git", + "state" : { + "revision" : "6d8d596f0a9bfebb925733003731fe2d749b7e02", + "version" : "1.42.0" + } + }, + { + "identity" : "swift-nio-ssl", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-ssl.git", + "state" : { + "revision" : "df9c3406028e3297246e6e7081977a167318b692", + "version" : "2.36.1" + } + }, + { + "identity" : "swift-nio-transport-services", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-transport-services.git", + "state" : { + "revision" : "60c3e187154421171721c1a38e800b390680fb5d", + "version" : "1.26.0" + } + }, + { + "identity" : "swift-numerics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-numerics.git", + "state" : { + "revision" : "0c0290ff6b24942dadb83a929ffaaa1481df04a2", + "version" : "1.1.1" + } + }, + { + "identity" : "swift-service-context", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-service-context.git", + "state" : { + "revision" : "d0997351b0c7779017f88e7a93bc30a1878d7f29", + "version" : "1.3.0" + } + }, + { + "identity" : "swift-service-lifecycle", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swift-server/swift-service-lifecycle.git", + "state" : { + "revision" : "9829955b385e5bb88128b73f1b8389e9b9c3191a", + "version" : "2.11.0" + } + }, + { + "identity" : "swift-system", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-system.git", + "state" : { + "revision" : "7c6ad0fc39d0763e0b699210e4124afd5041c5df", + "version" : "1.6.4" + } + }, + { + "identity" : "vapor", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/vapor.git", + "state" : { + "revision" : "cfd8f434843ac7850e2d97f46c1aa5ddb906cf1c", + "version" : "4.121.4" + } + }, + { + "identity" : "websocket-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/websocket-kit.git", + "state" : { + "revision" : "90bbbdab3ede12c803cfbe91646f291c092517a3", + "version" : "2.16.2" + } + } + ], + "version" : 3 +} diff --git a/PadXcodeDaemon.xcodeproj/project.xcworkspace/xcuserdata/dallasgroot.xcuserdatad/UserInterfaceState.xcuserstate b/PadXcodeDaemon.xcodeproj/project.xcworkspace/xcuserdata/dallasgroot.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cb0b64daada46e44943d93595ee27d93645e9694 GIT binary patch literal 41154 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 + + + + SchemeUserState + + PadXcodeDaemon.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/UI/DaemonLogWindowView.swift b/UI/DaemonLogWindowView.swift index 4c9abd1..51d956a 100644 --- a/UI/DaemonLogWindowView.swift +++ b/UI/DaemonLogWindowView.swift @@ -16,8 +16,6 @@ struct DaemonLogWindowView: View { var body: some View { VStack(spacing:0) { HStack(spacing:10) { - ForEach(["All",nil,"info",DaemonLogLine.Level.info,"success",DaemonLogLine.Level.success, - "warning",DaemonLogLine.Level.warning,"error",DaemonLogLine.Level.error] as [Any], id:\.self) { _ in EmptyView() } HStack(spacing:4) { levelBtn("All", nil) levelBtn("Info", .info)