new ui
This commit is contained in:
@@ -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])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
+54
-22
@@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+21
-21
@@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,4 @@
|
||||
01e80553e66def7e23d38bd3c911deaa
|
||||
fde3a409a1c7aaa1a5eda9dfaf1056e0
|
||||
1c438df96f25657d77b9e55a3fe47133
|
||||
120e9a8ae12faa2f3ba3b63c6df49ba3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
<string>Workbench Replacement</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>WorkbenchReplacement.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>net.absdev.WorkbenchReplacement</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
+4
-4
@@ -19,19 +19,19 @@
|
||||
<dict>
|
||||
<key>cdhash</key>
|
||||
<data>
|
||||
Ts5PCMroOdIOXrgimUvtGdRFzNg=
|
||||
1TJJDc7LhSK1AHyUbPhKlUy9S8A=
|
||||
</data>
|
||||
<key>requirement</key>
|
||||
<string>cdhash H"4ece4f08cae839d20e5eb822994bed19d445ccd8"</string>
|
||||
<string>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 */</string>
|
||||
</dict>
|
||||
<key>MacOS/__preview.dylib</key>
|
||||
<dict>
|
||||
<key>cdhash</key>
|
||||
<data>
|
||||
dKXeHBcR4xL0+Si9Vpmkik2aSbI=
|
||||
eRYaNIE92/BHmGdKwbMscza9I3g=
|
||||
</data>
|
||||
<key>requirement</key>
|
||||
<string>cdhash H"74a5de1c1711e312f4f928bd5699a48a4d9a49b2"</string>
|
||||
<string>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 */</string>
|
||||
</dict>
|
||||
<key>Resources/WorkbenchBrand.png</key>
|
||||
<dict>
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -6,7 +6,7 @@
|
||||
<integer>13</integer>
|
||||
<key>logs</key>
|
||||
<dict>
|
||||
<key>78BF6F7C-BE7A-47AA-9498-A54A28B82425</key>
|
||||
<key>5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>78BF6F7C-BE7A-47AA-9498-A54A28B82425.xcactivitylog</string>
|
||||
<string>5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
@@ -40,15 +40,15 @@
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813861179.38466096</real>
|
||||
<real>813875595.87715495</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813861185.45915306</real>
|
||||
<real>813875606.38803506</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>78BF6F7C-BE7A-47AA-9498-A54A28B82425</string>
|
||||
<string>5D8CEBC3-1273-4D6E-BDAB-8D198A9BCA61</string>
|
||||
</dict>
|
||||
<key>7E3E8A73-55F0-4794-BE1D-8EBED17516D6</key>
|
||||
<key>8EB6F71B-1109-492D-84B8-8C2FE5C14BB0</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
@@ -57,7 +57,7 @@
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>7E3E8A73-55F0-4794-BE1D-8EBED17516D6.xcactivitylog</string>
|
||||
<string>8EB6F71B-1109-492D-84B8-8C2FE5C14BB0.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
@@ -82,181 +82,13 @@
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813861040.02156603</real>
|
||||
<real>813875432.68892801</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813861045.85164797</real>
|
||||
<real>813875443.71130598</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>7E3E8A73-55F0-4794-BE1D-8EBED17516D6</string>
|
||||
</dict>
|
||||
<key>81BE8778-FF76-42DF-8BEC-5179A17D2695</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>81BE8778-FF76-42DF-8BEC-5179A17D2695.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813860932.82895195</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813860938.50552499</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>81BE8778-FF76-42DF-8BEC-5179A17D2695</string>
|
||||
</dict>
|
||||
<key>B0859816-0F24-4E53-B015-2E939106D07B</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>B0859816-0F24-4E53-B015-2E939106D07B.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813860864.44753695</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813860865.80887902</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>B0859816-0F24-4E53-B015-2E939106D07B</string>
|
||||
</dict>
|
||||
<key>C19F0156-EDB1-455B-90E1-2893AA66ADDB</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>C19F0156-EDB1-455B-90E1-2893AA66ADDB.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813860953.41163003</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813860955.66303599</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>C19F0156-EDB1-455B-90E1-2893AA66ADDB</string>
|
||||
</dict>
|
||||
<key>E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6</key>
|
||||
<dict>
|
||||
<key>className</key>
|
||||
<string>IDECommandLineBuildLog</string>
|
||||
<key>documentTypeString</key>
|
||||
<string><nil></string>
|
||||
<key>domainType</key>
|
||||
<string>Xcode.IDEActivityLogDomainType.BuildLog</string>
|
||||
<key>fileName</key>
|
||||
<string>E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6.xcactivitylog</string>
|
||||
<key>hasPrimaryLog</key>
|
||||
<true/>
|
||||
<key>primaryObservable</key>
|
||||
<dict>
|
||||
<key>highLevelStatus</key>
|
||||
<string>S</string>
|
||||
<key>totalNumberOfAnalyzerIssues</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfErrors</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfTestFailures</key>
|
||||
<integer>0</integer>
|
||||
<key>totalNumberOfWarnings</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>schemeIdentifier-containerName</key>
|
||||
<string>WorkbenchReplacement project</string>
|
||||
<key>schemeIdentifier-schemeName</key>
|
||||
<string>WorkbenchReplacement</string>
|
||||
<key>schemeIdentifier-sharedScheme</key>
|
||||
<integer>1</integer>
|
||||
<key>signature</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>timeStartedRecording</key>
|
||||
<real>813861120.32193995</real>
|
||||
<key>timeStoppedRecording</key>
|
||||
<real>813861120.77534199</real>
|
||||
<key>title</key>
|
||||
<string>Building project WorkbenchReplacement with scheme WorkbenchReplacement and configuration Debug</string>
|
||||
<key>uniqueIdentifier</key>
|
||||
<string>E70DDCDB-1B87-4C30-B4F3-0CF1515A78F6</string>
|
||||
<string>8EB6F71B-1109-492D-84B8-8C2FE5C14BB0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
@@ -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")
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
@@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LastAccessedDate</key>
|
||||
<date>2026-10-16T16:32:59Z</date>
|
||||
<date>2026-10-16T20:33:16Z</date>
|
||||
<key>WorkspacePath</key>
|
||||
<string>/Volumes/Developer/Applications/WorkbenchReplacement/WorkbenchReplacement.xcodeproj</string>
|
||||
</dict>
|
||||
|
||||
Reference in New Issue
Block a user