diff --git a/WorkbenchReplacement/MainView.swift b/WorkbenchReplacement/MainView.swift index 2b8492e..672d1c9 100644 --- a/WorkbenchReplacement/MainView.swift +++ b/WorkbenchReplacement/MainView.swift @@ -68,6 +68,11 @@ struct MainView: View { ) == "dark" ? .dark : .light ) .background(Color(nsColor: .windowBackgroundColor)) + .task { + if model.databases.isEmpty, model.selected != nil { + model.loadDatabases() + } + } .sheet(isPresented: $showingDatabaseTransfer) { WorkbenchDatabaseTransferView(model: model) } @@ -1572,6 +1577,9 @@ struct WorkbenchDatabaseTransferView: View { @State private var exportStructure = true @State private var exportData = true @State private var includeDrop = false + @State private var includeViews = true + @State private var availableViews: [String] = [] + @State private var selectedViews: Set = [] @State private var loadingTables = false @State private var availableDatabases: [String] = [] @State private var loadingDatabases = false @@ -1593,8 +1601,10 @@ struct WorkbenchDatabaseTransferView: View { .pickerStyle(.segmented) .padding(20) - Form { - Section("MySQL Connection") { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + GroupBox("MySQL Connection") { + VStack(alignment: .leading, spacing: 10) { LabeledContent("Connection") { Text(selectedProfile?.name ?? "Not selected") } @@ -1613,14 +1623,18 @@ struct WorkbenchDatabaseTransferView: View { } .disabled(loadingDatabases || selectedProfile == nil) } + } } if selectedMode == 0 { - Section("Export Options") { + GroupBox("Export Options") { + VStack(alignment: .leading, spacing: 10) { Toggle("Table structure", isOn: $exportStructure) Toggle("Table data", isOn: $exportData) Toggle("Add DROP TABLE IF EXISTS", isOn: $includeDrop) .disabled(!exportStructure) + Toggle("Include views (definitions)", isOn: $includeViews) + .disabled(!exportStructure) HStack { Text("Tables (\(selectedTables.count) selected)") Spacer() @@ -1630,25 +1644,43 @@ struct WorkbenchDatabaseTransferView: View { .disabled(loadingTables) } if loadingTables { ProgressView("Loading tables…") } - ScrollView { - LazyVStack(alignment: .leading) { - ForEach(availableTables, id: \.self) { table in - Toggle(table, isOn: Binding( - get: { selectedTables.contains(table) }, - set: { checked in - if checked { selectedTables.insert(table) } - else { selectedTables.remove(table) } - } - )) + if availableTables.isEmpty && !loadingTables { + Text("No tables found. Select a database or refresh the list.") + .foregroundStyle(.secondary) + } + ForEach(availableTables, id: \.self) { table in + Toggle(table, isOn: Binding( + get: { selectedTables.contains(table) }, + set: { checked in + if checked { selectedTables.insert(table) } + else { selectedTables.remove(table) } } + )) + } + if includeViews && exportStructure { + HStack { + Text("Views (\(selectedViews.count) selected)") + Spacer() + Button("All") { selectedViews = Set(availableViews) } + Button("None") { selectedViews.removeAll() } + } + ForEach(availableViews, id: \.self) { view in + Toggle(view, isOn: Binding( + get: { selectedViews.contains(view) }, + set: { checked in + if checked { selectedViews.insert(view) } + else { selectedViews.remove(view) } + } + )) } } - .frame(maxHeight: 180) - Text("Exports base tables with batched INSERT statements. Views, triggers, routines and transaction-consistent snapshots are not included.") + Text("Exports base tables and selected views. Triggers, routines, consistent snapshots and guaranteed row ordering are not yet supported.") .font(.caption).foregroundStyle(.secondary) } + } } else { - Section("Import Options") { + GroupBox("Import Options") { + VStack(alignment: .leading, spacing: 10) { Text("Import SQL statements into the selected database.") .foregroundStyle(.secondary) @@ -1656,9 +1688,11 @@ struct WorkbenchDatabaseTransferView: View { .font(.caption) .foregroundStyle(.secondary) } + } } - Section("Progress") { + GroupBox("Progress") { + VStack(alignment: .leading, spacing: 10) { ProgressView(value: progress) .frame(maxWidth: .infinity) @@ -1666,9 +1700,12 @@ struct WorkbenchDatabaseTransferView: View { .font(.caption) .foregroundStyle(.secondary) .textSelection(.enabled) + } + } } } - .formStyle(.grouped) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(20) Divider() @@ -1701,7 +1738,7 @@ struct WorkbenchDatabaseTransferView: View { .disabled( selectedProfile == nil || database.isEmpty || - (selectedMode == 0 && (selectedTables.isEmpty || (!exportStructure && !exportData))) + (selectedMode == 0 && ((!exportStructure && !exportData) || (selectedTables.isEmpty && !(exportStructure && includeViews && !selectedViews.isEmpty)))) ) } } @@ -1719,6 +1756,10 @@ struct WorkbenchDatabaseTransferView: View { await loadTransferDatabases() } .task(id: database) { + availableTables = [] + selectedTables = [] + availableViews = [] + selectedViews = [] if !database.isEmpty { await loadTables() } } .confirmationDialog( @@ -1846,7 +1887,11 @@ struct WorkbenchDatabaseTransferView: View { @MainActor private func loadTables() async { - guard !database.isEmpty else { availableTables = []; selectedTables = []; return } + guard !database.isEmpty else { + availableTables = []; selectedTables = [] + availableViews = []; selectedViews = [] + return + } loadingTables = true defer { loadingTables = false } do { @@ -1855,10 +1900,16 @@ struct WorkbenchDatabaseTransferView: View { row.count > 1 && row[1].uppercased() == "BASE TABLE" ? row[0] : nil } selectedTables = Set(availableTables) + availableViews = rows.rows.compactMap { row in + row.count > 1 && row[1].uppercased() == "VIEW" ? row[0] : nil + } + selectedViews = Set(availableViews) } catch { status = "Cannot list tables: \(error.localizedDescription)" availableTables = [] selectedTables = [] + availableViews = [] + selectedViews = [] } } @@ -1866,7 +1917,11 @@ struct WorkbenchDatabaseTransferView: View { // preserved rather than reconstructed from QueryResult's String values. @MainActor private func exportSQL(to url: URL) async { - guard !selectedTables.isEmpty, exportStructure || exportData else { return } + guard exportStructure || exportData else { return } + let views = exportStructure && includeViews + ? availableViews.filter { selectedViews.contains($0) } + : [] + guard !selectedTables.isEmpty || !views.isEmpty else { return } isWorking = true progress = 0 let tables = availableTables.filter { selectedTables.contains($0) } @@ -1937,7 +1992,23 @@ struct WorkbenchDatabaseTransferView: View { if batch.rows.count < 250 { break } } } - progress = Double(index + 1) / Double(tables.count) + progress = Double(index + 1) / Double(max(tables.count + views.count, 1)) + } + // Views are exported after base tables so dependencies exist on restore. + // The server's SHOW CREATE VIEW response may contain a DEFINER clause; + // importing under a different MySQL account can require extra privileges. + for (index, view) in views.enumerated() { + try Task.checkCancellation() + let qualified = "\(db).\(quoteIdentifier(view))" + status = "Exporting view \(view)" + let definition = try await execute("SHOW CREATE VIEW \(qualified)") + guard let row = definition.rows.first, row.count > 1 else { + throw WorkbenchTransferError.message("Missing CREATE VIEW for \(view)") + } + try write("\n-- View \(qualified)\n") + if includeDrop { try write("DROP VIEW IF EXISTS \(qualified);\n") } + try write(row[1] + ";\n") + progress = Double(tables.count + index + 1) / Double(max(tables.count + views.count, 1)) } try Task.checkCancellation() try handle?.close() @@ -1948,7 +2019,7 @@ struct WorkbenchDatabaseTransferView: View { try FileManager.default.moveItem(at: tempURL, to: url) } progress = 1 - status = "Export complete: \(tables.count) tables" + status = "Export complete: \(tables.count) tables, \(views.count) views" } catch is CancellationError { status = "Export cancelled; no final backup was written" } catch { 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 cbf994d..ebdef0a 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 208f643..905f9e6 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 @@ -7,7 +7,7 @@ "key": "MySQL Workbench", "location": { "startingColumn": 18, - "startingLine": 93 + "startingLine": 98 } }, { @@ -15,7 +15,7 @@ "key": "Navigator", "location": { "startingColumn": 20, - "startingLine": 182 + "startingLine": 187 } }, { @@ -23,7 +23,7 @@ "key": "Administration", "location": { "startingColumn": 22, - "startingLine": 183 + "startingLine": 188 } }, { @@ -31,7 +31,7 @@ "key": "Schemas", "location": { "startingColumn": 22, - "startingLine": 184 + "startingLine": 189 } }, { @@ -39,7 +39,7 @@ "key": "SCHEMAS", "location": { "startingColumn": 22, - "startingLine": 204 + "startingLine": 209 } }, { @@ -47,7 +47,7 @@ "key": "Edit Connection", "location": { "startingColumn": 36, - "startingLine": 258 + "startingLine": 263 } }, { @@ -55,7 +55,7 @@ "key": "Set as Default Schema", "location": { "startingColumn": 24, - "startingLine": 375 + "startingLine": 380 } }, { @@ -63,7 +63,7 @@ "key": "Refresh Tables", "location": { "startingColumn": 24, - "startingLine": 379 + "startingLine": 384 } }, { @@ -71,7 +71,7 @@ "key": "Load Tables", "location": { "startingColumn": 28, - "startingLine": 449 + "startingLine": 454 } }, { @@ -79,7 +79,7 @@ "key": "Tables", "location": { "startingColumn": 22, - "startingLine": 422 + "startingLine": 427 } }, { @@ -87,7 +87,7 @@ "key": "Select First 100 Rows", "location": { "startingColumn": 20, - "startingLine": 505 + "startingLine": 510 } }, { @@ -95,7 +95,7 @@ "key": "New Query Tab", "location": { "startingColumn": 19, - "startingLine": 626 + "startingLine": 631 } }, { @@ -103,7 +103,7 @@ "key": "Default Schema:", "location": { "startingColumn": 18, - "startingLine": 651 + "startingLine": 656 } }, { @@ -111,7 +111,7 @@ "key": "SQL Editor", "location": { "startingColumn": 18, - "startingLine": 661 + "startingLine": 666 } }, { @@ -119,7 +119,7 @@ "key": "Execute SQL", "location": { "startingColumn": 19, - "startingLine": 639 + "startingLine": 644 } }, { @@ -127,7 +127,7 @@ "key": "Format SQL", "location": { "startingColumn": 19, - "startingLine": 646 + "startingLine": 651 } }, { @@ -135,7 +135,7 @@ "key": "%lld", "location": { "startingColumn": 26, - "startingLine": 701 + "startingLine": 706 } }, { @@ -143,7 +143,7 @@ "key": "Result Grid", "location": { "startingColumn": 22, - "startingLine": 733 + "startingLine": 738 } }, { @@ -151,7 +151,7 @@ "key": "No query results", "location": { "startingColumn": 26, - "startingLine": 751 + "startingLine": 756 } }, { @@ -159,7 +159,7 @@ "key": "Action Output", "location": { "startingColumn": 22, - "startingLine": 773 + "startingLine": 778 } }, { @@ -167,7 +167,7 @@ "key": "UTF-8", "location": { "startingColumn": 18, - "startingLine": 848 + "startingLine": 853 } }, { @@ -175,7 +175,7 @@ "key": "Connection Settings", "location": { "startingColumn": 18, - "startingLine": 1023 + "startingLine": 1028 } }, { @@ -183,7 +183,7 @@ "key": "Connection Name", "location": { "startingColumn": 21, - "startingLine": 1028 + "startingLine": 1033 } }, { @@ -191,7 +191,7 @@ "key": "Hostname", "location": { "startingColumn": 21, - "startingLine": 1033 + "startingLine": 1038 } }, { @@ -199,7 +199,7 @@ "key": "Port", "location": { "startingColumn": 21, - "startingLine": 1038 + "startingLine": 1043 } }, { @@ -207,7 +207,7 @@ "key": "Username", "location": { "startingColumn": 21, - "startingLine": 1044 + "startingLine": 1049 } }, { @@ -215,7 +215,7 @@ "key": "Password (macOS Keychain)", "location": { "startingColumn": 21, - "startingLine": 1049 + "startingLine": 1054 } }, { @@ -223,7 +223,7 @@ "key": "Default Schema", "location": { "startingColumn": 21, - "startingLine": 1054 + "startingLine": 1059 } }, { @@ -231,7 +231,7 @@ "key": "Cancel", "location": { "startingColumn": 24, - "startingLine": 1062 + "startingLine": 1067 } }, { @@ -239,7 +239,7 @@ "key": "Save", "location": { "startingColumn": 24, - "startingLine": 1066 + "startingLine": 1071 } }, { @@ -247,7 +247,7 @@ "key": "The server did not return any columns.", "location": { "startingColumn": 25, - "startingLine": 1388 + "startingLine": 1393 } }, { @@ -255,7 +255,7 @@ "key": "Loading %@…", "location": { "startingColumn": 30, - "startingLine": 1366 + "startingLine": 1371 } }, { @@ -263,7 +263,7 @@ "key": "No Data", "location": { "startingColumn": 21, - "startingLine": 1385 + "startingLine": 1390 } }, { @@ -271,7 +271,7 @@ "key": "Unable to Load %@", "location": { "startingColumn": 25, - "startingLine": 1372 + "startingLine": 1377 } }, { @@ -279,7 +279,7 @@ "key": "Retry", "location": { "startingColumn": 28, - "startingLine": 1378 + "startingLine": 1383 } }, { @@ -287,7 +287,7 @@ "key": "Refresh", "location": { "startingColumn": 23, - "startingLine": 1427 + "startingLine": 1432 } }, { @@ -295,7 +295,7 @@ "key": "SQL Editor", "location": { "startingColumn": 23, - "startingLine": 1434 + "startingLine": 1439 } }, { @@ -303,7 +303,7 @@ "key": "Not loaded", "location": { "startingColumn": 22, - "startingLine": 1512 + "startingLine": 1517 } }, { @@ -311,7 +311,7 @@ "key": "Updated %@", "location": { "startingColumn": 21, - "startingLine": 1509 + "startingLine": 1514 } }, { @@ -319,7 +319,7 @@ "key": "%lld rows", "location": { "startingColumn": 18, - "startingLine": 1517 + "startingLine": 1522 } }, { @@ -327,7 +327,7 @@ "key": "Import SQL into %@?", "location": { "startingColumn": 13, - "startingLine": 1725 + "startingLine": 1766 } }, { @@ -335,7 +335,7 @@ "key": "Operation", "location": { "startingColumn": 20, - "startingLine": 1589 + "startingLine": 1597 } }, { @@ -343,7 +343,7 @@ "key": "Data Export", "location": { "startingColumn": 22, - "startingLine": 1590 + "startingLine": 1598 } }, { @@ -351,39 +351,39 @@ "key": "Data Import / Restore", "location": { "startingColumn": 22, - "startingLine": 1591 + "startingLine": 1599 } }, { "comment": "", "key": "MySQL Connection", "location": { - "startingColumn": 25, - "startingLine": 1597 + "startingColumn": 26, + "startingLine": 1606 } }, { "comment": "", "key": "Export Options", "location": { - "startingColumn": 29, - "startingLine": 1619 + "startingColumn": 30, + "startingLine": 1630 } }, { "comment": "", "key": "Import Options", "location": { - "startingColumn": 29, - "startingLine": 1651 + "startingColumn": 30, + "startingLine": 1682 } }, { "comment": "", "key": "Progress", "location": { - "startingColumn": 25, - "startingLine": 1661 + "startingColumn": 26, + "startingLine": 1694 } }, { @@ -391,7 +391,7 @@ "key": "Connection", "location": { "startingColumn": 36, - "startingLine": 1598 + "startingLine": 1608 } }, { @@ -399,7 +399,7 @@ "key": "Database", "location": { "startingColumn": 28, - "startingLine": 1602 + "startingLine": 1612 } }, { @@ -407,7 +407,7 @@ "key": "Select Database", "location": { "startingColumn": 30, - "startingLine": 1603 + "startingLine": 1613 } }, { @@ -415,15 +415,23 @@ "key": "Refresh Databases", "location": { "startingColumn": 32, - "startingLine": 1611 + "startingLine": 1621 } }, { "comment": "", - "key": "Exports base tables with batched INSERT statements. Views, triggers, routines and transaction-consistent snapshots are not included.", + "key": "No tables found. Select a database or refresh the list.", + "location": { + "startingColumn": 34, + "startingLine": 1648 + } + }, + { + "comment": "", + "key": "Exports base tables and selected views. Triggers, routines, consistent snapshots and guaranteed row ordering are not yet supported.", "location": { "startingColumn": 30, - "startingLine": 1647 + "startingLine": 1677 } }, { @@ -431,7 +439,7 @@ "key": "Table structure", "location": { "startingColumn": 32, - "startingLine": 1620 + "startingLine": 1632 } }, { @@ -439,7 +447,7 @@ "key": "Table data", "location": { "startingColumn": 32, - "startingLine": 1621 + "startingLine": 1633 } }, { @@ -447,7 +455,15 @@ "key": "Add DROP TABLE IF EXISTS", "location": { "startingColumn": 32, - "startingLine": 1622 + "startingLine": 1634 + } + }, + { + "comment": "", + "key": "Include views (definitions)", + "location": { + "startingColumn": 32, + "startingLine": 1636 } }, { @@ -455,7 +471,7 @@ "key": "Loading tables…", "location": { "startingColumn": 57, - "startingLine": 1632 + "startingLine": 1646 } }, { @@ -463,7 +479,7 @@ "key": "Tables (%lld selected)", "location": { "startingColumn": 34, - "startingLine": 1625 + "startingLine": 1639 } }, { @@ -471,7 +487,7 @@ "key": "All", "location": { "startingColumn": 36, - "startingLine": 1627 + "startingLine": 1641 } }, { @@ -479,7 +495,7 @@ "key": "None", "location": { "startingColumn": 36, - "startingLine": 1628 + "startingLine": 1642 } }, { @@ -487,7 +503,31 @@ "key": "Refresh", "location": { "startingColumn": 36, - "startingLine": 1629 + "startingLine": 1643 + } + }, + { + "comment": "", + "key": "Views (%lld selected)", + "location": { + "startingColumn": 38, + "startingLine": 1662 + } + }, + { + "comment": "", + "key": "All", + "location": { + "startingColumn": 40, + "startingLine": 1664 + } + }, + { + "comment": "", + "key": "None", + "location": { + "startingColumn": 40, + "startingLine": 1665 } }, { @@ -495,7 +535,7 @@ "key": "Import SQL statements into the selected database.", "location": { "startingColumn": 30, - "startingLine": 1652 + "startingLine": 1684 } }, { @@ -503,7 +543,7 @@ "key": "Supports ordinary SQL statements. Dumps using custom DELIMITER directives or stored routines are not supported yet.", "location": { "startingColumn": 30, - "startingLine": 1655 + "startingLine": 1687 } }, { @@ -511,7 +551,7 @@ "key": "Close", "location": { "startingColumn": 24, - "startingLine": 1676 + "startingLine": 1713 } }, { @@ -519,7 +559,7 @@ "key": "Cancel", "location": { "startingColumn": 28, - "startingLine": 1684 + "startingLine": 1721 } }, { @@ -527,7 +567,7 @@ "key": "Export SQL…", "location": { "startingColumn": 31, - "startingLine": 1691 + "startingLine": 1728 } }, { @@ -535,7 +575,7 @@ "key": "Import SQL…", "location": { "startingColumn": 31, - "startingLine": 1692 + "startingLine": 1729 } }, { @@ -543,7 +583,7 @@ "key": "Import SQL", "location": { "startingColumn": 20, - "startingLine": 1728 + "startingLine": 1769 } }, { @@ -551,7 +591,7 @@ "key": "Cancel", "location": { "startingColumn": 20, - "startingLine": 1736 + "startingLine": 1777 } }, { @@ -559,7 +599,7 @@ "key": "SQL files can modify or delete existing database objects and data. Ensure you have a backup before continuing.", "location": { "startingColumn": 17, - "startingLine": 1741 + "startingLine": 1782 } }, { @@ -567,7 +607,7 @@ "key": "Database Import / Export", "location": { "startingColumn": 22, - "startingLine": 1753 + "startingLine": 1794 } }, { @@ -575,7 +615,7 @@ "key": "Built-in native MySQL database tools", "location": { "startingColumn": 22, - "startingLine": 1756 + "startingLine": 1797 } } ] 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 601d65c..f639971 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/WorkbenchReplacement-primary.priors b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/WorkbenchReplacement-primary.priors index a5e9cc0..823ed6e 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 c117d65..f7ba510 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 867aa0f..3a3b0f9 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 e6865a7..5516637 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/registered-launchservices.txt b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt index 7156a99..560a65a 100644 --- a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt +++ b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt @@ -7,3 +7,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/MacOS/WorkbenchReplacement b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/MacOS/WorkbenchReplacement index 1746f6f..2e2183a 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 d47457c..eb4ebe4 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 b8cda62..2e11454 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 1d1d6e6..0dd69ec 100644 --- a/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources +++ b/build/Build/Products/Debug/WorkbenchReplacement.app/Contents/_CodeSignature/CodeResources @@ -19,7 +19,7 @@ cdhash - kACWojMyCPE6G6Uw22tGzRrP2x4= + Iv3+eGn5ABjizzuIQDv3FNnVrWE= requirement 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 */ 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 867aa0f..3a3b0f9 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 c117d65..f7ba510 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/MainView.o-CNVK7PE7JUX3 b/build/Index.noindex/DataStore/v5/units/MainView.o-CNVK7PE7JUX3 index 1ccd257..cb49d78 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/Logs/Build/LogStoreManifest.plist b/build/Logs/Build/LogStoreManifest.plist index 15d266a..4dc1d83 100644 --- a/build/Logs/Build/LogStoreManifest.plist +++ b/build/Logs/Build/LogStoreManifest.plist @@ -48,7 +48,7 @@ uniqueIdentifier 087CD1E0-7E94-4934-A62E-C6C070CD1577 - AD44F407-7FE5-46AE-A82F-8FAC1CA2720B + 20B4B0A0-41A0-44A0-BA02-3E5707BABE60 className IDECommandLineBuildLog @@ -57,7 +57,7 @@ domainType Xcode.IDEActivityLogDomainType.BuildLog fileName - AD44F407-7FE5-46AE-A82F-8FAC1CA2720B.xcactivitylog + 20B4B0A0-41A0-44A0-BA02-3E5707BABE60.xcactivitylog hasPrimaryLog primaryObservable @@ -82,13 +82,55 @@ signature Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug timeStartedRecording - 813875703.86912405 + 813876442.84578598 timeStoppedRecording - 813875715.47182798 + 813876454.95874095 title Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug uniqueIdentifier - AD44F407-7FE5-46AE-A82F-8FAC1CA2720B + 20B4B0A0-41A0-44A0-BA02-3E5707BABE60 + + 705B952B-2A37-40D9-B731-8E2290C15462 + + className + IDECommandLineBuildLog + documentTypeString + <nil> + domainType + Xcode.IDEActivityLogDomainType.BuildLog + fileName + 705B952B-2A37-40D9-B731-8E2290C15462.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 + 813876591.82079995 + timeStoppedRecording + 813876604.10285401 + title + Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug + uniqueIdentifier + 705B952B-2A37-40D9-B731-8E2290C15462 AF582207-87B3-4A2E-A532-DA0FD8F61FBD @@ -132,48 +174,6 @@ uniqueIdentifier AF582207-87B3-4A2E-A532-DA0FD8F61FBD - BA4E5983-8DAA-49CA-A677-11E73E67F0B0 - - className - IDECommandLineBuildLog - documentTypeString - <nil> - domainType - Xcode.IDEActivityLogDomainType.BuildLog - fileName - BA4E5983-8DAA-49CA-A677-11E73E67F0B0.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 - 813875867.553792 - timeStoppedRecording - 813875879.94755697 - title - Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug - uniqueIdentifier - BA4E5983-8DAA-49CA-A677-11E73E67F0B0 - diff --git a/build/ModuleCache.noindex/Session.modulevalidation b/build/ModuleCache.noindex/Session.modulevalidation index 625956a..6321cee 100644 --- a/build/ModuleCache.noindex/Session.modulevalidation +++ b/build/ModuleCache.noindex/Session.modulevalidation @@ -1 +1 @@ -1792183470.9957151: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex") +1792183792.223736: 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 17a2acf..1d39c13 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 c688a7c..5776dbb 100644 --- a/build/info.plist +++ b/build/info.plist @@ -3,7 +3,7 @@ LastAccessedDate - 2026-10-16T20:44:30Z + 2026-10-16T20:49:52Z WorkspacePath /Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj