diff --git a/WorkbenchReplacement/App.swift b/WorkbenchReplacement/App.swift index 30049ec..4efd187 100644 --- a/WorkbenchReplacement/App.swift +++ b/WorkbenchReplacement/App.swift @@ -8,10 +8,12 @@ struct WorkbenchReplacementApp: App { WindowGroup("Workbench Replacement") { WorkbenchLaunchView() .environmentObject(model) - .frame(minWidth: 1000, minHeight: 650) + .frame(minWidth: 800, minHeight: 520) } + .defaultSize(width: 1200, height: 800) + .windowResizability(.contentSize) .commands { - CommandGroup(replacing: .newItem) {} + WorkbenchFileCommands(model: model) } @@ -390,3 +392,38 @@ struct WorkbenchSplashView: View { .frame(width: 90) } } + + +// MARK: - Workbench File Menu + +struct WorkbenchFileCommands: Commands { + @ObservedObject var model: DatabaseModel + + var body: some Commands { + CommandGroup(replacing: .newItem) { + Button("New Query Tab") { + model.newQueryTab() + } + .keyboardShortcut("t", modifiers: .command) + } + + CommandGroup(after: .newItem) { + Button("Open SQL Script…") { + model.openSQLScript() + } + .keyboardShortcut("o", modifiers: .command) + + Divider() + + Button("Save SQL Script") { + model.saveSQLScript() + } + .keyboardShortcut("s", modifiers: .command) + + Button("Save SQL Script As…") { + model.saveSQLScript(asNewFile: true) + } + .keyboardShortcut("s", modifiers: [.command, .shift]) + } + } +} diff --git a/WorkbenchReplacement/DatabaseModel.swift b/WorkbenchReplacement/DatabaseModel.swift index b12439c..a34aee7 100644 --- a/WorkbenchReplacement/DatabaseModel.swift +++ b/WorkbenchReplacement/DatabaseModel.swift @@ -1,4 +1,5 @@ import Foundation +import AppKit import Security struct ConnectionProfile: Identifiable, Codable, Hashable { @@ -39,10 +40,40 @@ enum PasswordStore { } } + +struct WorkbenchQueryTab: Identifiable { + let id: UUID + var title: String + var sql: String + var result: QueryResult + var fileURL: URL? + + init( + id: UUID = UUID(), + title: String, + sql: String = "", + result: QueryResult = QueryResult(), + fileURL: URL? = nil + ) { + self.id = id + self.title = title + self.sql = sql + self.result = result + self.fileURL = fileURL + } +} + @MainActor final class DatabaseModel: ObservableObject { @Published var profiles: [ConnectionProfile] = [] @Published var selectedID: UUID? + @Published var queryTabs: [WorkbenchQueryTab] = [ + WorkbenchQueryTab( + title: "Query 1", + sql: "SELECT VERSION() AS server_version;" + ) + ] + @Published var activeQueryID: UUID? @Published var sql = "SELECT VERSION() AS server_version;" @Published var result = QueryResult() @Published var databases: [String] = [] @@ -58,7 +89,109 @@ final class DatabaseModel: ObservableObject { let decoded = try? JSONDecoder().decode([ConnectionProfile].self, from: data) { profiles = decoded } if profiles.isEmpty { profiles = [ConnectionProfile()] } selectedID = profiles.first?.id + activeQueryID = queryTabs.first?.id } + + func newQueryTab() { + saveActiveQuery() + let tab = WorkbenchQueryTab( + title: "Query \\(queryTabs.count + 1)" + ) + queryTabs.append(tab) + activeQueryID = tab.id + sql = tab.sql + result = tab.result + } + + func saveActiveQuery() { + guard let id = activeQueryID, + let index = queryTabs.firstIndex(where: { $0.id == id }) + else { return } + + queryTabs[index].sql = sql + queryTabs[index].result = result + } + + func activateQuery(_ id: UUID) { + saveActiveQuery() + + guard let tab = queryTabs.first(where: { $0.id == id }) + else { return } + + activeQueryID = tab.id + sql = tab.sql + result = tab.result + } + + func closeQuery(_ id: UUID) { + saveActiveQuery() + queryTabs.removeAll { $0.id == id } + + if queryTabs.isEmpty { + let tab = WorkbenchQueryTab(title: "Query 1") + queryTabs.append(tab) + } + + if activeQueryID == id { + activeQueryID = nil + activateQuery(queryTabs[0].id) + } + } + + func openSQLScript() { + let panel = NSOpenPanel() + panel.allowedContentTypes = [.plainText] + panel.allowsOtherFileTypes = true + panel.canChooseDirectories = false + + guard panel.runModal() == .OK, + let url = panel.url, + let contents = try? String(contentsOf: url, encoding: .utf8) + else { return } + + saveActiveQuery() + + let tab = WorkbenchQueryTab( + title: url.lastPathComponent, + sql: contents, + fileURL: url + ) + + queryTabs.append(tab) + activateQuery(tab.id) + status = "Opened \\(url.lastPathComponent)" + } + + func saveSQLScript(asNewFile: Bool = false) { + saveActiveQuery() + + guard let id = activeQueryID, + let index = queryTabs.firstIndex(where: { $0.id == id }) + else { return } + + var destination = asNewFile ? nil : queryTabs[index].fileURL + + if destination == nil { + let panel = NSSavePanel() + panel.nameFieldStringValue = "query.sql" + panel.canCreateDirectories = true + + guard panel.runModal() == .OK else { return } + destination = panel.url + } + + guard let url = destination else { return } + + do { + try sql.write(to: url, atomically: true, encoding: .utf8) + queryTabs[index].fileURL = url + queryTabs[index].title = url.lastPathComponent + status = "Saved \\(url.lastPathComponent)" + } catch { + status = "Save failed: \\(error.localizedDescription)" + } + } + var selected: ConnectionProfile? { profiles.first { $0.id == selectedID } } func save(_ profile: ConnectionProfile, password: String) { if let i = profiles.firstIndex(where: { $0.id == profile.id }) { profiles[i] = profile } @@ -178,6 +311,11 @@ final class DatabaseModel: ObservableObject { status = "Connected to \(profile.name)" } else { result = parsed + if let id = activeQueryID, + let index = queryTabs.firstIndex(where: { $0.id == id }) { + queryTabs[index].sql = sql + queryTabs[index].result = parsed + } status = "Query completed (\(parsed.rows.count) rows)" } } catch { diff --git a/WorkbenchReplacement/MainView.swift b/WorkbenchReplacement/MainView.swift index 9094120..66433dc 100644 --- a/WorkbenchReplacement/MainView.swift +++ b/WorkbenchReplacement/MainView.swift @@ -44,18 +44,18 @@ struct MainView: View { HSplitView { navigator .frame( - minWidth: 210, - idealWidth: 265, + minWidth: 180, + idealWidth: 250, maxWidth: 420 ) workspace - .frame(minWidth: 600) + .frame(minWidth: 480) } statusBar } - .frame(minWidth: 1100, minHeight: 720) + .frame(minWidth: 800, minHeight: 520) .preferredColorScheme( UserDefaults.standard.string( forKey: "preferences.appearance" @@ -83,7 +83,7 @@ struct MainView: View { Text("MySQL Workbench") .font(.system(size: 15, weight: .semibold)) - .foregroundStyle(.black) + .foregroundStyle(.primary) Rectangle() .fill(WB.border) @@ -152,7 +152,7 @@ struct MainView: View { Text(title) .font(.system(size: 10)) } - .foregroundStyle(.black) + .foregroundStyle(.primary) .frame(minWidth: 65) } .buttonStyle(.plain) @@ -455,32 +455,64 @@ struct MainView: View { VSplitView { sqlEditor - .frame(minHeight: 230) + .frame(minHeight: 150) bottomWorkspace - .frame(minHeight: 230) + .frame(minHeight: 150) } } } + private var queryTabBar: some View { HStack(spacing: 0) { - HStack(spacing: 8) { - Image(systemName: "doc.text") - .foregroundStyle(.blue) + ScrollView(.horizontal) { + HStack(spacing: 2) { + ForEach(model.queryTabs) { tab in + HStack(spacing: 8) { + Button { + model.activateQuery(tab.id) + } label: { + Label(tab.title, systemImage: "doc.text") + .lineLimit(1) + } + .buttonStyle(.plain) - Text("Query 1") - .font(.system(size: 12, weight: .semibold)) - - Image(systemName: "xmark") - .font(.system(size: 9)) - .foregroundStyle(.secondary) + Button { + model.closeQuery(tab.id) + } label: { + Image(systemName: "xmark") + .font(.system(size: 9)) + } + .buttonStyle(.plain) + } + .font(.system(size: 12)) + .padding(.horizontal, 10) + .frame(height: 30) + .background( + model.activeQueryID == tab.id + ? Color(nsColor: .textBackgroundColor) + : Color.clear + ) + .clipShape( + UnevenRoundedRectangle( + topLeadingRadius: 5, + topTrailingRadius: 5 + ) + ) + } + } } - .padding(.horizontal, 10) - .frame(height: 29) - .background(Color(nsColor: .textBackgroundColor)) + .scrollIndicators(.hidden) - Spacer() + Button { + model.newQueryTab() + } label: { + Image(systemName: "plus") + } + .buttonStyle(.borderless) + .padding(.horizontal, 10) + .help("New Query Tab") } .background(WB.header) } diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.o index 23640f3..69bb6d7 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.o and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.o differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.stringsdata b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.stringsdata index 99e39a9..80b1fc2 100644 --- a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.stringsdata +++ b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.stringsdata @@ -15,7 +15,7 @@ "key": "SQL Editor", "location": { "startingColumn": 25, - "startingLine": 97 + "startingLine": 99 } }, { @@ -23,7 +23,7 @@ "key": "Query Execution", "location": { "startingColumn": 25, - "startingLine": 105 + "startingLine": 107 } }, { @@ -31,7 +31,7 @@ "key": "Result Grid", "location": { "startingColumn": 25, - "startingLine": 113 + "startingLine": 115 } }, { @@ -39,7 +39,7 @@ "key": "General", "location": { "startingColumn": 25, - "startingLine": 121 + "startingLine": 123 } }, { @@ -47,7 +47,7 @@ "key": "%lld pt", "location": { "startingColumn": 21, - "startingLine": 135 + "startingLine": 137 } }, { @@ -55,7 +55,7 @@ "key": "", "location": { "startingColumn": 24, - "startingLine": 144 + "startingLine": 146 } }, { @@ -63,7 +63,7 @@ "key": "2 spaces", "location": { "startingColumn": 26, - "startingLine": 145 + "startingLine": 147 } }, { @@ -71,7 +71,7 @@ "key": "4 spaces", "location": { "startingColumn": 26, - "startingLine": 146 + "startingLine": 148 } }, { @@ -79,7 +79,7 @@ "key": "8 spaces", "location": { "startingColumn": 26, - "startingLine": 147 + "startingLine": 149 } }, { @@ -87,7 +87,7 @@ "key": "Automatically uppercase SQL keywords", "location": { "startingColumn": 21, - "startingLine": 155 + "startingLine": 157 } }, { @@ -95,7 +95,7 @@ "key": "Show line numbers", "location": { "startingColumn": 21, - "startingLine": 162 + "startingLine": 164 } }, { @@ -103,7 +103,7 @@ "key": "Controls the number of rows retrieved when opening a table from the schema navigator.", "location": { "startingColumn": 17, - "startingLine": 193 + "startingLine": 195 } }, { @@ -111,7 +111,7 @@ "key": "Examples", "location": { "startingColumn": 18, - "startingLine": 203 + "startingLine": 205 } }, { @@ -119,7 +119,7 @@ "key": "", "location": { "startingColumn": 25, - "startingLine": 175 + "startingLine": 177 } }, { @@ -127,7 +127,7 @@ "key": "", "location": { "startingColumn": 25, - "startingLine": 183 + "startingLine": 185 } }, { @@ -135,7 +135,7 @@ "key": "%lld px", "location": { "startingColumn": 21, - "startingLine": 222 + "startingLine": 224 } }, { @@ -143,7 +143,7 @@ "key": "%lld px", "location": { "startingColumn": 21, - "startingLine": 232 + "startingLine": 234 } }, { @@ -151,7 +151,7 @@ "key": "Alternating row colours", "location": { "startingColumn": 21, - "startingLine": 242 + "startingLine": 244 } }, { @@ -159,7 +159,7 @@ "key": "Automatically expand table folders", "location": { "startingColumn": 21, - "startingLine": 254 + "startingLine": 256 } }, { @@ -167,7 +167,7 @@ "key": "Workbench Replacement", "location": { "startingColumn": 18, - "startingLine": 342 + "startingLine": 344 } }, { @@ -175,7 +175,7 @@ "key": "Modern MySQL Client for macOS", "location": { "startingColumn": 18, - "startingLine": 345 + "startingLine": 347 } }, { @@ -183,7 +183,39 @@ "key": "Starting Workbench Replacement…", "location": { "startingColumn": 18, - "startingLine": 362 + "startingLine": 364 + } + }, + { + "comment": "", + "key": "New Query Tab", + "location": { + "startingColumn": 20, + "startingLine": 404 + } + }, + { + "comment": "", + "key": "Open SQL Script…", + "location": { + "startingColumn": 20, + "startingLine": 411 + } + }, + { + "comment": "", + "key": "Save SQL Script", + "location": { + "startingColumn": 20, + "startingLine": 418 + } + }, + { + "comment": "", + "key": "Save SQL Script As…", + "location": { + "startingColumn": 20, + "startingLine": 423 } } ] diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps index 3696801..98dbf47 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.o index 39c145e..99d5805 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.o and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.o differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.swiftdeps index 4965eb7..c69b6d2 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.swiftdeps and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/DatabaseModel.swiftdeps differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o index f753466..c5fca8a 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata index 2d4d09c..1f714ff 100644 --- a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata +++ b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.stringsdata @@ -68,10 +68,10 @@ }, { "comment": "", - "key": "Query 1", + "key": "New Query Tab", "location": { - "startingColumn": 22, - "startingLine": 472 + "startingColumn": 19, + "startingLine": 515 } }, { @@ -79,7 +79,7 @@ "key": "Default Schema:", "location": { "startingColumn": 18, - "startingLine": 508 + "startingLine": 540 } }, { @@ -87,7 +87,7 @@ "key": "SQL Editor", "location": { "startingColumn": 18, - "startingLine": 518 + "startingLine": 550 } }, { @@ -95,7 +95,7 @@ "key": "Execute SQL", "location": { "startingColumn": 19, - "startingLine": 496 + "startingLine": 528 } }, { @@ -103,7 +103,7 @@ "key": "Format SQL", "location": { "startingColumn": 19, - "startingLine": 503 + "startingLine": 535 } }, { @@ -111,7 +111,7 @@ "key": "%lld", "location": { "startingColumn": 26, - "startingLine": 558 + "startingLine": 590 } }, { @@ -119,7 +119,7 @@ "key": "Result Grid", "location": { "startingColumn": 22, - "startingLine": 590 + "startingLine": 622 } }, { @@ -127,7 +127,7 @@ "key": "No query results", "location": { "startingColumn": 26, - "startingLine": 608 + "startingLine": 640 } }, { @@ -135,7 +135,7 @@ "key": "Action Output", "location": { "startingColumn": 22, - "startingLine": 630 + "startingLine": 662 } }, { @@ -143,7 +143,7 @@ "key": "UTF-8", "location": { "startingColumn": 18, - "startingLine": 705 + "startingLine": 737 } }, { @@ -151,7 +151,7 @@ "key": "Connection Settings", "location": { "startingColumn": 18, - "startingLine": 880 + "startingLine": 912 } }, { @@ -159,7 +159,7 @@ "key": "Connection Name", "location": { "startingColumn": 21, - "startingLine": 885 + "startingLine": 917 } }, { @@ -167,7 +167,7 @@ "key": "Hostname", "location": { "startingColumn": 21, - "startingLine": 890 + "startingLine": 922 } }, { @@ -175,7 +175,7 @@ "key": "Port", "location": { "startingColumn": 21, - "startingLine": 895 + "startingLine": 927 } }, { @@ -183,7 +183,7 @@ "key": "Username", "location": { "startingColumn": 21, - "startingLine": 901 + "startingLine": 933 } }, { @@ -191,7 +191,7 @@ "key": "Password (macOS Keychain)", "location": { "startingColumn": 21, - "startingLine": 906 + "startingLine": 938 } }, { @@ -199,7 +199,7 @@ "key": "Default Schema", "location": { "startingColumn": 21, - "startingLine": 911 + "startingLine": 943 } }, { @@ -207,7 +207,7 @@ "key": "Cancel", "location": { "startingColumn": 24, - "startingLine": 919 + "startingLine": 951 } }, { @@ -215,7 +215,7 @@ "key": "Save", "location": { "startingColumn": 24, - "startingLine": 923 + "startingLine": 955 } } ] diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps index be3b94d..7e43ef0 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.swiftdeps differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MySQLProtocol.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MySQLProtocol.o index 52e3f90..c9a916f 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MySQLProtocol.o and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MySQLProtocol.o differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors index d2b6568..8d27582 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule index af174b1..3afe490 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftmodule differ diff --git a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo index c5da84f..86edb71 100644 Binary files a/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo and b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement.swiftsourceinfo differ diff --git a/build/Build/Intermediates.noindex/XCBuildData/build.db b/build/Build/Intermediates.noindex/XCBuildData/build.db index d0cbc58..799e17b 100644 Binary files a/build/Build/Intermediates.noindex/XCBuildData/build.db and b/build/Build/Intermediates.noindex/XCBuildData/build.db differ diff --git a/build/Build/Intermediates.noindex/XCBuildData/prior-build-descriptions.txt b/build/Build/Intermediates.noindex/XCBuildData/prior-build-descriptions.txt index d95da68..2d7a8bc 100644 --- a/build/Build/Intermediates.noindex/XCBuildData/prior-build-descriptions.txt +++ b/build/Build/Intermediates.noindex/XCBuildData/prior-build-descriptions.txt @@ -1,3 +1,4 @@ 01e80553e66def7e23d38bd3c911deaa fde3a409a1c7aaa1a5eda9dfaf1056e0 1c438df96f25657d77b9e55a3fe47133 +120e9a8ae12faa2f3ba3b63c6df49ba3 diff --git a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt index fad593b..0fb51df 100644 --- a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt +++ b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt @@ -1,3 +1,5 @@ /Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app /Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app /Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app +/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app +/Volumes/Developer/Applications/WorkbenchReplacement/build/Build/Products/Debug/WorkbenchReplacement.app diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/Info.plist b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/Info.plist index 98db43f..4b7b268 100644 --- a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/Info.plist +++ b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/Info.plist @@ -10,8 +10,6 @@ Workbench Replacement CFBundleExecutable WorkbenchReplacement - CFBundleIconFile - WorkbenchReplacement.icns CFBundleIdentifier net.absdev.WorkbenchReplacement CFBundleInfoDictionaryVersion diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement index dae912e..a8b9a09 100755 Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement differ diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib index 7bb8e82..6cb83e1 100755 Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement.debug.dylib differ diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib index 74a9339..d957c0e 100755 Binary files a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib and b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/__preview.dylib differ diff --git a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources index d1af3cd..6379196 100644 --- a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources +++ b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources @@ -19,19 +19,19 @@ cdhash - Ts5PCMroOdIOXrgimUvtGdRFzNg= + 1TJJDc7LhSK1AHyUbPhKlUy9S8A= requirement - cdhash H"4ece4f08cae839d20e5eb822994bed19d445ccd8" + identifier "WorkbenchReplacement.debug" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Mark Gregory (FLBRJ3BYDD)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */ MacOS/__preview.dylib cdhash - dKXeHBcR4xL0+Si9Vpmkik2aSbI= + eRYaNIE92/BHmGdKwbMscza9I3g= requirement - cdhash H"74a5de1c1711e312f4f928bd5699a48a4d9a49b2" + identifier "__preview" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Mark Gregory (FLBRJ3BYDD)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */ Resources/WorkbenchBrand.png diff --git a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo index c5da84f..86edb71 100644 Binary files a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo and b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/Project/arm64-apple-macos.swiftsourceinfo differ diff --git a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule index af174b1..3afe490 100644 Binary files a/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule and b/build/Build/Products/Debug/WorkbenchReplacement.swiftmodule/arm64-apple-macos.swiftmodule differ diff --git a/build/Index.noindex/DataStore/v5/units/App.o-OQXOM6J6ZNBE b/build/Index.noindex/DataStore/v5/units/App.o-OQXOM6J6ZNBE index 3580cff..2d16452 100644 Binary files a/build/Index.noindex/DataStore/v5/units/App.o-OQXOM6J6ZNBE and b/build/Index.noindex/DataStore/v5/units/App.o-OQXOM6J6ZNBE differ diff --git a/build/Index.noindex/DataStore/v5/units/DatabaseModel.o-1OFYNQPC4KXNF b/build/Index.noindex/DataStore/v5/units/DatabaseModel.o-1OFYNQPC4KXNF index b4c66f8..bb1d512 100644 Binary files a/build/Index.noindex/DataStore/v5/units/DatabaseModel.o-1OFYNQPC4KXNF and b/build/Index.noindex/DataStore/v5/units/DatabaseModel.o-1OFYNQPC4KXNF differ diff --git a/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 b/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 index 1168c51..01e2ccc 100644 Binary files a/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 and b/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 differ diff --git a/build/Index.noindex/DataStore/v5/units/MySQLProtocol.o-KLV83RQ8AC0B b/build/Index.noindex/DataStore/v5/units/MySQLProtocol.o-KLV83RQ8AC0B index d581c89..ff45d11 100644 Binary files a/build/Index.noindex/DataStore/v5/units/MySQLProtocol.o-KLV83RQ8AC0B and b/build/Index.noindex/DataStore/v5/units/MySQLProtocol.o-KLV83RQ8AC0B differ diff --git a/build/Logs/Build/78BF6F7C-BE7A-47AA-9498-A54A28B82425.xcactivitylog b/build/Logs/Build/78BF6F7C-BE7A-47AA-9498-A54A28B82425.xcactivitylog deleted file mode 100644 index b78c2a7..0000000 Binary files a/build/Logs/Build/78BF6F7C-BE7A-47AA-9498-A54A28B82425.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/7E3E8A73-55F0-4794-BE1D-8EBED17516D6.xcactivitylog b/build/Logs/Build/7E3E8A73-55F0-4794-BE1D-8EBED17516D6.xcactivitylog deleted file mode 100644 index 75a8f2e..0000000 Binary files a/build/Logs/Build/7E3E8A73-55F0-4794-BE1D-8EBED17516D6.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/81BE8778-FF76-42DF-8BEC-5179A17D2695.xcactivitylog b/build/Logs/Build/81BE8778-FF76-42DF-8BEC-5179A17D2695.xcactivitylog deleted file mode 100644 index ac5a7f4..0000000 Binary files a/build/Logs/Build/81BE8778-FF76-42DF-8BEC-5179A17D2695.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/B0859816-0F24-4E53-B015-2E939106D07B.xcactivitylog b/build/Logs/Build/B0859816-0F24-4E53-B015-2E939106D07B.xcactivitylog deleted file mode 100644 index 5ceca55..0000000 Binary files a/build/Logs/Build/B0859816-0F24-4E53-B015-2E939106D07B.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/C19F0156-EDB1-455B-90E1-2893AA66ADDB.xcactivitylog b/build/Logs/Build/C19F0156-EDB1-455B-90E1-2893AA66ADDB.xcactivitylog deleted file mode 100644 index ae8c140..0000000 Binary files a/build/Logs/Build/C19F0156-EDB1-455B-90E1-2893AA66ADDB.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6.xcactivitylog b/build/Logs/Build/E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6.xcactivitylog deleted file mode 100644 index a6f3f18..0000000 Binary files a/build/Logs/Build/E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6.xcactivitylog and /dev/null differ diff --git a/build/Logs/Build/LogStoreManifest.plist b/build/Logs/Build/LogStoreManifest.plist index c97916d..264ff7f 100644 --- a/build/Logs/Build/LogStoreManifest.plist +++ b/build/Logs/Build/LogStoreManifest.plist @@ -6,7 +6,7 @@ 13 logs - 78BF6F7C-BE7A-47AA-9498-A54A28B82425 + 5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61 className IDECommandLineBuildLog @@ -15,7 +15,7 @@ domainType Xcode.IDEActivityLogDomainType.BuildLog fileName - 78BF6F7C-BE7A-47AA-9498-A54A28B82425.xcactivitylog + 5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61.xcactivitylog hasPrimaryLog primaryObservable @@ -40,15 +40,15 @@ signature Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug timeStartedRecording - 813861179.38466096 + 813875595.87715495 timeStoppedRecording - 813861185.45915306 + 813875606.38803506 title Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug uniqueIdentifier - 78BF6F7C-BE7A-47AA-9498-A54A28B82425 + 5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61 - 7E3E8A73-55F0-4794-BE1D-8EBED17516D6 + 8EB6F71B-1109-492D-84B8-8C2FE5C14BB0 className IDECommandLineBuildLog @@ -57,7 +57,7 @@ domainType Xcode.IDEActivityLogDomainType.BuildLog fileName - 7E3E8A73-55F0-4794-BE1D-8EBED17516D6.xcactivitylog + 8EB6F71B-1109-492D-84B8-8C2FE5C14BB0.xcactivitylog hasPrimaryLog primaryObservable @@ -82,181 +82,13 @@ signature Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug timeStartedRecording - 813861040.02156603 + 813875432.68892801 timeStoppedRecording - 813861045.85164797 + 813875443.71130598 title Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug uniqueIdentifier - 7E3E8A73-55F0-4794-BE1D-8EBED17516D6 - - 81BE8778-FF76-42DF-8BEC-5179A17D2695 - - className - IDECommandLineBuildLog - documentTypeString - <nil> - domainType - Xcode.IDEActivityLogDomainType.BuildLog - fileName - 81BE8778-FF76-42DF-8BEC-5179A17D2695.xcactivitylog - hasPrimaryLog - - primaryObservable - - highLevelStatus - S - totalNumberOfAnalyzerIssues - 0 - totalNumberOfErrors - 0 - totalNumberOfTestFailures - 0 - totalNumberOfWarnings - 0 - - schemeIdentifier-containerName - WorkbenchReplacement project - schemeIdentifier-schemeName - WorkbenchReplacement - schemeIdentifier-sharedScheme - 1 - signature - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - timeStartedRecording - 813860932.82895195 - timeStoppedRecording - 813860938.50552499 - title - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - uniqueIdentifier - 81BE8778-FF76-42DF-8BEC-5179A17D2695 - - B0859816-0F24-4E53-B015-2E939106D07B - - className - IDECommandLineBuildLog - documentTypeString - <nil> - domainType - Xcode.IDEActivityLogDomainType.BuildLog - fileName - B0859816-0F24-4E53-B015-2E939106D07B.xcactivitylog - hasPrimaryLog - - primaryObservable - - highLevelStatus - S - totalNumberOfAnalyzerIssues - 0 - totalNumberOfErrors - 0 - totalNumberOfTestFailures - 0 - totalNumberOfWarnings - 0 - - schemeIdentifier-containerName - WorkbenchReplacement project - schemeIdentifier-schemeName - WorkbenchReplacement - schemeIdentifier-sharedScheme - 1 - signature - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - timeStartedRecording - 813860864.44753695 - timeStoppedRecording - 813860865.80887902 - title - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - uniqueIdentifier - B0859816-0F24-4E53-B015-2E939106D07B - - C19F0156-EDB1-455B-90E1-2893AA66ADDB - - className - IDECommandLineBuildLog - documentTypeString - <nil> - domainType - Xcode.IDEActivityLogDomainType.BuildLog - fileName - C19F0156-EDB1-455B-90E1-2893AA66ADDB.xcactivitylog - hasPrimaryLog - - primaryObservable - - highLevelStatus - S - totalNumberOfAnalyzerIssues - 0 - totalNumberOfErrors - 0 - totalNumberOfTestFailures - 0 - totalNumberOfWarnings - 0 - - schemeIdentifier-containerName - WorkbenchReplacement project - schemeIdentifier-schemeName - WorkbenchReplacement - schemeIdentifier-sharedScheme - 1 - signature - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - timeStartedRecording - 813860953.41163003 - timeStoppedRecording - 813860955.66303599 - title - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - uniqueIdentifier - C19F0156-EDB1-455B-90E1-2893AA66ADDB - - E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6 - - className - IDECommandLineBuildLog - documentTypeString - <nil> - domainType - Xcode.IDEActivityLogDomainType.BuildLog - fileName - E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6.xcactivitylog - hasPrimaryLog - - primaryObservable - - highLevelStatus - S - totalNumberOfAnalyzerIssues - 0 - totalNumberOfErrors - 0 - totalNumberOfTestFailures - 0 - totalNumberOfWarnings - 0 - - schemeIdentifier-containerName - WorkbenchReplacement project - schemeIdentifier-schemeName - WorkbenchReplacement - schemeIdentifier-sharedScheme - 1 - signature - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - timeStartedRecording - 813861120.32193995 - timeStoppedRecording - 813861120.77534199 - title - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - uniqueIdentifier - E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6 + 8EB6F71B-1109-492D-84B8-8C2FE5C14BB0 diff --git a/build/ModuleCache.noindex/Session.modulevalidation b/build/ModuleCache.noindex/Session.modulevalidation index 7e5154c..f419104 100644 --- a/build/ModuleCache.noindex/Session.modulevalidation +++ b/build/ModuleCache.noindex/Session.modulevalidation @@ -1 +1 @@ -1792168379.781714: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex") +1792182796.251258: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex") diff --git a/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache b/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache index 2514d0f..89e946b 100644 Binary files a/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache and b/build/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c0447231f6df4def33e022ae2eb8f782df1a.sdkstatcache differ diff --git a/build/info.plist b/build/info.plist index 4f382c5..d38f3ec 100644 --- a/build/info.plist +++ b/build/info.plist @@ -3,7 +3,7 @@ LastAccessedDate - 2026-10-16T16:32:59Z + 2026-10-16T20:33:16Z WorkspacePath /Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj