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