diff --git a/WorkbenchReplacement/MainView.swift b/WorkbenchReplacement/MainView.swift index 66433dc..fa54828 100644 --- a/WorkbenchReplacement/MainView.swift +++ b/WorkbenchReplacement/MainView.swift @@ -33,6 +33,10 @@ struct MainView: View { @State private var selectedTableName: String? = nil @State private var outputExpanded = true + @State private var navigatorMode = 0 + @State private var administrationPage: WorkbenchAdminPage? = nil + + var body: some View { VStack(spacing: 0) { mainToolbar @@ -163,8 +167,27 @@ struct MainView: View { private var navigator: some View { VStack(spacing: 0) { - sectionHeader("NAVIGATOR") + Picker("Navigator", selection: $navigatorMode) { + Text("Administration").tag(0) + Text("Schemas").tag(1) + } + .pickerStyle(.segmented) + .labelsHidden() + .padding(8) + if navigatorMode == 0 { + administrationNavigator + } else { + schemasNavigator + } + + + } + .background(WB.sidebar) + } + + private var schemasNavigator: some View { + VStack(spacing: 0) { HStack { Text("SCHEMAS") .font(.system(size: 11, weight: .bold)) @@ -230,7 +253,67 @@ struct MainView: View { } .frame(height: 125) } - .background(WB.sidebar) + } + + private var administrationNavigator: some View { + ScrollView { + VStack(alignment: .leading, spacing: 4) { + administrationSection( + "MANAGEMENT", + pages: [ + .serverStatus, + .clientConnections, + .users, + .variables + ] + ) + + administrationSection( + "PERFORMANCE", + pages: [ + .dashboard, + .performanceReports, + .performanceSchema + ] + ) + } + .padding(8) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + + private func administrationSection( + _ title: String, + pages: [WorkbenchAdminPage] + ) -> some View { + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.system(size: 11, weight: .bold)) + .foregroundStyle(.secondary) + .padding(.top, 12) + .padding(.bottom, 4) + + ForEach(pages) { page in + Button { + administrationPage = page + } label: { + Label(page.rawValue, systemImage: page.icon) + .frame( + maxWidth: .infinity, + alignment: .leading + ) + .padding(.horizontal, 8) + .padding(.vertical, 7) + .background( + administrationPage == page + ? Color.accentColor.opacity(0.18) + : Color.clear + ) + .clipShape(RoundedRectangle(cornerRadius: 5)) + } + .buttonStyle(.plain) + } + } } @@ -444,6 +527,22 @@ struct MainView: View { // MARK: - Workspace private var workspace: some View { + Group { + if let page = administrationPage { + WorkbenchAdministrationView( + page: page, + profile: model.selected + ) { + administrationPage = nil + navigatorMode = 1 + } + } else { + sqlWorkspace + } + } + } + + private var sqlWorkspace: some View { VStack(spacing: 0) { queryTabBar @@ -1143,3 +1242,300 @@ struct NativeResultGrid: NSViewRepresentable { } } } + + +// MARK: - MySQL Administration + +enum WorkbenchAdminPage: String, CaseIterable, Identifiable { + case serverStatus = "Server Status" + case clientConnections = "Client Connections" + case users = "Users and Privileges" + case variables = "Status and System Variables" + case dashboard = "Dashboard" + case performanceReports = "Performance Reports" + case performanceSchema = "Performance Schema Setup" + + var id: String { rawValue } + + var icon: String { + switch self { + case .serverStatus: return "server.rack" + case .clientConnections: return "person.2" + case .users: return "person.crop.circle.badge.checkmark" + case .variables: return "slider.horizontal.3" + case .dashboard: return "chart.xyaxis.line" + case .performanceReports: return "chart.bar.xaxis" + case .performanceSchema: return "gauge.with.dots.needle.67percent" + } + } + + var statement: String { + switch self { + case .serverStatus: + return """ + SHOW GLOBAL STATUS WHERE Variable_name IN ( + 'Uptime', + 'Threads_connected', + 'Threads_running', + 'Questions', + 'Queries', + 'Connections', + 'Bytes_received', + 'Bytes_sent' + ) + """ + + case .clientConnections: + return "SHOW FULL PROCESSLIST" + + case .users: + return """ + SELECT User, Host, plugin, account_locked + FROM mysql.user + ORDER BY User, Host + """ + + case .variables: + return "SHOW GLOBAL VARIABLES" + + case .dashboard: + return """ + SHOW GLOBAL STATUS WHERE Variable_name IN ( + 'Uptime', + 'Connections', + 'Threads_connected', + 'Threads_running', + 'Questions', + 'Queries', + 'Bytes_received', + 'Bytes_sent', + 'Innodb_buffer_pool_reads', + 'Innodb_buffer_pool_read_requests', + 'Slow_queries' + ) + """ + + case .performanceReports: + return """ + SELECT * + FROM sys.statement_analysis + LIMIT 100 + """ + + case .performanceSchema: + return """ + SELECT NAME, ENABLED, TIMED + FROM performance_schema.setup_instruments + LIMIT 250 + """ + } + } +} + +struct WorkbenchAdministrationView: View { + let page: WorkbenchAdminPage + let profile: ConnectionProfile? + let close: () -> Void + + @State private var result = QueryResult() + @State private var loading = false + @State private var errorMessage: String? + @State private var lastUpdated: Date? + + var body: some View { + VStack(spacing: 0) { + header + + Divider() + + if loading && result.columns.isEmpty { + Spacer() + + ProgressView("Loading \(page.rawValue)…") + + Spacer() + } else if let errorMessage { + ContentUnavailableView { + Label( + "Unable to Load \(page.rawValue)", + systemImage: "exclamationmark.triangle" + ) + } description: { + Text(errorMessage) + } actions: { + Button("Retry") { + Task { await refresh() } + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else if result.columns.isEmpty { + ContentUnavailableView( + "No Data", + systemImage: "tablecells", + description: Text( + "The server did not return any columns." + ) + ) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else { + resultContent + } + + Divider() + + footer + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .task(id: "\(page.id)-\(profile?.id.uuidString ?? "")") { + await refresh() + } + } + + private var header: some View { + HStack(spacing: 14) { + Image(systemName: page.icon) + .font(.system(size: 27)) + .foregroundStyle(.blue) + .frame(width: 40) + + VStack(alignment: .leading, spacing: 3) { + Text(profile?.name ?? "No Connection") + .font(.caption) + .foregroundStyle(.secondary) + + Text(page.rawValue) + .font(.system(size: 22, weight: .semibold)) + } + + Spacer() + + Button { + Task { await refresh() } + } label: { + Label("Refresh", systemImage: "arrow.clockwise") + } + .disabled(loading) + + Button { + close() + } label: { + Label("SQL Editor", systemImage: "chevron.left.forwardslash.chevron.right") + } + } + .padding(18) + } + + @ViewBuilder + private var resultContent: some View { + if page == .dashboard || page == .serverStatus { + ScrollView { + LazyVGrid( + columns: [ + GridItem(.adaptive(minimum: 180), spacing: 12) + ], + spacing: 12 + ) { + ForEach(result.rows.indices, id: \.self) { index in + let row = result.rows[index] + + if row.count >= 2 { + VStack(alignment: .leading, spacing: 10) { + Text( + row[0] + .replacingOccurrences( + of: "_", + with: " " + ) + ) + .font(.caption) + .foregroundStyle(.secondary) + + Text(row[1]) + .font( + .system( + size: 23, + weight: .semibold, + design: .rounded + ) + ) + .lineLimit(1) + .minimumScaleFactor(0.65) + } + .frame( + maxWidth: .infinity, + minHeight: 90, + alignment: .leading + ) + .padding(14) + .background( + Color(nsColor: .controlBackgroundColor) + ) + .clipShape( + RoundedRectangle(cornerRadius: 10) + ) + } + } + } + .padding(18) + } + } else { + NativeResultGrid( + columns: result.columns, + rows: result.rows + ) + .frame( + maxWidth: .infinity, + maxHeight: .infinity + ) + } + } + + private var footer: some View { + HStack { + if let lastUpdated { + Text( + "Updated \(lastUpdated.formatted(date: .omitted, time: .standard))" + ) + } else { + Text("Not loaded") + } + + Spacer() + + Text("\(result.rows.count) rows") + } + .font(.caption) + .foregroundStyle(.secondary) + .padding(.horizontal, 16) + .frame(height: 30) + } + + @MainActor + private func refresh() async { + guard let profile else { + errorMessage = "Select a MySQL connection first." + return + } + + loading = true + errorMessage = nil + + defer { + loading = false + } + + do { + let response = try await NativeMySQLRunner.run( + profile: profile, + database: "", + password: PasswordStore.read(profile.id), + sql: page.statement + ) + + result = response + lastUpdated = Date() + } catch { + errorMessage = error.localizedDescription + } + } +} 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 69bb6d7..8d2c075 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.swiftdeps b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/App.swiftdeps index 98dbf47..6d6cb18 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/MainView.o b/build/Build/Intermediates.noindex/WorkbenchReplacement.build/Debug/WorkbenchReplacement.build/Objects-normal/arm64/MainView.o index c5fca8a..1072684 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 1f714ff..2081851 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,31 @@ "key": "MySQL Workbench", "location": { "startingColumn": 18, - "startingLine": 84 + "startingLine": 88 + } + }, + { + "comment": "", + "key": "Navigator", + "location": { + "startingColumn": 20, + "startingLine": 170 + } + }, + { + "comment": "", + "key": "Administration", + "location": { + "startingColumn": 22, + "startingLine": 171 + } + }, + { + "comment": "", + "key": "Schemas", + "location": { + "startingColumn": 22, + "startingLine": 172 } }, { @@ -15,7 +39,7 @@ "key": "SCHEMAS", "location": { "startingColumn": 22, - "startingLine": 169 + "startingLine": 192 } }, { @@ -23,7 +47,7 @@ "key": "Edit Connection", "location": { "startingColumn": 36, - "startingLine": 223 + "startingLine": 246 } }, { @@ -31,7 +55,7 @@ "key": "Set as Default Schema", "location": { "startingColumn": 24, - "startingLine": 280 + "startingLine": 363 } }, { @@ -39,7 +63,7 @@ "key": "Refresh Tables", "location": { "startingColumn": 24, - "startingLine": 284 + "startingLine": 367 } }, { @@ -47,7 +71,7 @@ "key": "Load Tables", "location": { "startingColumn": 28, - "startingLine": 354 + "startingLine": 437 } }, { @@ -55,7 +79,7 @@ "key": "Tables", "location": { "startingColumn": 22, - "startingLine": 327 + "startingLine": 410 } }, { @@ -63,7 +87,7 @@ "key": "Select First 100 Rows", "location": { "startingColumn": 20, - "startingLine": 410 + "startingLine": 493 } }, { @@ -71,7 +95,7 @@ "key": "New Query Tab", "location": { "startingColumn": 19, - "startingLine": 515 + "startingLine": 614 } }, { @@ -79,7 +103,7 @@ "key": "Default Schema:", "location": { "startingColumn": 18, - "startingLine": 540 + "startingLine": 639 } }, { @@ -87,7 +111,7 @@ "key": "SQL Editor", "location": { "startingColumn": 18, - "startingLine": 550 + "startingLine": 649 } }, { @@ -95,7 +119,7 @@ "key": "Execute SQL", "location": { "startingColumn": 19, - "startingLine": 528 + "startingLine": 627 } }, { @@ -103,7 +127,7 @@ "key": "Format SQL", "location": { "startingColumn": 19, - "startingLine": 535 + "startingLine": 634 } }, { @@ -111,7 +135,7 @@ "key": "%lld", "location": { "startingColumn": 26, - "startingLine": 590 + "startingLine": 689 } }, { @@ -119,7 +143,7 @@ "key": "Result Grid", "location": { "startingColumn": 22, - "startingLine": 622 + "startingLine": 721 } }, { @@ -127,7 +151,7 @@ "key": "No query results", "location": { "startingColumn": 26, - "startingLine": 640 + "startingLine": 739 } }, { @@ -135,7 +159,7 @@ "key": "Action Output", "location": { "startingColumn": 22, - "startingLine": 662 + "startingLine": 761 } }, { @@ -143,7 +167,7 @@ "key": "UTF-8", "location": { "startingColumn": 18, - "startingLine": 737 + "startingLine": 836 } }, { @@ -151,7 +175,7 @@ "key": "Connection Settings", "location": { "startingColumn": 18, - "startingLine": 912 + "startingLine": 1011 } }, { @@ -159,7 +183,7 @@ "key": "Connection Name", "location": { "startingColumn": 21, - "startingLine": 917 + "startingLine": 1016 } }, { @@ -167,7 +191,7 @@ "key": "Hostname", "location": { "startingColumn": 21, - "startingLine": 922 + "startingLine": 1021 } }, { @@ -175,7 +199,7 @@ "key": "Port", "location": { "startingColumn": 21, - "startingLine": 927 + "startingLine": 1026 } }, { @@ -183,7 +207,7 @@ "key": "Username", "location": { "startingColumn": 21, - "startingLine": 933 + "startingLine": 1032 } }, { @@ -191,7 +215,7 @@ "key": "Password (macOS Keychain)", "location": { "startingColumn": 21, - "startingLine": 938 + "startingLine": 1037 } }, { @@ -199,7 +223,7 @@ "key": "Default Schema", "location": { "startingColumn": 21, - "startingLine": 943 + "startingLine": 1042 } }, { @@ -207,7 +231,7 @@ "key": "Cancel", "location": { "startingColumn": 24, - "startingLine": 951 + "startingLine": 1050 } }, { @@ -215,7 +239,87 @@ "key": "Save", "location": { "startingColumn": 24, - "startingLine": 955 + "startingLine": 1054 + } + }, + { + "comment": "", + "key": "The server did not return any columns.", + "location": { + "startingColumn": 25, + "startingLine": 1376 + } + }, + { + "comment": "", + "key": "Loading %@…", + "location": { + "startingColumn": 30, + "startingLine": 1354 + } + }, + { + "comment": "", + "key": "No Data", + "location": { + "startingColumn": 21, + "startingLine": 1373 + } + }, + { + "comment": "", + "key": "Unable to Load %@", + "location": { + "startingColumn": 25, + "startingLine": 1360 + } + }, + { + "comment": "", + "key": "Retry", + "location": { + "startingColumn": 28, + "startingLine": 1366 + } + }, + { + "comment": "", + "key": "Refresh", + "location": { + "startingColumn": 23, + "startingLine": 1415 + } + }, + { + "comment": "", + "key": "SQL Editor", + "location": { + "startingColumn": 23, + "startingLine": 1422 + } + }, + { + "comment": "", + "key": "Not loaded", + "location": { + "startingColumn": 22, + "startingLine": 1500 + } + }, + { + "comment": "", + "key": "Updated %@", + "location": { + "startingColumn": 21, + "startingLine": 1497 + } + }, + { + "comment": "", + "key": "%lld rows", + "location": { + "startingColumn": 18, + "startingLine": 1505 } } ] 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 7e43ef0..75224dc 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 8d27582..e0c7568 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 3afe490..b2804d4 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 86edb71..6731660 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 799e17b..2195bf4 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 0fb51df..4e9b961 100644 --- a/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt +++ b/build/Build/Intermediates.noindex/XCBuildData/registered-launchservices.txt @@ -3,3 +3,4 @@ /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 a8b9a09..f278b84 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 6cb83e1..bd0b336 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 d957c0e..e192b46 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 6379196..ce832c6 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 - 1TJJDc7LhSK1AHyUbPhKlUy9S8A= + 5Wek/oPAL5JjNIHDxN/dkqjd0UI= 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 86edb71..6731660 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 3afe490..b2804d4 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 01e2ccc..d3ff8c9 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 264ff7f..ee1836a 100644 --- a/build/Logs/Build/LogStoreManifest.plist +++ b/build/Logs/Build/LogStoreManifest.plist @@ -90,6 +90,48 @@ uniqueIdentifier 8EB6F71B-1109-492D-84B8-8C2FE5C14BB0 + AD44F407-7FE5-46AE-A82F-8FAC1CA2720B + + className + IDECommandLineBuildLog + documentTypeString + <nil> + domainType + Xcode.IDEActivityLogDomainType.BuildLog + fileName + AD44F407-7FE5-46AE-A82F-8FAC1CA2720B.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 + 813875703.86912405 + timeStoppedRecording + 813875715.47182798 + title + Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug + uniqueIdentifier + AD44F407-7FE5-46AE-A82F-8FAC1CA2720B + diff --git a/build/ModuleCache.noindex/Session.modulevalidation b/build/ModuleCache.noindex/Session.modulevalidation index f419104..3d7bb35 100644 --- a/build/ModuleCache.noindex/Session.modulevalidation +++ b/build/ModuleCache.noindex/Session.modulevalidation @@ -1 +1 @@ -1792182796.251258: Module build session file for module cache at Path(str: "/Volumes/Developer/Applications/WorkbenchReplacement/build/ModuleCache.noindex") +1792182904.277697: 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 89e946b..78fd62c 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 d38f3ec..ce4b1e8 100644 --- a/build/info.plist +++ b/build/info.plist @@ -3,7 +3,7 @@ LastAccessedDate - 2026-10-16T20:33:16Z + 2026-10-16T20:35:04Z WorkspacePath /Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj