From e321a3dd97fd2592311f8ed03be415a11767111e Mon Sep 17 00:00:00 2001 From: Gene Crucean Date: Wed, 22 Apr 2020 20:17:34 -0400 Subject: [PATCH 1/5] Added "Open UserDefaults" action --- OpenSim.xcodeproj/project.pbxproj | 4 ++ OpenSim/ActionMenu.swift | 1 + .../userDefaults.imageset/Contents.json | 15 ++++++ .../userDefaults.imageset/UserDefaults.pdf | Bin 0 -> 4026 bytes OpenSim/Base.lproj/Localizable.strings | 1 + OpenSim/Constants.swift | 1 + OpenSim/OpenUserDefaultsAction.swift | 43 ++++++++++++++++++ 7 files changed, 65 insertions(+) create mode 100644 OpenSim/Assets.xcassets/userDefaults.imageset/Contents.json create mode 100644 OpenSim/Assets.xcassets/userDefaults.imageset/UserDefaults.pdf create mode 100644 OpenSim/OpenUserDefaultsAction.swift diff --git a/OpenSim.xcodeproj/project.pbxproj b/OpenSim.xcodeproj/project.pbxproj index 2271738..d352c49 100644 --- a/OpenSim.xcodeproj/project.pbxproj +++ b/OpenSim.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 312A27FD21A753E600699668 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 312A27FC21A753E600699668 /* Constants.swift */; }; 31A79B15219B81660024DF7B /* Simulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31A79B14219B81660024DF7B /* Simulator.swift */; }; 31C4BF3221A8AC56008B97A1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 31C4BF3021A8AC56008B97A1 /* Localizable.strings */; }; + 78C2C79B2450FE5E007E4560 /* OpenUserDefaultsAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78C2C79A2450FE5E007E4560 /* OpenUserDefaultsAction.swift */; }; AF9D003A1D110E750065AFD0 /* Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF9D00391D110E750065AFD0 /* Helper.swift */; }; B20671202353ECAA00D6ED0D /* SimulatorShutdownMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B206711F2353ECAA00D6ED0D /* SimulatorShutdownMenuItem.swift */; }; B20671222353ECB600D6ED0D /* SimulatorResetMenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B20671212353ECB600D6ED0D /* SimulatorResetMenuItem.swift */; }; @@ -50,6 +51,7 @@ 31A79B14219B81660024DF7B /* Simulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Simulator.swift; sourceTree = ""; }; 31C4BF3121A8AC56008B97A1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; 31C4BF3421A8AC72008B97A1 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; + 78C2C79A2450FE5E007E4560 /* OpenUserDefaultsAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenUserDefaultsAction.swift; sourceTree = ""; }; AF9D00391D110E750065AFD0 /* Helper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Helper.swift; sourceTree = ""; }; B206711F2353ECAA00D6ED0D /* SimulatorShutdownMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimulatorShutdownMenuItem.swift; sourceTree = ""; }; B20671212353ECB600D6ED0D /* SimulatorResetMenuItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimulatorResetMenuItem.swift; sourceTree = ""; }; @@ -170,6 +172,7 @@ B39B2B741EBF58EC00CDD74C /* OpenInItermAction.swift */, B39B2B781EBF614400CDD74C /* OpenRealmAction.swift */, 256B782B2278A08500052809 /* LaunchAction.swift */, + 78C2C79A2450FE5E007E4560 /* OpenUserDefaultsAction.swift */, ); name = Actions; sourceTree = ""; @@ -299,6 +302,7 @@ B3E67B5E1CA412BD00744B38 /* MenuManager.swift in Sources */, B39B2B671EBF0D0600CDD74C /* LaunchAtLoginHelper.swift in Sources */, B39B2B631EBEFFB700CDD74C /* AppInfoView.swift in Sources */, + 78C2C79B2450FE5E007E4560 /* OpenUserDefaultsAction.swift in Sources */, B3A1E3301BF05F980090EC58 /* DeviceManager.swift in Sources */, 312A27FD21A753E600699668 /* Constants.swift in Sources */, B3A1E3231BF049690090EC58 /* AppDelegate.swift in Sources */, diff --git a/OpenSim/ActionMenu.swift b/OpenSim/ActionMenu.swift index c21d3d6..1d301d6 100644 --- a/OpenSim/ActionMenu.swift +++ b/OpenSim/ActionMenu.swift @@ -16,6 +16,7 @@ final class ActionMenu: NSMenu { RevealInFinderAction.self, CopyToPasteboardAction.self, OpenInTerminalAction.self, + OpenUserDefaultsAction.self, LaunchAction.self, UninstallAction.self ] diff --git a/OpenSim/Assets.xcassets/userDefaults.imageset/Contents.json b/OpenSim/Assets.xcassets/userDefaults.imageset/Contents.json new file mode 100644 index 0000000..7628e89 --- /dev/null +++ b/OpenSim/Assets.xcassets/userDefaults.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "UserDefaults.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "preserves-vector-representation" : true + } +} \ No newline at end of file diff --git a/OpenSim/Assets.xcassets/userDefaults.imageset/UserDefaults.pdf b/OpenSim/Assets.xcassets/userDefaults.imageset/UserDefaults.pdf new file mode 100644 index 0000000000000000000000000000000000000000..717571caac25334a6ffe493e2afb7adfec110b76 GIT binary patch literal 4026 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 literal 0 HcmV?d00001 diff --git a/OpenSim/Base.lproj/Localizable.strings b/OpenSim/Base.lproj/Localizable.strings index dead27b..72fcaa1 100644 --- a/OpenSim/Base.lproj/Localizable.strings +++ b/OpenSim/Base.lproj/Localizable.strings @@ -25,6 +25,7 @@ "Action.EraseSimulatorAlertConfirmButton" = "Erase Simulator"; "Action.EraseSimulatorAlertCancelButton" = "Cancel"; "Action.EraseSimulatorAlertMessage" = "Are you sure you want to erase the %@ Simulator? This will remove the simulator from your system, but a new simulator can still be created."; +"Action.OpenUserDefaults" = "Open UserDefaults"; "Extension.OpenInIterm" = "Open Sandbox in iTerm"; "Extension.OpenRealmDatabase" = "Open Realm Database"; "AppInfo.Version" = "Version"; diff --git a/OpenSim/Constants.swift b/OpenSim/Constants.swift index 1fbca58..0488daa 100644 --- a/OpenSim/Constants.swift +++ b/OpenSim/Constants.swift @@ -31,6 +31,7 @@ struct UIConstants { static let actionFactoryResetAlertMessage = NSLocalizedString("Action.FactoryResetAlertMessage", comment: "Factory reset confirmation message") static let actionFactoryResetAllSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllSimulatorsMessage", comment: "Factory Reset All Simulators") static let actionFactoryResetAllShutdownSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllShutdownSimulatorsMessage", comment: "Factory Reset All Shutdown Simulators") + static let actionOpenUserDefaults = NSLocalizedString("Action.OpenUserDefaults", comment: "Open UserDefaults") static let extensionOpenInIterm = NSLocalizedString("Extension.OpenInIterm", comment: "Open in iTerm label") static let extensionOpenRealmDatabase = NSLocalizedString("Extension.OpenRealmDatabase", comment: "Open Realm Database label") static let appInfoVersion = NSLocalizedString("AppInfo.Version", comment: "App Info Version Label") diff --git a/OpenSim/OpenUserDefaultsAction.swift b/OpenSim/OpenUserDefaultsAction.swift new file mode 100644 index 0000000..8e04106 --- /dev/null +++ b/OpenSim/OpenUserDefaultsAction.swift @@ -0,0 +1,43 @@ +// +// Created for OpenSim in 2020 +// Using Swift 5.2 +// Created by Gene Crucean on 4/20/20 +// + +import Cocoa + +final class OpenUserDefaultsAction: ApplicationActionable { + + var application: Application? + + let title = UIConstants.strings.actionOpenUserDefaults + + let icon = templatize(#imageLiteral(resourceName: "userDefaults")) + + var isAvailable: Bool { + return Bundle.main.bundleIdentifier != nil + } + + var userDefaultsPath: String? + + init(application: Application) { + self.application = application + + guard let bundleId = Bundle.main.bundleIdentifier else { return } + + // There is probably a better way of doing this. I need to do a bit of research. + if let pathUrl = application.sandboxUrl?.appendingPathComponent("Library").appendingPathComponent("Preferences"), let enumerator = FileManager.default.enumerator(at: pathUrl, includingPropertiesForKeys: nil) { + while let fileUrl = enumerator.nextObject() as? URL { + if fileUrl.lastPathComponent == "\(application.bundleID).plist" { + userDefaultsPath = fileUrl.path + } + } + } + } + + func perform() { + if let userDefaultsPath = userDefaultsPath { + NSWorkspace.shared.openFile(userDefaultsPath, withApplication: nil) + } + } +} From 2732bc41241f29df3bb5214751486a343572e1e7 Mon Sep 17 00:00:00 2001 From: Gene Crucean Date: Fri, 19 Feb 2021 15:09:51 -0500 Subject: [PATCH 2/5] Added no defaults found alert --- OpenSim/ActionMenu.swift | 2 +- OpenSim/Base.lproj/Localizable.strings | 2 ++ OpenSim/Constants.swift | 2 ++ OpenSim/OpenUserDefaultsAction.swift | 8 ++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/OpenSim/ActionMenu.swift b/OpenSim/ActionMenu.swift index 1d301d6..840dc30 100644 --- a/OpenSim/ActionMenu.swift +++ b/OpenSim/ActionMenu.swift @@ -16,12 +16,12 @@ final class ActionMenu: NSMenu { RevealInFinderAction.self, CopyToPasteboardAction.self, OpenInTerminalAction.self, - OpenUserDefaultsAction.self, LaunchAction.self, UninstallAction.self ] private static let extraActions: [ApplicationActionable.Type] = [ + OpenUserDefaultsAction.self, OpenInItermAction.self, OpenRealmAction.self ] diff --git a/OpenSim/Base.lproj/Localizable.strings b/OpenSim/Base.lproj/Localizable.strings index 72fcaa1..d59d23b 100644 --- a/OpenSim/Base.lproj/Localizable.strings +++ b/OpenSim/Base.lproj/Localizable.strings @@ -33,3 +33,5 @@ "MenuHeader.Actions" = "Actions"; "MenuHeader.Extensions" = "Extensions"; "MenuHeader.AppInformation" = "App Information"; +"Action.Dismiss" = "Dismiss"; +"Action.DismissMessage" = "No user defaults file detected"; diff --git a/OpenSim/Constants.swift b/OpenSim/Constants.swift index 0488daa..dad4ef2 100644 --- a/OpenSim/Constants.swift +++ b/OpenSim/Constants.swift @@ -32,6 +32,8 @@ struct UIConstants { static let actionFactoryResetAllSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllSimulatorsMessage", comment: "Factory Reset All Simulators") static let actionFactoryResetAllShutdownSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllShutdownSimulatorsMessage", comment: "Factory Reset All Shutdown Simulators") static let actionOpenUserDefaults = NSLocalizedString("Action.OpenUserDefaults", comment: "Open UserDefaults") + static let actionDismissUserDefaultsTitle = NSLocalizedString("Action.DismissMessage", comment: "Dismiss title") + static let actionDismissUserDefaultsButton = NSLocalizedString("Action.Dismiss", comment: "Dismiss menu") static let extensionOpenInIterm = NSLocalizedString("Extension.OpenInIterm", comment: "Open in iTerm label") static let extensionOpenRealmDatabase = NSLocalizedString("Extension.OpenRealmDatabase", comment: "Open Realm Database label") static let appInfoVersion = NSLocalizedString("AppInfo.Version", comment: "App Info Version Label") diff --git a/OpenSim/OpenUserDefaultsAction.swift b/OpenSim/OpenUserDefaultsAction.swift index 8e04106..1230682 100644 --- a/OpenSim/OpenUserDefaultsAction.swift +++ b/OpenSim/OpenUserDefaultsAction.swift @@ -38,6 +38,14 @@ final class OpenUserDefaultsAction: ApplicationActionable { func perform() { if let userDefaultsPath = userDefaultsPath { NSWorkspace.shared.openFile(userDefaultsPath, withApplication: nil) + } else { + print("No user defaults file detected.") + + let alert: NSAlert = NSAlert() + alert.messageText = String(format: UIConstants.strings.actionDismissUserDefaultsTitle) + alert.alertStyle = .informational + alert.addButton(withTitle: UIConstants.strings.actionDismissUserDefaultsButton) + alert.runModal() } } } From b2fd447da884eb46fd14c8cfc304c6c57cdf8ee0 Mon Sep 17 00:00:00 2001 From: Gene Crucean Date: Fri, 19 Feb 2021 15:22:29 -0500 Subject: [PATCH 3/5] Cleanup --- OpenSim/OpenUserDefaultsAction.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/OpenSim/OpenUserDefaultsAction.swift b/OpenSim/OpenUserDefaultsAction.swift index 1230682..f807f7f 100644 --- a/OpenSim/OpenUserDefaultsAction.swift +++ b/OpenSim/OpenUserDefaultsAction.swift @@ -23,8 +23,6 @@ final class OpenUserDefaultsAction: ApplicationActionable { init(application: Application) { self.application = application - guard let bundleId = Bundle.main.bundleIdentifier else { return } - // There is probably a better way of doing this. I need to do a bit of research. if let pathUrl = application.sandboxUrl?.appendingPathComponent("Library").appendingPathComponent("Preferences"), let enumerator = FileManager.default.enumerator(at: pathUrl, includingPropertiesForKeys: nil) { while let fileUrl = enumerator.nextObject() as? URL { From 87611892e3f09b2fefeb91fb43985a03cbb1eddc Mon Sep 17 00:00:00 2001 From: Gene Crucean Date: Fri, 19 Feb 2021 15:09:51 -0500 Subject: [PATCH 4/5] Added no defaults found alert --- OpenSim/ActionMenu.swift | 2 +- OpenSim/Base.lproj/Localizable.strings | 2 ++ OpenSim/Constants.swift | 2 ++ OpenSim/OpenUserDefaultsAction.swift | 8 ++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/OpenSim/ActionMenu.swift b/OpenSim/ActionMenu.swift index 1d301d6..840dc30 100644 --- a/OpenSim/ActionMenu.swift +++ b/OpenSim/ActionMenu.swift @@ -16,12 +16,12 @@ final class ActionMenu: NSMenu { RevealInFinderAction.self, CopyToPasteboardAction.self, OpenInTerminalAction.self, - OpenUserDefaultsAction.self, LaunchAction.self, UninstallAction.self ] private static let extraActions: [ApplicationActionable.Type] = [ + OpenUserDefaultsAction.self, OpenInItermAction.self, OpenRealmAction.self ] diff --git a/OpenSim/Base.lproj/Localizable.strings b/OpenSim/Base.lproj/Localizable.strings index 72fcaa1..d59d23b 100644 --- a/OpenSim/Base.lproj/Localizable.strings +++ b/OpenSim/Base.lproj/Localizable.strings @@ -33,3 +33,5 @@ "MenuHeader.Actions" = "Actions"; "MenuHeader.Extensions" = "Extensions"; "MenuHeader.AppInformation" = "App Information"; +"Action.Dismiss" = "Dismiss"; +"Action.DismissMessage" = "No user defaults file detected"; diff --git a/OpenSim/Constants.swift b/OpenSim/Constants.swift index 0488daa..dad4ef2 100644 --- a/OpenSim/Constants.swift +++ b/OpenSim/Constants.swift @@ -32,6 +32,8 @@ struct UIConstants { static let actionFactoryResetAllSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllSimulatorsMessage", comment: "Factory Reset All Simulators") static let actionFactoryResetAllShutdownSimulatorsMessage = NSLocalizedString("Action.FactoryResetAllShutdownSimulatorsMessage", comment: "Factory Reset All Shutdown Simulators") static let actionOpenUserDefaults = NSLocalizedString("Action.OpenUserDefaults", comment: "Open UserDefaults") + static let actionDismissUserDefaultsTitle = NSLocalizedString("Action.DismissMessage", comment: "Dismiss title") + static let actionDismissUserDefaultsButton = NSLocalizedString("Action.Dismiss", comment: "Dismiss menu") static let extensionOpenInIterm = NSLocalizedString("Extension.OpenInIterm", comment: "Open in iTerm label") static let extensionOpenRealmDatabase = NSLocalizedString("Extension.OpenRealmDatabase", comment: "Open Realm Database label") static let appInfoVersion = NSLocalizedString("AppInfo.Version", comment: "App Info Version Label") diff --git a/OpenSim/OpenUserDefaultsAction.swift b/OpenSim/OpenUserDefaultsAction.swift index 8e04106..1230682 100644 --- a/OpenSim/OpenUserDefaultsAction.swift +++ b/OpenSim/OpenUserDefaultsAction.swift @@ -38,6 +38,14 @@ final class OpenUserDefaultsAction: ApplicationActionable { func perform() { if let userDefaultsPath = userDefaultsPath { NSWorkspace.shared.openFile(userDefaultsPath, withApplication: nil) + } else { + print("No user defaults file detected.") + + let alert: NSAlert = NSAlert() + alert.messageText = String(format: UIConstants.strings.actionDismissUserDefaultsTitle) + alert.alertStyle = .informational + alert.addButton(withTitle: UIConstants.strings.actionDismissUserDefaultsButton) + alert.runModal() } } } From d0aaf38c6d726b3748964a127d7127c06d0e7ce5 Mon Sep 17 00:00:00 2001 From: Gene Crucean Date: Fri, 19 Feb 2021 15:22:29 -0500 Subject: [PATCH 5/5] Cleanup --- OpenSim/OpenUserDefaultsAction.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/OpenSim/OpenUserDefaultsAction.swift b/OpenSim/OpenUserDefaultsAction.swift index 1230682..f807f7f 100644 --- a/OpenSim/OpenUserDefaultsAction.swift +++ b/OpenSim/OpenUserDefaultsAction.swift @@ -23,8 +23,6 @@ final class OpenUserDefaultsAction: ApplicationActionable { init(application: Application) { self.application = application - guard let bundleId = Bundle.main.bundleIdentifier else { return } - // There is probably a better way of doing this. I need to do a bit of research. if let pathUrl = application.sandboxUrl?.appendingPathComponent("Library").appendingPathComponent("Preferences"), let enumerator = FileManager.default.enumerator(at: pathUrl, includingPropertiesForKeys: nil) { while let fileUrl = enumerator.nextObject() as? URL {