[
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [DKalachniuk]\n"
  },
  {
    "path": ".gitignore",
    "content": "# General\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n.xcuserstate\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 dkalachniuk\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# XcodeProjects\nSwitch between projects in 2 clicks. Don't write \"pod install\", \"pod update\" and \"cd <your project>\" in the terminal anymore!<br />\n**NEW**: Remove derived data of particular project!<br />\n**NEW**: Add your custom commands for a project! <br />\n**NEW**: Open Package.swift file!<br />\n**NEW**: Keep you aliases and custom script's commands in one list. Switch On and Off in the Preferences <br />\n**NEW**: Now you can open your project in Fork app<br />\n\n# When do you need this tool\n- you want to **open** quickly specific **Xcode project** or **Package.swift** file\n- you want to **clear derived data for a specific project only**\n- you type \"pod install\", \"pod update\" and \"pod deintegrate\" in the terminal too often. Do it in 2 clicks\n- you need to **remove Podfile.lock file** quickly\n- you need to change directory to point to your project in the terminal \n- you want quickly **open your project in SourceTree**\n- you want to **execute custom command for a project**\n- you have a lot of projects or modules/frameworks and you need to switch between them quickly\n  \n# How to use \nWhen you open the app for the first time you would see empty screen\n\n![alt text](Images/example_empty_list.png?raw=true)\n\nclick \"+\" button to add folder of you project within system dialog (Hint: choose multiple projects)\n\n![alt text](Images/example_list_of_projects_dark.png?raw=true)\n\n![alt text](Images/example_list_of_projects_light.png?raw=true)\n\n**Click \"arrows\" button to open your Xcode workspace/project**\n\n**Click \"swift\" button to open your Package.swift in Xcode**\n\n**Click \"...\" button to see the menu options** \n\nSwitch between Projects/Aliases tabs in the bottom\n\n![alt text](Images/example_list_of_aliases_light.png?raw=true)\n\nBy default the app will parse your system .bash_profile and .zprofile files. But you can either add your alias manually or parse the existing script file for aliases.\n\nAlso it is possible to drag projects around.\n\n![alt text](Images/example_drag_and_drop_dark.png?raw=true)\n\n## Options\n\nWhen  \"...\" button of the project is clicked you will see the following\n\n![alt text](Images/example_context_menu_light_openinfork.png?raw=true)\n\n![alt text](Images/example_context_menu_light.png?raw=true)\n\n![alt text](Images/example_context_menu_dark.png?raw=true)\n\n**Open in Terminal** - opens the path to the project in terminal. Handy to quickly switch to the folder of the project\n\n**Open in Finder** - opens the folder of the project in Finder\n\n**Open in Sourcetree** - opens the folder of the project in Sourcetree (if you have Sourcetree installed)\n\n**Open in Fork** - opens the folder of the project in Fork (if you have Fork installed)\n\n**Pod install** - runs \"pod install\" command in terminal for the project\n\n**Pod update** - runs \"pod update\" command in terminal for the project\n\n**Pod deintegrate** - runs \"pod deintegrate\" command in terminal for the project\n\n**Remove Podfile.lock** - removes file Podfile.lock from the project\n\n**Clear derived data** - removes project's derived data folder\n\n**Rename project** - opens new window to rename the project. Note: renames in the Xcode Projects app only - not physical folder/project etc.\n\n**Switch On/Off Aliases Tab** - switches on/off the picker to show projects and aliases\n\n**Remove from the list** - removes project from the list\n\nIf you have added custom commands then they would appear at the bottom of the list with option to remove the command\n\n![alt text](Images/custom_command.png?raw=true)\n\n# Preferences\n\n![alt text](Images/preferences_dark.png?raw=true)\n\n**Open in GitHub** - opens the github webpage of  XcodeProjects\n\n**Remove all projects** - removes all projects from XcodeProjects app\n\n**Open derived data in Finder** - opens Xcode derived data folder in Finder\n\n**Clear Xcode derived data** - removes Xcode derived data from default location ~/Library/Developer/Xcode/DerivedData\n\n**Launch at Login** - XcodeProjects app will be launched when MacOS was restarted/started\n\n**Show project's icon** - show/hide project's icon next to the project's name\n\n**Add custom command** - add custom command for all projects\n\n> Hint: Click on project icon to change its color\n\n# How to install\nGo to release section in this repo and download the binary. Drag & drop XcodeProjects.app to your Application folder. Enjoy!\n\nIf you see this window \n\n![alt text](Images/xcodeProjects_cantopen.jpeg?raw=true)\n\nit is ok. No worries. It is new security measure in MacOS.\nPlease click with **a right button** the XcodeProjects app. Then you will see\n\n![alt text](Images/xcodeProjects_rightclickMenu.jpeg?raw=true)\n\nClick Open\n\n![alt text](Images/xcodeProjects_openMenu.jpeg?raw=true)\n\nClick Open again. That is it!\n\n# Support\nJust simple star ⭐️ will make my life happier :) \n\nIf you want to support this project, feel free to send some coffee money to this [link](https://paypal.me/dkalachniuk)\nIf you don't want to spend money, you can still support me if you will share this tool with your colleagues and/or give me a star.\n\n# Ideas\n- add command to support carthage update\n- add sorting to the list of projects\n- add favourites projects\n- configure the actions when you press on the project. so you will be able to see only those that you need\n\n# TODO\n- ~~update commands logic so some commands like: open workspace, open in finder will not use terminal to open the files~~\n- ~~put action \"open in Xcode\" in the main view~~\n- ~~remove project's derived data folder~~\n- ~~ability to rename project name~~\n- ~~add ability to add custom command~~\n- add Sparkle framework to check for updates automatically\n\n# Special Thanks\nSpecial thanks to \n- [Solokub](https://github.com/Solokub) - for providing awesome design for the app. 🥳\n- [Gui Rambo](https://gumroad.com/insidegui) - for his awesome project \"StatusBuddy\". [Gui Rambo's github](https://github.com/insidegui)\n\n# Badges\n[![HitCount](http://hits.dwyl.com/DKalachniuk/XcodeProjects.svg)](http://hits.dwyl.com/DKalachniuk/XcodeProjects)\n"
  },
  {
    "path": "XcodeProjects/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 06/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Cocoa\n\nvar statusItem: NSStatusItem?\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n\n    let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)\n    private lazy var popover = NSPopover()\n    private var eventMonitor: EventMonitor?\n    private let preferences = Preferences()\n    private lazy var statusController: StatusViewController = {\n        StatusViewController(preferences: preferences)\n    }()\n\n    var window: NSWindow!\n\n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        updateButton()\n        popover.contentViewController = statusController\n\n        eventMonitor = EventMonitor(mask: [.leftMouseDown, .rightMouseDown]) { [weak self] event in\n            guard let self = self else { return }\n            guard self.popover.isShown else { return }\n\n            self.closePopover(sender: event)\n        }\n    }\n}\n\n// MARK: - UI\nprivate extension AppDelegate {\n\n     func updateButton() {\n        guard let button = statusItem.button else {\n            return\n        }\n\n        button.image = NSImage(named: \"terminal\")\n        button.image?.size = NSSize(width: 15, height: 15)\n        button.action = #selector(togglePopover)\n    }\n}\n\n// MARK: - Actions\nextension AppDelegate {\n\n    static func closePopover() {\n        if let appDelegate = NSApplication.shared.delegate as? AppDelegate {\n            appDelegate.closePopover(sender: nil)\n        }\n    }\n\n    @objc\n    func togglePopover(_ sender: Any?) {\n        if popover.isShown {\n            closePopover(sender: sender)\n        } else {\n            showPopover(sender: sender)\n        }\n    }\n    \n\n    func showPopover(sender: Any?) {\n        guard let button = statusItem.button else {\n            return\n        }\n        eventMonitor?.start()\n        popover.show(\n            relativeTo: button.bounds,\n            of: button,\n            preferredEdge: NSRectEdge.minY\n        )\n        NSApp.activate(ignoringOtherApps: true)\n    }\n\n    func closePopover(sender: Any?) {\n        popover.performClose(sender)\n        eventMonitor?.stop()\n    }\n}\n\n"
  },
  {
    "path": "XcodeProjects/Data/Alias.swift",
    "content": "//\n//  Alias.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 29/06/2022.\n//  Copyright © 2022 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport Foundation\n\nclass Alias: Identifiable, Codable, Hashable {\n    \n    var id: UUID = UUID()\n    var name: String\n\n    init(name: String) {\n        self.name = name\n    }\n    \n    static func == (lhs: Alias, rhs: Alias) -> Bool {\n        lhs.name == rhs.name && lhs.id == rhs.id\n    }\n    \n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(id)\n        hasher.combine(name)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Data/CustomCommand.swift",
    "content": "//\n//  CustomCommand.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 23/02/2022.\n//  Copyright © 2022 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport Foundation\n\nclass CustomCommand: Identifiable, Codable, Hashable {\n    var id: UUID = UUID()\n    \n    let name: String\n    let command: String\n    \n    init (name: String? = nil, command: String) {\n        var newName = name ?? command\n        if newName.isEmpty {\n            newName = command\n        }\n        self.name = newName\n        self.command = command\n    }\n    \n    func fullCommand(for project: Project) -> String {\n        \"cd \\(project.path);\\(command)\"\n    }\n    \n    static func == (lhs: CustomCommand, rhs: CustomCommand) -> Bool {\n        lhs.command == rhs.command\n    }\n    \n    func hash(into hasher: inout Hasher) {\n        hasher.combine(name);\n        hasher.combine(command)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Data/Project.swift",
    "content": "//\n//  Project.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 06/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\nimport AppKit\n\nclass Project: Identifiable, Codable {\n\n    var id: UUID = UUID()\n    var name: String\n    let path: String\n    var color: CodableColor\n    var iconPath: String?\n\n    init(name: String, path: String) {\n        self.name = name\n        self.path = path\n        self.color = CodableColorPicker.shared.pickRandomColor()\n    }\n\n    convenience init?(url: URL) {\n        guard let name = url.path.lastComponent else {\n            return nil\n        }\n        let splitName = name.split(separator: \"-\").last ?? name\n        self.init(name: String(splitName), path: url.path)\n    }\n}\n\nextension Project {\n\n    var urlPath: URL? {\n        URL(fileURLWithPath: path)\n    }\n\n    var workspaceURL: URL? {\n        FileManager.default.getWorkspaceFrom(for: self)\n    }\n    \n    var swiftPackageURL: URL? {\n        FileManager.default.getSwiftPackageFrom(for: self)\n    }\n\n    var projectURL: URL? {\n        FileManager.default.getXcodeProjFrom(for: self)\n    }\n\n    var podfileLockPath: String? {\n        FileManager.default.getPodfileLockFrom(for: self)?.absoluteString.removeFilePath\n    }\n\n    var hasPodfileLock: Bool {\n        podfileLockPath != nil\n    }\n\n    var derivedDataPath: String? {\n        FileManager.default.getXcodeDerivedData(for: self)?.absoluteString.removeFilePath\n    }\n\n    var hasDerivedData: Bool {\n        derivedDataPath != nil\n    }\n\n    var hasXcodeProject: Bool {\n        (workspaceURL ?? projectURL) != nil\n    }\n    \n    var hasSwiftPackage: Bool {\n        swiftPackageURL != nil\n    }\n}\n\nextension Project {\n\n    var hasCocoapods: Bool {\n        FileManager.default.getPodfile(for: self) != nil\n    }\n}\n\nextension Project {\n    static let dummy = Project(name: \"DummyProject\", path: \"/AnyPath\")\n}\n"
  },
  {
    "path": "XcodeProjects/Data/TerminalCommand.swift",
    "content": "//\n//  TerminalCommand.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nenum ExecutionMethod {\n    case inTerminal\n    case justOpen\n}\n\nlet derivedDataFolderPath = \"Library/Developer/Xcode/DerivedData\"\nlet relativeDerivedDataFolderPath = \"~/\\(derivedDataFolderPath)\"\nlet directDerivedDataFolderPath = \"\\(FileManager.default.homeDirectoryForCurrentUser)\\(derivedDataFolderPath)\"\n\nenum TerminalCommand {\n    case podInstall\n    case podUpdate\n    case podDeintegrate\n    case removePodfileLock\n    case finder\n    case openInTerminal\n    case sourceTree\n    case fork\n    case openWorkspace\n    case openSwiftPackage\n    case clearXcodeDerivedData\n    case openXcodeDerivedData\n    case clearProjectDerivedData\n    case custom(command: String)\n    case alias(command: String)\n\n    var title: String {\n        switch self {\n            case .podInstall: return \"Pod install\"\n            case .podUpdate: return \"Pod update\"\n            case .podDeintegrate: return \"Pod deintegrate\"\n            case .removePodfileLock: return \"Remove Podfile.lock\"\n            case .finder: return \"Open in Finder\"\n            case .openInTerminal: return \"Open in Terminal\"\n            case .sourceTree: return \"Open in Sourcetree\"\n            case .fork: return \"Open in Fork\"\n            case .openWorkspace: return \"Open Workspace\"\n            case .openSwiftPackage: return \"Open Package.swift\"\n            case .clearXcodeDerivedData: return \"Clear Xcode derived data\"\n            case .openXcodeDerivedData: return \"Open derived data in Finder \"\n            case .clearProjectDerivedData: return \"Clear derived data\"\n            case .custom(let command): return command\n            case .alias(let command): return command\n        }\n    }\n\n    var executionMethod: ExecutionMethod {\n        switch self {\n        case .podUpdate, .podInstall, .openInTerminal, .sourceTree, .fork, .clearXcodeDerivedData, .clearProjectDerivedData, .podDeintegrate, .removePodfileLock, .custom, .alias:\n                return .inTerminal\n            case .finder, .openWorkspace, .openXcodeDerivedData, .openSwiftPackage:\n                return .justOpen\n        }\n    }\n\n    var command: String? {\n        switch self {\n            case .podInstall:\n                return \"pod install\"\n            case .podUpdate:\n                return \"pod update\"\n            case .podDeintegrate:\n                return \"pod deintegrate\"\n            case .openInTerminal:\n                return \"cd \"\n            case .sourceTree:\n                return \"open -a SourceTree\"\n            case .fork:\n                return \"open -a Fork\"\n            case .custom(let command):\n                return command\n            case .alias(let command):\n                return command\n            default:\n                return nil\n        }\n    }\n\n    func script(for project: Project?) -> String? {\n        // script for clearXcodeDerivedData command\n        if self == .clearXcodeDerivedData {\n            return getScriptToRemove(file: relativeDerivedDataFolderPath)\n        }\n\n        // script for clearProjectDerivedData command\n        if self == .clearProjectDerivedData {\n            return getScriptToRemove(file: project?.derivedDataPath)\n        }\n\n        // script for removePodfileLock command\n        if self == .removePodfileLock {\n            return getScriptToRemove(file: project?.podfileLockPath)\n        }\n        \n        // script for aliases\n        if let command = command, self == .alias(command: command) {\n            return TerminalScript(command: (command.wrappedInScript)).script\n        }\n\n        // script for other in terminal commands\n        guard let openInTerminalCommand = TerminalCommand.openInTerminal.command,\n            var commandValue = command, let project = project else {\n                return nil\n        }\n        let commandString = \"\\(openInTerminalCommand) \\(project.path)\"\n        var twoLinesScript = commandString.wrappedInScript\n        if self != .openInTerminal {\n            twoLinesScript.append(\"\\n\")\n            if self == .sourceTree || self == .fork {\n                commandValue += \" \\(project.path)\"\n            } \n            twoLinesScript.append(commandValue.wrappedInScript)\n        }\n        return TerminalScript(command: twoLinesScript).script\n    }\n\n    private func getScriptToRemove(file path: String?) -> String? {\n        path.map({ TerminalScript(toRemovePath: $0).script })\n    }\n}\n\nextension TerminalCommand: Equatable {\n    static func ==(lhs: TerminalCommand, rhs: TerminalCommand) -> Bool {\n        switch (lhs, rhs) {\n        case (.podInstall, .podInstall), (.podUpdate, .podUpdate), (.podDeintegrate, .podDeintegrate), (.removePodfileLock, .removePodfileLock), (.finder, .finder), (.openInTerminal, .openInTerminal), (.sourceTree, .sourceTree), (.fork, .fork), (.openWorkspace, .openWorkspace), (.openSwiftPackage, .openSwiftPackage), (.clearXcodeDerivedData, .clearXcodeDerivedData), (.openXcodeDerivedData, .openXcodeDerivedData), (.clearProjectDerivedData, .clearProjectDerivedData):\n                return true\n            case (.custom(let lhsCommand), .custom(let rhsCommand)):\n                return lhsCommand == rhsCommand\n            case (.alias(let lhsCommand), .alias(let rhsCommand)):\n                return lhsCommand == rhsCommand\n            default:\n                return false\n        }\n    }\n}\n\nextension String {\n    var wrappedInScript: String {\n        \"do script \\\"\\(self)\\\" in front window\"\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Data/TerminalScript.swift",
    "content": "//\n//  AppleScript.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 20/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nstruct TerminalScript {\n    let command: String\n\n    var script: String {\n        let scriptText =\n        \"\"\"\n        tell application \"Terminal\"\n        if not (exists window 1) then reopen\n        activate\n        \\(command)\n        end tell\n        \"\"\"\n        return scriptText\n    }\n\n    init(command: String) {\n        self.command = command\n    }\n\n    init(toRemovePath: String) {\n        self.command = \"rm -rf \\(toRemovePath)\".wrappedInScript\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/CodableColorPicker.swift",
    "content": "//\n//  CodableColorPicker.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 25/07/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport AppKit\n\nclass CodableColorPicker {\n\n    static let shared = CodableColorPicker()\n\n    private static let allColors = [NSColor.systemRed,\n                                    NSColor.systemGreen,\n                                    NSColor.systemBlue,\n                                    NSColor.systemIndigo,\n                                    NSColor.systemOrange,\n                                    NSColor.systemPurple]\n\n    private var usedColors: [NSColor] = [] {\n        didSet {\n            if usedColors.isEmpty {\n                usedColors = CodableColorPicker.allColors\n            }\n        }\n    }\n\n    private init() {\n        setupUsedColors()\n    }\n}\n\nextension CodableColorPicker {\n    func setupUsedColors() {\n        usedColors = CodableColorPicker.allColors.filter({ !UserDefaultsConfig.projectObjects.map({$0.color.color}).contains($0) })\n    }\n\n    func pickRandomColor() -> CodableColor {\n        guard let randomColor = usedColors.randomElement(),\n            let randomIndex = usedColors.firstIndex(of: randomColor) else {\n                print(\"couldn't get random color from the array\")\n                return CodableColor(color: NSColor.systemIndigo)\n        }\n        usedColors.remove(at: randomIndex)\n        return CodableColor(color: randomColor)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/CharacterSet+All.swift",
    "content": "//\n//  CharacterSet+All.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 17/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nextension CharacterSet {\n    func allCharacters() -> [Character] {\n        var result: [Character] = []\n        for plane: UInt8 in 0...16 where self.hasMember(inPlane: plane) {\n            for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 {\n                if let uniChar = UnicodeScalar(unicode), self.contains(uniChar) {\n                    result.append(Character(uniChar))\n                }\n            }\n        }\n        return result\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/FileManger+Content.swift",
    "content": "//\n//  FileManger+Content.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 20/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nextension FileManager {\n\n    func getWorkspaceFrom(for project: Project) -> URL? {\n        filter(urls: contentsOf(project: project), by: \"xcworkspace\")?.first\n    }\n\n    func getXcodeProjFrom(for project: Project) -> URL? {\n        filter(urls: contentsOf(project: project), by: \"xcodeproj\")?.first\n    }\n    \n    func getSwiftPackageFrom(for project: Project) -> URL? {\n        filter(urls: contentsOf(project: project), byName: \"Package.swift\")?.first\n    }\n\n    func getPodfileLockFrom(for project: Project) -> URL? {\n        filter(urls: contentsOf(project: project), byName: \"Podfile.lock\")?.first\n    }\n\n    func getPodfile(for project: Project) -> URL? {\n        filter(urls: contentsOf(project: project), byName: \"Podfile\")?.first\n    }\n\n    func getXcodeDerivedData(for project: Project) -> URL? {\n        guard let urls = contentsOf(url: URL(string: directDerivedDataFolderPath)) else {\n            return nil\n        }\n        return urls.first(where: { $0.absoluteString.lowercased().contains(project.name.lowercased()) })\n    }\n}\n\nprivate extension FileManager {\n\n    func contentsOf(url: URL?) -> [URL]? {\n        guard let urlPath = url else {\n            return nil\n        }\n        do {\n            let fileURLs = try contentsOfDirectory(at: urlPath, includingPropertiesForKeys: nil)\n            return fileURLs\n        } catch {\n            print(\"Error while enumerating files \\(urlPath): \\(error.localizedDescription)\")\n            return nil\n        }\n    }\n\n    func contentsOf(project: Project) -> [URL]? {\n        contentsOf(url: project.urlPath)\n    }\n\n    func filter(urls: [URL]?, by pathExtension: String) -> [URL]? {\n        urls?.filter({ $0.pathExtension == pathExtension })\n    }\n\n    func filter(urls: [URL]?, byName name: String) -> [URL]? {\n        urls?.filter({ $0.lastPathComponent == name })\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/NSColor+Codable.swift",
    "content": "//\n//  NSColor+Codable.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 21/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport AppKit\n\npublic struct CodableColor {\n\n    /// The color to be (en/de)coded\n    let color: NSColor\n}\n\nextension CodableColor: Encodable {\n\n    public func encode(to encoder: Encoder) throws {\n        let nsCoder = NSKeyedArchiver(requiringSecureCoding: true)\n        color.encode(with: nsCoder)\n        var container = encoder.unkeyedContainer()\n        try container.encode(nsCoder.encodedData)\n    }\n}\n\nextension CodableColor: Decodable {\n\n    public init(from decoder: Decoder) throws {\n        var container = try decoder.unkeyedContainer()\n        let decodedData = try container.decode(Data.self)\n        let nsCoder = try NSKeyedUnarchiver(forReadingFrom: decodedData)\n        self.color = NSColor(coder: nsCoder).unsafelyUnwrapped\n    }\n}\n\npublic extension NSColor {\n    func codable() -> CodableColor {\n        return CodableColor(color: self)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/NSWorkspace+App.swift",
    "content": "//\n//  NSWorkspace+App.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 01/07/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nextension NSWorkspace {\n    var sourceTreeAppInstalled: Bool {\n        (NSWorkspace.shared.urlForApplication(withBundleIdentifier: \"com.torusknot.SourceTreeNotMAS\") != nil)\n    }\n    \n    var forkAppInstalled: Bool {\n        (NSWorkspace.shared.urlForApplication(withBundleIdentifier: \"com.DanPristupov.Fork\") != nil)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/NSWorkspace+Execute.swift",
    "content": "//\n//  NSWorkspace+Execute.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nextension NSWorkspace {\n\n    static func execute(command: TerminalCommand, forProject project: Project? = nil) {\n        switch command.executionMethod {\n            case .inTerminal:\n                executeInTerminal(command: command, project: project)\n            case .justOpen:\n                open(project: project, withCommand: command)\n        }\n    }\n\n    static func showErrorAlert(withMessage message: String) {\n        let alert = NSAlert()\n        alert.messageText = \"Something went wrong\"\n        alert.informativeText = message\n        alert.alertStyle = NSAlert.Style.warning\n        alert.addButton(withTitle: \"OK\")\n        alert.runModal()\n    }\n}\n\nprivate extension NSWorkspace {\n    static func open(project: Project?, withCommand command: TerminalCommand) {\n        switch command {\n            case .openWorkspace:\n                guard let url = project?.workspaceURL ?? project?.projectURL else { return }\n                NSWorkspace.shared.open(url)\n            case .openSwiftPackage:\n                guard let url = project?.swiftPackageURL else { return }\n                NSWorkspace.shared.open(url)\n            case .finder:\n                guard let url = project?.urlPath else { return }\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            case .openXcodeDerivedData:\n                guard let url = URL(string: directDerivedDataFolderPath) else { return }\n                NSWorkspace.shared.activateFileViewerSelecting([url])\n            default:\n                break\n        }\n    }\n\n    static func executeInTerminal(command: TerminalCommand, project: Project?) {\n        guard let scriptText = command.script(for: project) else {\n            return\n        }\n        let script = NSAppleScript(source: scriptText)\n        var error: NSDictionary?\n        script?.executeAndReturnError(&error)\n        if var errorMessage = error?[\"NSAppleScriptErrorBriefMessage\"] as? String {\n            if let errorNumber = error?[\"NSAppleScriptErrorNumber\"] as? NSNumber,\n                errorNumber == NSNumber(integerLiteral: -1728) {\n                errorMessage = \"Please open Terminal app\"\n            }\n            NSWorkspace.showErrorAlert(withMessage: errorMessage)\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/NotificationNames.swift",
    "content": "//\n//  NotificationNames.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 13/03/2021.\n//  Copyright © 2021 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport Foundation\n\nextension NSNotification.Name {\n    static let closePreferencesController = NSNotification.Name(\"closePreferencesController\")\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/String+Components.swift",
    "content": "//\n//  String+Components.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 17/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nextension String {\n    var lastComponent: Substring? {\n        split(separator: \"/\").last\n    }\n\n    var removeFilePath: String? {\n        replacingOccurrences(of: \"file://\", with: \"\")\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/Extensions/View+If.swift",
    "content": "//\n//  View+If.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 11/03/2021.\n//  Copyright © 2021 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nextension View {\n    @ViewBuilder\n    func `if`<Transform: View>(\n        _ condition: Bool,\n        transform: (Self) -> Transform\n    ) -> some View {\n        if condition {\n            transform(self)\n        } else {\n            self\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/ProfileFile.swift",
    "content": "//\n//  ProfileFile.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 29/06/2022.\n//  Copyright © 2022 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport Foundation\n\nenum ProfileFile {\n    case z\n    case bash\n    case custom(name: String, path: URL)\n}\n\nextension ProfileFile {\n    var fileURL: URL {\n        switch self {\n        case .z, .bash: return parentURL.appendingPathComponent(fileName) // we need to add name of the file\n        case .custom: return parentURL // name of the file is already in the parent path\n        }\n    }\n    \n    var aliases: [Alias] {\n        let aliasString = \"alias \"\n        var aliasesArray: [Alias] = []\n        let commands = content?.split(separator: \"\\n\").map(String.init)\n        for command in commands ?? [] where command.contains(aliasString) {\n            let aliases = command.split(separator: \"=\").map(String.init)\n            if let aliasName = aliases.first?.replacingOccurrences(of: aliasString, with: \"\") {\n                aliasesArray.append(Alias(name: aliasName))\n            }\n        }\n        return aliasesArray\n    }\n}\n\nfileprivate extension ProfileFile {\n     var fileName: String {\n        switch self {\n        case .z: return \".zprofile\"\n        case .bash: return \".bash_profile\"\n        case .custom(let name, _): return name\n        }\n    }\n    \n    var parentURL: URL {\n        switch self {\n        case .z, .bash: return FileManager.default.homeDirectoryForCurrentUser\n        case .custom(_, let path): return path\n        }\n    }\n    \n    var content: String? {\n        do {\n            return try String(contentsOf: fileURL, encoding: .utf8)\n        } catch {\n            return nil\n        }\n    }\n}\n\nextension ProfileFile: Equatable {\n    static func ==(lhs: ProfileFile, rhs: ProfileFile) -> Bool {\n        switch (lhs, rhs) {\n            case (.z, .z), (.bash, .bash):\n                return true\n            case (.custom(let lhsName, let lhsURL), .custom(let rhsName, let rhsURL)):\n                return lhsName == rhsName && lhsURL == rhsURL\n            default:\n                return false\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/PropertyWrappers/UserDefaultsWrapper.swift",
    "content": "//\n//  UserDefaultsWrapper.swift\n//  KLCommons\n//\n//  Created by Dima Kalachniuk on 17/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nprivate protocol AnyOptional {\n    var isNil: Bool { get }\n}\n\nextension Optional: AnyOptional {\n    var isNil: Bool { self == nil }\n}\n\n@propertyWrapper\npublic struct UserDefault<T> {\n    let key: String\n    let defaultValue: T\n\n    var storage: UserDefaults = .standard\n\n    public init(_ key: String, defaultValue: T, storage: UserDefaults = .standard) {\n        self.key = key\n        self.defaultValue = defaultValue\n        self.storage = storage\n    }\n\n    public var wrappedValue: T {\n        get {\n            UserDefaults.standard.object(forKey: key) as? T ?? defaultValue\n        }\n        set {\n            if let optional = newValue as? AnyOptional, optional.isNil {\n                storage.removeObject(forKey: key)\n            } else {\n                storage.setValue(newValue, forKey: key)\n            }\n        }\n    }\n}\n\npublic extension UserDefault where T: ExpressibleByNilLiteral {\n     init(_ key: String, storage: UserDefaults = .standard) {\n        self.init(key, defaultValue: nil, storage: storage)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Logic/UserDefaultsConfig.swift",
    "content": "//\n//  UserDefaultsConfig.swift\n//  Tim\n//\n//  Created by Dima Kalachniuk on 17/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\n\nstruct UserDefaultsConfig {\n    @UserDefault(\"projects\", defaultValue: nil)\n    static var projects: Data?\n\n    @UserDefault(\"hintDisabled\", defaultValue: false)\n    static var hintDisabled: Bool\n\n    @UserDefault(\"showProjectIcon\", defaultValue: true)\n    static var showProjectIcon: Bool\n    \n    @UserDefault(\"showAliases\", defaultValue: true)\n    static var showAliases: Bool\n\n    @UserDefault(\"customTerminalCommands\", defaultValue: nil)\n    static var customTerminalCommands: Data?\n    \n    @UserDefault(\"aliases\", defaultValue: nil)\n    private static var aliases: Data?\n}\n\nextension UserDefaultsConfig {\n    static var projectObjects: [Project] {\n        if let projectsData = UserDefaultsConfig.projects {\n            do {\n                return try JSONDecoder().decode([Project].self, from: projectsData)\n            } catch { }\n        }\n        return []\n    }\n    \n    static var customTerminalCommandObjects: [CustomCommand] {\n        if let commandsData = UserDefaultsConfig.customTerminalCommands {\n            do {\n                return try JSONDecoder().decode([CustomCommand].self, from: commandsData)\n            } catch { }\n        }\n        return []\n    }\n}\n\nextension UserDefaultsConfig {\n    \n    static func addNewAliasTerminalCommands(profileFiles: [ProfileFile]) {\n        for file in profileFiles {\n            UserDefaultsConfig.addNewAliasTerminalCommands(profileFile: file)\n        }\n        \n    }\n    \n    private static func addNewAliasTerminalCommands(profileFile: ProfileFile) {\n        UserDefaultsConfig.addNewAliasTerminalCommands(profileFile.aliases)\n    }\n    \n    static func addNewAliasTerminalCommands(_ aliases: [Alias]) {\n        let allAliases = Set(UserDefaultsConfig.aliasTerminalCommands + aliases)\n        if let encodedAliases = try? JSONEncoder().encode(allAliases) {\n            UserDefaultsConfig.aliases = encodedAliases\n        }\n    }\n    \n    static func removeAlias(_ alias: Alias) {\n        var allAliases = UserDefaultsConfig.aliasTerminalCommands\n        allAliases.removeAll(where: { $0.name == alias.name })\n        \n        if let encodedAliases = try? JSONEncoder().encode(allAliases) {\n            UserDefaultsConfig.aliases = encodedAliases\n        }\n    }\n    \n    static var aliasTerminalCommands: [Alias] {\n        if let aliases = UserDefaultsConfig.aliases {\n            do {\n                return try JSONDecoder().decode([Alias].self, from: aliases)\n            } catch {}\n        }\n        return []\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 9.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"16x16\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 8-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 8.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"32x32\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 7.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 6.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"128x128\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 4-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 4.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"256x256\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 3-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy 3.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"512x512\",\n      \"idiom\" : \"mac\",\n      \"filename\" : \"photo_2020-06-17 10.58.36 copy.png\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/add.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"iconfinder_folder-plus_3325131.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/arrow.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"􀙚.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/close.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"close.pdf\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/gear.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"gear.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\",\n    \"preserves-vector-representation\" : true\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/more.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"more.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/packageSwift.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-swift.svg\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/plus.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"icons8-plus.svg\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"properties\" : {\n    \"preserves-vector-representation\" : true,\n    \"template-rendering-intent\" : \"template\"\n  }\n}\n"
  },
  {
    "path": "XcodeProjects/Resourses/Assets.xcassets/terminal.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"code-terminal.pdf\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\",\n    \"preserves-vector-representation\" : true\n  }\n}"
  },
  {
    "path": "XcodeProjects/Resourses/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"15705\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"15705\"/>\n    </dependencies>\n    <scenes>\n        <!--Application-->\n        <scene sceneID=\"JPo-4y-FX3\">\n            <objects>\n                <application id=\"hnw-xV-0zn\" sceneMemberID=\"viewController\">\n                    <menu key=\"mainMenu\" title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n                        <items>\n                            <menuItem title=\"XcodeProjects\" id=\"1Xt-HY-uBw\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"XcodeProjects\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                                    <items>\n                                        <menuItem title=\"About XcodeProjects\" id=\"5kV-Vb-QxS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontStandardAboutPanel:\" target=\"Ady-hI-5gd\" id=\"Exp-CZ-Vem\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                                    <items>\n                                        <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                            <connections>\n                                                <action selector=\"newDocument:\" target=\"Ady-hI-5gd\" id=\"4Si-XN-c54\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                            <connections>\n                                                <action selector=\"openDocument:\" target=\"Ady-hI-5gd\" id=\"bVn-NM-KNZ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                                <items>\n                                                    <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"clearRecentDocuments:\" target=\"Ady-hI-5gd\" id=\"Daa-9d-B3U\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                                        <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                            <connections>\n                                                <action selector=\"performClose:\" target=\"Ady-hI-5gd\" id=\"HmO-Ls-i7Q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                            <connections>\n                                                <action selector=\"saveDocument:\" target=\"Ady-hI-5gd\" id=\"teZ-XB-qJY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                            <connections>\n                                                <action selector=\"saveDocumentAs:\" target=\"Ady-hI-5gd\" id=\"mDf-zr-I0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                            <connections>\n                                                <action selector=\"revertDocumentToSaved:\" target=\"Ady-hI-5gd\" id=\"iJ3-Pv-kwq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                                        <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"runPageLayout:\" target=\"Ady-hI-5gd\" id=\"Din-rz-gC5\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                            <connections>\n                                                <action selector=\"print:\" target=\"Ady-hI-5gd\" id=\"qaZ-4w-aoO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                                    <items>\n                                        <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                            <connections>\n                                                <action selector=\"undo:\" target=\"Ady-hI-5gd\" id=\"M6e-cu-g7V\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                            <connections>\n                                                <action selector=\"redo:\" target=\"Ady-hI-5gd\" id=\"oIA-Rs-6OD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                                        <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                            <connections>\n                                                <action selector=\"cut:\" target=\"Ady-hI-5gd\" id=\"YJe-68-I9s\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                            <connections>\n                                                <action selector=\"copy:\" target=\"Ady-hI-5gd\" id=\"G1f-GL-Joy\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                            <connections>\n                                                <action selector=\"paste:\" target=\"Ady-hI-5gd\" id=\"UvS-8e-Qdg\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteAsPlainText:\" target=\"Ady-hI-5gd\" id=\"cEh-KX-wJQ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"delete:\" target=\"Ady-hI-5gd\" id=\"0Mk-Ml-PaM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                            <connections>\n                                                <action selector=\"selectAll:\" target=\"Ady-hI-5gd\" id=\"VNm-Mi-diN\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                                        <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                                <items>\n                                                    <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"cD7-Qs-BN4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"WD3-Gg-5AJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"NDo-RZ-v9R\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"HOh-sY-3ay\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                                        <connections>\n                                                            <action selector=\"performFindPanelAction:\" target=\"Ady-hI-5gd\" id=\"U76-nv-p5D\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                                        <connections>\n                                                            <action selector=\"centerSelectionInVisibleArea:\" target=\"Ady-hI-5gd\" id=\"IOG-6D-g5B\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                                <items>\n                                                    <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                                        <connections>\n                                                            <action selector=\"showGuessPanel:\" target=\"Ady-hI-5gd\" id=\"vFj-Ks-hy3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                                        <connections>\n                                                            <action selector=\"checkSpelling:\" target=\"Ady-hI-5gd\" id=\"fz7-VC-reM\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                                    <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleContinuousSpellChecking:\" target=\"Ady-hI-5gd\" id=\"7w6-Qz-0kB\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleGrammarChecking:\" target=\"Ady-hI-5gd\" id=\"muD-Qn-j4w\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"Ady-hI-5gd\" id=\"2lM-Qi-WAP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                                <items>\n                                                    <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"orderFrontSubstitutionsPanel:\" target=\"Ady-hI-5gd\" id=\"oku-mr-iSq\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                                    <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleSmartInsertDelete:\" target=\"Ady-hI-5gd\" id=\"3IJ-Se-DZD\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"Ady-hI-5gd\" id=\"ptq-xd-QOA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDashSubstitution:\" target=\"Ady-hI-5gd\" id=\"oCt-pO-9gS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticLinkDetection:\" target=\"Ady-hI-5gd\" id=\"Gip-E3-Fov\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticDataDetection:\" target=\"Ady-hI-5gd\" id=\"R1I-Nq-Kbl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleAutomaticTextReplacement:\" target=\"Ady-hI-5gd\" id=\"DvP-Fe-Py6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                                <items>\n                                                    <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"uppercaseWord:\" target=\"Ady-hI-5gd\" id=\"sPh-Tk-edu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowercaseWord:\" target=\"Ady-hI-5gd\" id=\"iUZ-b5-hil\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"capitalizeWord:\" target=\"Ady-hI-5gd\" id=\"26H-TL-nsh\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                                <items>\n                                                    <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"startSpeaking:\" target=\"Ady-hI-5gd\" id=\"654-Ng-kyl\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"stopSpeaking:\" target=\"Ady-hI-5gd\" id=\"dX8-6p-jy9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                                    <items>\n                                        <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                                <items>\n                                                    <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                                        <connections>\n                                                            <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                                        <connections>\n                                                            <action selector=\"underline:\" target=\"Ady-hI-5gd\" id=\"FYS-2b-JAY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                                    <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                                        <connections>\n                                                            <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                                    <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardKerning:\" target=\"Ady-hI-5gd\" id=\"6dk-9l-Ckg\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffKerning:\" target=\"Ady-hI-5gd\" id=\"U8a-gz-Maa\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"tightenKerning:\" target=\"Ady-hI-5gd\" id=\"hr7-Nz-8ro\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"loosenKerning:\" target=\"Ady-hI-5gd\" id=\"8i4-f9-FKE\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useStandardLigatures:\" target=\"Ady-hI-5gd\" id=\"7uR-wd-Dx6\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"turnOffLigatures:\" target=\"Ady-hI-5gd\" id=\"iX2-gA-Ilz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"useAllLigatures:\" target=\"Ady-hI-5gd\" id=\"KcB-kA-TuK\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                            <items>\n                                                                <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"unscript:\" target=\"Ady-hI-5gd\" id=\"0vZ-95-Ywn\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"superscript:\" target=\"Ady-hI-5gd\" id=\"3qV-fo-wpU\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"subscript:\" target=\"Ady-hI-5gd\" id=\"Q6W-4W-IGz\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"raiseBaseline:\" target=\"Ady-hI-5gd\" id=\"4sk-31-7Q9\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"lowerBaseline:\" target=\"Ady-hI-5gd\" id=\"OF1-bc-KW4\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                                    <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                                        <connections>\n                                                            <action selector=\"orderFrontColorPanel:\" target=\"Ady-hI-5gd\" id=\"mSX-Xz-DV3\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                                    <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyFont:\" target=\"Ady-hI-5gd\" id=\"GJO-xA-L4q\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteFont:\" target=\"Ady-hI-5gd\" id=\"JfD-CL-leO\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                                <items>\n                                                    <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                                        <connections>\n                                                            <action selector=\"alignLeft:\" target=\"Ady-hI-5gd\" id=\"zUv-R1-uAa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                                        <connections>\n                                                            <action selector=\"alignCenter:\" target=\"Ady-hI-5gd\" id=\"spX-mk-kcS\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"alignJustified:\" target=\"Ady-hI-5gd\" id=\"ljL-7U-jND\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                                        <connections>\n                                                            <action selector=\"alignRight:\" target=\"Ady-hI-5gd\" id=\"r48-bG-YeY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                                    <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                            <items>\n                                                                <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"YGs-j5-SAR\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"qtV-5e-UBP\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"Lbh-J2-qVU\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"S0X-9S-QSf\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"jFq-tB-4Kx\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"5fk-qB-AqJ\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                                <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                </menuItem>\n                                                                <menuItem id=\"Nop-cj-93Q\">\n                                                                    <string key=\"title\">\tDefault</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionNatural:\" target=\"Ady-hI-5gd\" id=\"lPI-Se-ZHp\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"BgM-ve-c93\">\n                                                                    <string key=\"title\">\tLeft to Right</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"Ady-hI-5gd\" id=\"caW-Bv-w94\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                                <menuItem id=\"RB4-Sm-HuC\">\n                                                                    <string key=\"title\">\tRight to Left</string>\n                                                                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                                    <connections>\n                                                                        <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"Ady-hI-5gd\" id=\"EXD-6r-ZUu\"/>\n                                                                    </connections>\n                                                                </menuItem>\n                                                            </items>\n                                                        </menu>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                                    <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"toggleRuler:\" target=\"Ady-hI-5gd\" id=\"FOx-HJ-KwY\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"copyRuler:\" target=\"Ady-hI-5gd\" id=\"71i-fW-3W2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                                        <connections>\n                                                            <action selector=\"pasteRuler:\" target=\"Ady-hI-5gd\" id=\"cSh-wd-qM2\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                                    <items>\n                                        <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleToolbarShown:\" target=\"Ady-hI-5gd\" id=\"BXY-wc-z0C\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"runToolbarCustomizationPalette:\" target=\"Ady-hI-5gd\" id=\"pQI-g3-MTW\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                                        <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleSidebar:\" target=\"Ady-hI-5gd\" id=\"iwa-gc-5KM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"toggleFullScreen:\" target=\"Ady-hI-5gd\" id=\"dU3-MA-1Rq\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                                    <items>\n                                        <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                            <connections>\n                                                <action selector=\"performMiniaturize:\" target=\"Ady-hI-5gd\" id=\"VwT-WD-YPe\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"performZoom:\" target=\"Ady-hI-5gd\" id=\"DIl-cC-cCs\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                                        <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"arrangeInFront:\" target=\"Ady-hI-5gd\" id=\"DRN-fu-gQh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                                    <items>\n                                        <menuItem title=\"XcodeProjects Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                            <connections>\n                                                <action selector=\"showHelp:\" target=\"Ady-hI-5gd\" id=\"y7X-2Q-9no\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"PrD-fu-P6m\"/>\n                    </connections>\n                </application>\n                <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"MyProjects\" customModuleProvider=\"target\"/>\n                <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n                <customObject id=\"Ady-hI-5gd\" userLabel=\"First Responder\" customClass=\"NSResponder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"75\" y=\"0.0\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "XcodeProjects/Resourses/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.6.1</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.utilities</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>LSUIElement</key>\n\t<true/>\n\t<key>NSAppleEventsUsageDescription</key>\n\t<string>Run Scripts</string>\n\t<key>NSFileProviderDomainUsageDescription</key>\n\t<string></string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.</string>\n\t<key>NSMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n\t<key>NSSupportsAutomaticTermination</key>\n\t<true/>\n\t<key>NSSupportsSuddenTermination</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "XcodeProjects/Resourses/XcodeProjects.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.automation.apple-events</key>\n\t<true/>\n\t<key>com.apple.security.temporary-exception.apple-events</key>\n\t<array>\n\t\t<string>com.apple.systemevents</string>\n\t\t<string>com.apple.terminal</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "XcodeProjects/Support/EventMonitor.swift",
    "content": "//\n//  EventMonitor.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 06/03/20.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Cocoa\n\n// Brought to you by: https://www.raywenderlich.com/450-menus-and-popovers-in-menu-bar-apps-for-macos\n\npublic class EventMonitor {\n    private var monitor: Any?\n    private let mask: NSEvent.EventTypeMask\n    private let handler: (NSEvent?) -> Void\n\n    public init(mask: NSEvent.EventTypeMask, handler: @escaping (NSEvent?) -> Void) {\n        self.mask = mask\n        self.handler = handler\n    }\n\n    deinit {\n        stop()\n    }\n\n    public func start() {\n        monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler)\n    }\n\n    public func stop() {\n        if monitor != nil {\n            NSEvent.removeMonitor(monitor!)\n            monitor = nil\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/Support/Preferences.swift",
    "content": "//\n//  Preferences.swift\n//  StatusBuddy\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Foundation\nimport Combine\n\nfinal class Preferences: ObservableObject {\n\n    static let didChangeNotification = Notification.Name(\"com.dkcompany.xcodeprojects.PrefsChanged\")\n\n    private var appURL: URL { Bundle.main.bundleURL }\n\n    @Published private var _launchAtLoginEnabled: Bool = false\n    @Published private var _hintDisabled: Bool = UserDefaultsConfig.hintDisabled\n    @Published private var _showProjectIcon: Bool = UserDefaultsConfig.showProjectIcon\n    @Published private var _projects: [Project] = []\n    @Published private var _customTerminalCommands: [CustomCommand] = []\n    @Published private var _aliases: [Alias] = []\n    @Published private var _showAliases: Bool = UserDefaultsConfig.showAliases\n\n    // is used after podfile.lock file or project's derived data was called\n    // in order not to show that menu for the project again\n    @Published var updateProjectMenu: Bool = false\n\n    init() {\n        _launchAtLoginEnabled = launchAtLoginEnabled\n        _projects = UserDefaultsConfig.projectObjects\n        _customTerminalCommands = UserDefaultsConfig.customTerminalCommandObjects\n        _aliases = ProfileFile.z.aliases + ProfileFile.bash.aliases + UserDefaultsConfig.aliasTerminalCommands\n    }\n\n    private (set) var customTerminalCommands: [CustomCommand] {\n        get {\n            _customTerminalCommands\n        }\n        set (newCommands) {\n            _customTerminalCommands = newCommands\n            if let encodedCommands = try? JSONEncoder().encode(newCommands) {\n                UserDefaultsConfig.customTerminalCommands = encodedCommands\n            }\n        }\n    }\n\n    private (set) var projects: [Project] {\n        get {\n            _projects\n        }\n        set (newProjects) {\n            _projects = newProjects\n            if let encodedProjects = try? JSONEncoder().encode(newProjects) {\n                UserDefaultsConfig.projects = encodedProjects\n            }\n        }\n    }\n    \n    private (set) var aliases: [Alias] {\n        get {\n            _aliases\n        }\n        set (newAliases) {\n            _aliases = newAliases\n            UserDefaultsConfig.addNewAliasTerminalCommands(newAliases)\n        }\n    }\n\n    private (set) var hintDisabled: Bool {\n        get {\n            _hintDisabled\n        }\n        set (newHintDisabled) {\n            _hintDisabled = newHintDisabled\n            UserDefaultsConfig.hintDisabled = _hintDisabled\n        }\n    }\n\n    private (set) var showProjectIcon: Bool {\n        get {\n            _showProjectIcon\n        }\n        set (newShowProjectIcon) {\n            _showProjectIcon = newShowProjectIcon\n            UserDefaultsConfig.showProjectIcon = _showProjectIcon\n        }\n    }\n    \n    private (set) var showAliases: Bool {\n        get {\n            _showAliases\n        }\n        set (newValue) {\n            _showAliases = newValue\n            UserDefaultsConfig.showAliases = newValue\n        }\n    }\n\n    private (set) var launchAtLoginEnabled: Bool {\n        get {\n            _launchAtLoginEnabled || SharedFileList.sessionLoginItems().containsItem(appURL)\n        }\n        set {\n            _launchAtLoginEnabled = newValue\n\n            if newValue {\n                SharedFileList.sessionLoginItems().addItem(appURL)\n            } else {\n                SharedFileList.sessionLoginItems().removeItem(appURL)\n            }\n\n            didChange()\n        }\n    }\n\n    private func didChange() {\n        NotificationCenter.default.post(name: Self.didChangeNotification, object: self)\n    }\n}\n\nextension Preferences {\n    func hideHint() {\n        hintDisabled = true\n    }\n\n    func toggleShowProjectIcon() {\n        showProjectIcon.toggle()\n    }\n    \n    func toggleShowAliases() {\n        showAliases.toggle()\n    }\n\n    func toggleLaunchAtLogin() {\n        launchAtLoginEnabled.toggle()\n    }\n}\n\nextension Preferences {\n    \n    func addAliases(_ newAliases: [Alias]) {\n        aliases.append(contentsOf: newAliases)\n    }\n    \n    func removeAlias(_ alias: Alias) {\n        UserDefaultsConfig.removeAlias(alias)\n        aliases.removeAll(where: { $0.name == alias.name })\n    }\n    \n    func addProjects(_ newProjects: [Project]) {\n        projects.append(contentsOf: newProjects)\n    }\n\n    func moveProjects(from source: IndexSet, to destination: Int) {\n        projects.move(fromOffsets: source, toOffset: destination)\n    }\n\n    func removeProject(_ project: Project) {\n        projects.removeAll(where: { $0.name == project.name })\n    }\n\n    func removeAllProjects() {\n        projects.removeAll()\n    }\n\n    func changeProjectsColor(_ project: Project, newColor: CodableColor) {\n        guard let index = projects.firstIndex(where: { $0.id == project.id }) else {\n            return\n        }\n        project.color = newColor\n        projects[index] = project\n\n        CodableColorPicker.shared.setupUsedColors()\n    }\n    \n    func changeProjectsIcon(_ project: Project, iconPath: String?) {\n        guard let index = projects.firstIndex(where: { $0.id == project.id }) else {\n            return\n        }\n        project.iconPath = iconPath\n        projects[index] = project\n    }\n\n    func changeProjectsName(_ project: Project, newName: String) {\n        guard let index = projects.firstIndex(where: { $0.id == project.id }) else {\n            return\n        }\n        project.name = newName\n        projects[index] = project\n    }\n\n    func addNewTerminalCommand(_ command: CustomCommand) -> Result<Bool, PreferencesError> {\n        if !customTerminalCommands.contains(where: { $0.command == command.command }) {\n            customTerminalCommands.append(command)\n            return .success(true)\n        } else {\n            return .failure(.terminalCommandAlreadyExists)\n        }\n    }\n\n    func removeCustomTerminalCommand(_ command: CustomCommand){\n        customTerminalCommands.removeAll(where: { $0.command == command.command })\n    }\n}\n\nenum PreferencesError: Error {\n    case terminalCommandAlreadyExists\n}\n"
  },
  {
    "path": "XcodeProjects/Support/SharedFileList.h",
    "content": "//\n//  SharedFileList.h\n//  NoiseBuddy\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface SharedFileList : NSObject\n\n+ (instancetype)sessionLoginItems;\n\n@property (nonatomic, readonly) NSSet<NSURL *> *items;\n\n@property (nonatomic, copy, nullable) void(^changeHandler)(SharedFileList *);\n\n- (BOOL)containsItem:(NSURL *)url;\n- (void)addItem:(NSURL *)url;\n- (void)removeItem:(NSURL *)url;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "XcodeProjects/Support/SharedFileList.m",
    "content": "//\n//  SharedFileList.m\n//  SyzygyKit\n//\n//  Created by Dave DeLong on 9/22/18.\n//  Copyright © 2018 Syzygy. All rights reserved.\n//\n\n#import \"SharedFileList.h\"\n\n#import <CoreServices/CoreServices.h>\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n\nvoid sharedFileListDidChange(LSSharedFileListRef inList, void *context);\n\n@implementation SharedFileList {\n    LSSharedFileListRef _listRef;\n    \n    NSSet *_listSnapshot;\n}\n\n+ (BOOL)automaticallyNotifiesObserversOfItems { return NO; }\n\n+ (instancetype)sessionLoginItems {\n    return [[self alloc] initWithType:kLSSharedFileListSessionLoginItems];\n}\n\n- (instancetype)initWithType:(CFStringRef)type {\n    self = [super init];\n    if (self) {\n        _listRef = LSSharedFileListCreate(NULL, type, NULL);\n        _listSnapshot = [self _snapshot];\n        \n        LSSharedFileListAddObserver(_listRef,\n                                    CFRunLoopGetMain(),\n                                    (CFStringRef)NSDefaultRunLoopMode,\n                                    sharedFileListDidChange,\n                                    (voidPtr)CFBridgingRetain(self));\n    }\n    return self;\n}\n\n- (void)dealloc {\n    LSSharedFileListRemoveObserver(_listRef,\n                                   CFRunLoopGetMain(),\n                                   (CFStringRef)NSDefaultRunLoopMode,\n                                   sharedFileListDidChange,\n                                   (__bridge void *)(self));\n    CFRelease(_listRef);\n}\n\n- (NSSet *)items { return [_listSnapshot copy]; }\n\n- (NSSet *)_snapshot {\n    NSMutableSet *snapshot = [NSMutableSet set];\n    \n    NSArray *listSnapshot = (NSArray *)CFBridgingRelease(LSSharedFileListCopySnapshot(_listRef, NULL));\n    for (id itemObject in listSnapshot) {\n        LSSharedFileListItemRef item = (__bridge LSSharedFileListItemRef)itemObject;\n        UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes;\n        CFURLRef currentItemURL = NULL;\n        LSSharedFileListItemResolve(item, resolutionFlags, &currentItemURL, NULL);\n        NSURL *itemURL = CFBridgingRelease(currentItemURL);\n        if (itemURL != nil) {\n            [snapshot addObject:itemURL];\n        }\n    }\n    \n    return snapshot;\n}\n\n- (void)_listDidChange {\n    NSSet *newSnapshot = [self _snapshot];\n    \n    [self willChangeValueForKey:@\"items\"];\n    _listSnapshot = newSnapshot;\n    [self didChangeValueForKey:@\"items\"];\n    \n    if (self.changeHandler != nil) {\n        self.changeHandler(self);\n    }\n}\n\n- (BOOL)containsItem:(NSURL *)url { return [_listSnapshot containsObject:url]; }\n\n- (void)addItem:(NSURL *)url {\n    if ([self containsItem:url] == YES) { return; }\n    LSSharedFileListInsertItemURL(_listRef, kLSSharedFileListItemLast, NULL, NULL, (__bridge CFURLRef)url, NULL, NULL);\n}\n\n- (void)removeItem:(NSURL *)url {\n    if ([self containsItem:url] == NO) { return; }\n    \n    NSArray *listSnapshot = (NSArray *)CFBridgingRelease(LSSharedFileListCopySnapshot(_listRef, NULL));\n    for (id itemObject in listSnapshot) {\n        LSSharedFileListItemRef item = (__bridge LSSharedFileListItemRef)itemObject;\n        UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes;\n        CFURLRef currentItemURL = NULL;\n        LSSharedFileListItemResolve(item, resolutionFlags, &currentItemURL, NULL);\n        NSURL *itemURL = CFBridgingRelease(currentItemURL);\n        if ([itemURL isEqual:url]) {\n            LSSharedFileListItemRemove(_listRef, item);\n        }\n    }\n}\n\n@end\n\nvoid sharedFileListDidChange(LSSharedFileListRef inList, void *context) {\n    SharedFileList *list = (__bridge id)context;\n    [list _listDidChange];\n}\n\n#pragma clang diagnostic pop\n"
  },
  {
    "path": "XcodeProjects/Support/XcodeProjects-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"SharedFileList.h\"\n"
  },
  {
    "path": "XcodeProjects/UI/Buttons/AddAliasButton.swift",
    "content": "//\n//  AddAliasButton.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 14/07/2023.\n//  Copyright © 2023 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct AddAliasButton: View {\n    \n    let action: (() -> Void)\n    \n    var body: some View {\n        Button(action: action) {\n            Image(\"plus\")\n                .resizable()\n                .renderingMode(.template)\n                .frame(width: 16, height: 16)\n                .foregroundColor(Color(NSColor.labelColor))\n        }.buttonStyle(BorderlessButtonStyle())\n    }\n}\n\n\nstruct AddAliasButton_Previews: PreviewProvider {\n    static var previews: some View {\n        AddAliasButton(action: {})\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Buttons/AddCustomCommandButton.swift",
    "content": "//\n//  AddCustomCommandButton.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 23/02/2022.\n//  Copyright © 2022 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct AddCustomCommandButton: View {\n\n    let action: (() -> Void)\n\n    var body: some View {\n        Button(action: action) {\n            Image(\"terminal\")\n                .resizable()\n                .renderingMode(.template)\n                .frame(width: 16, height: 16)\n                .foregroundColor(Color(NSColor.labelColor))\n        }.buttonStyle(BorderlessButtonStyle())\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Buttons/AddProjectButton.swift",
    "content": "//\n//  PlusButton.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 17/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct AddProjectButton: View {\n\n    let action: (() -> Void)\n\n    var body: some View {\n        Button(action: action) {\n            Image(\"add\")\n                .resizable()\n                .renderingMode(.template)\n                .frame(width: 16, height: 16)\n                .foregroundColor(Color(NSColor.labelColor))\n        }.buttonStyle(BorderlessButtonStyle())\n    }\n}\n\n"
  },
  {
    "path": "XcodeProjects/UI/Buttons/PreferencesView.swift",
    "content": "//\n//  PreferencesView.swift\n//  StatusBuddy\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct PreferencesView: View {\n    @EnvironmentObject var preferences: Preferences\n    @State private var showingRemoveAllProjectsAlert = false\n    @State private var showAliases = UserDefaultsConfig.showAliases\n\n    var body: some View {\n        MenuButton(label: Image(\"gear\")) {\n\n            DividerSection(title: \"About\")\n            Button(action: openGithub, label: { Text(\"Open in GitHub\") })\n\n            DividerSection(title: \"Derived Data\")\n            Button(action: openDerivedData, label: { Text(TerminalCommand.openXcodeDerivedData.title) })\n            Button(action: clearDerivedData, label: { Text(\"Clear derived data\") })\n\n            Group {\n                DividerSection(title:\"Preferences\")\n                Button(action: toggleLaunchAtLogin, label: {\n                    HStack(spacing: 4) {\n                        Image(systemName: \"checkmark\")\n                            .frame(width: 10, height: 10)\n                            //.opacity(self.preferences.launchAtLoginEnabled ? 1 : 0)\n                            .if(self.preferences.launchAtLoginEnabled == false) {\n                                $0.hidden()\n                            }\n                        Text(\"Launch at Login\")\n                    }.offset(x: -14, y: 0)\n                })\n                Button(action: toggleShowProjectIcon, label: {\n                    HStack(spacing: 4) {\n                        Image(systemName: \"checkmark\")\n                            .frame(width: 10, height: 10)\n                            //                        .opacity(self.preferences.showProjectIcon ? 1 : 0)\n                            .if(self.preferences.showProjectIcon == false) {\n                                $0.hidden()\n                            }\n                        Text(\"Show project's icon\")\n                    }.offset(x: -14, y: 0)\n                })\n\n                Button(action: {\n                    let controller = ProjectPreferencesViewController(preferences: preferences,\n                                                                      type: .addTerminalCommand)\n                    controller.window?.title = \"Add custom command\"\n                    controller.showWindow(nil)\n                    AppDelegate.closePopover()\n                }, label: { Text(\"Add custom command\") })\n            }\n\n            if !self.preferences.projects.isEmpty {\n                DividerSection(title: nil)\n                Button(\"Remove All projects\") {\n                    showingRemoveAllProjectsAlert = true\n                }\n            }\n            Group {\n                DividerSection(title: nil)\n                let text = showAliases ? \"Turn Off Aliases Tab\" : \"Turn On Aliases Tab\"\n                Button(text) {\n                    preferences.toggleShowAliases()\n                    showAliases.toggle()\n                }\n\n                DividerSection(title: nil)\n                Button(action: quit, label: { Text(\"Quit\") })\n            }\n            \n        }\n        .menuButtonStyle(BorderlessButtonMenuButtonStyle())\n        .alert(isPresented: $showingRemoveAllProjectsAlert, content: {\n            Alert(title: Text(\"Remove all projects\"),\n                  message: Text(\"You can't undo it later\"),\n                  primaryButton: .default(Text(\"Remove\"), action: {\n                    removeProjects()\n                  }),\n                  secondaryButton: .cancel(Text(\"No\")))\n        })\n    }\n}\n\nprivate extension PreferencesView {\n    func toggleLaunchAtLogin() {\n        preferences.toggleLaunchAtLogin()\n    }\n\n    func toggleShowProjectIcon() {\n        preferences.toggleShowProjectIcon()\n    }\n\n    func openGithub() {\n        if let githubURL = URL(string: \"https://github.com/DKalachniuk/XcodeProjects\") {\n            AppDelegate.closePopover()\n            _ = NSWorkspace.shared.open(githubURL)\n        }\n    }\n\n    func removeProjects() {\n        preferences.removeAllProjects()\n    }\n\n    func quit() {\n        NSApp.terminate(nil)\n    }\n\n    func clearDerivedData() {\n        NSWorkspace.execute(command: .clearXcodeDerivedData)\n    }\n\n    func openDerivedData() {\n        NSWorkspace.execute(command: .openXcodeDerivedData)\n    }\n}\n\nstruct PreferencesView_Previews: PreviewProvider {\n    static var previews: some View {\n        PreferencesView()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Buttons/TerminalCommandButton.swift",
    "content": "//\n//  TerminalCommandButton.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 11/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct TerminalCommandButton: View {\n    let project: Project\n    let command: TerminalCommand\n    var customName: String?\n    var completion: (() -> Void)?\n\n    var body: some View {\n        Button(action: {\n            AppDelegate.closePopover()\n            NSWorkspace.execute(command: self.command, forProject: self.project)\n            completion?()\n        }) {\n            Text(customName ?? command.title)\n        }\n    }\n}\n\nstruct TerminalCommandButton_Previews: PreviewProvider {\n    static var previews: some View {\n        TerminalCommandButton(project: Project.dummy, command: .podInstall)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Cells/AliasCell.swift",
    "content": "//\n//  AliasCell.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 29/06/2022.\n//  Copyright © 2022 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct AliasCell: View {\n    let alias: Alias\n    @EnvironmentObject var preferences: Preferences\n    var completion: (() -> Void)?\n\n    var body: some View {\n        \n        VStack {\n            HStack(spacing: 0) {\n                \n                AliasNameView(alias: alias)\n\n                Divider()\n                    .frame(width: 2)\n                    .padding(0)\n\n                MenuButton(label: ActionsMenuText()) {\n                    Button(action: {\n                        preferences.removeAlias(alias)\n                    }) {\n                        Text(\"Remove \\(alias.name) from the list\")\n                    }\n                }\n                .menuButtonStyle(BorderlessButtonMenuButtonStyle())\n                .frame(width: 40, height: 40, alignment: .center)\n                .background(RoundedCorners.right)\n                .modifier(OnHover(tl: 0, tr: 12, bl: 0, br: 12))\n                .modifier(OnHoverText())\n            }\n        }\n        .background(RoundedCorners.all)\n        .onTapGesture {\n            AppDelegate.closePopover()\n            NSWorkspace.execute(command: .alias(command: alias.name))\n            completion?()\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Cells/ProjectCell.swift",
    "content": "//\n//  ProjectCell.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ProjectCell: View {\n    let project: Project\n    @EnvironmentObject var preferences: Preferences\n\n    var body: some View {\n        VStack {\n            HStack(spacing: 0) {\n                \n                ProjectNameView(project: self.project)\n                    .environmentObject(preferences)\n\n                Divider()\n                    .frame(width: 2)\n                    .padding(0)\n\n                ProjectMenuView(project: self.project)\n                    .environmentObject(preferences)\n                    .frame(width: 40, height: 40, alignment: .center)\n                    .background(RoundedCorners.right )\n                    .modifier(OnHover(tl: 0, tr: 12, bl: 0, br: 12))\n                    .modifier(OnHoverText())\n            }\n\n        }\n\n    }\n}\n\nstruct ProjectCell_Previews: PreviewProvider {\n    static var previews: some View {\n        ProjectCell(project: Project.dummy)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Controllers/ProjectPreferencesViewController.swift",
    "content": "//\n//  ProjectPreferencesViewController.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 13/08/2020.\n//  Copyright © 2020 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport Cocoa\nimport Combine\nimport SwiftUI\n\nenum ProjectPreferencesType {\n    case project\n    case addTerminalCommand\n    case addAlias\n    \n    var size: NSSize {\n        let width = self == .project ? 300 : 400\n        let height = self == .project ? 140 : 190\n        return NSSize(width: width, height: height)\n    }\n}\n\nclass ProjectPreferencesViewController: NSWindowController {\n\n    convenience init(project: Project? = nil, preferences: Preferences, type: ProjectPreferencesType) {\n        let contentView = ProjectPreferencesView(type: type, project: project).environmentObject(preferences)\n        let hostingController = NSHostingController(rootView: contentView.frame(width: type.size.width, height: type.size.height))\n        let window = NSWindow(contentViewController: hostingController)\n        window.setContentSize(type.size)\n        self.init(window: window)\n\n        NotificationCenter.default.addObserver(forName: .closePreferencesController, object: nil, queue: nil) { [self] _ in\n            dismiss()\n        }\n    }\n\n    func dismiss() {\n        close()\n        AppDelegate.closePopover()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Controllers/StatusViewController.swift",
    "content": "//\n//  EventMonitor.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 06/03/20.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport Cocoa\nimport Combine\nimport SwiftUI\n\nclass StatusViewController: NSViewController {\n\n    let preferences: Preferences\n\n    init(preferences: Preferences) {\n        self.preferences = preferences\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    required init?(coder: NSCoder) {\n        fatalError()\n    }\n\n    override func loadView() {\n        view = NSView()\n\n        preferredContentSize = NSSize(width: 360, height: 360)\n\n        let contentView = MainView().environmentObject(preferences)\n\n        let hoster = NSHostingController(rootView: contentView)\n        addChild(hoster)\n        hoster.view.autoresizingMask = [.width, .height]\n        hoster.view.frame = view.bounds\n        view.addSubview(hoster.view)\n    }\n    \n}\n"
  },
  {
    "path": "XcodeProjects/UI/Images/ArrowImage.swift",
    "content": "//\n//  ArrowImage.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 24/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nenum ArrowSize {\n    case normal\n    case small\n\n    var width: CGFloat {\n        self == .normal ? 20 : 14\n    }\n\n    var height: CGFloat {\n        self == .normal ? 16.5 : 10\n    }\n}\n\nstruct ArrowImage: View {\n\n    var size: ArrowSize = .normal\n\n    var body: some View {\n        Image(\"arrow\")\n            .resizable()\n            .renderingMode(.template)\n            .frame(width: size.width, height: size.height, alignment: .center)\n    }\n}\n\nstruct ArrowImage_Previews: PreviewProvider {\n    static var previews: some View {\n        ArrowImage()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Images/ArrowImageWithHoverPopover.swift",
    "content": "//\n//  ArrowImageWIthHoverPopover.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 01/07/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ArrowImageWithHoverPopover: View {\n    let project: Project\n    @State private var noXcodeProjectHover: Bool = false\n\n    var body: some View {\n        ArrowImage()\n        .opacity(project.hasXcodeProject ? 1.0 : 0.1)\n        .onHover(perform: { hovered in\n            if !self.project.hasXcodeProject {\n                self.noXcodeProjectHover = hovered\n            }\n        })\n        .popover(isPresented: $noXcodeProjectHover, content: {\n            VStack(alignment: .trailing, spacing: 6) {\n                Text(\"No Xcode project/workspace was found 😔\")\n            }\n            .foregroundColor(Color(.secondaryLabelColor))\n            .font(.system(size: 11))\n            .padding()\n        })\n    }\n}\n\nstruct ArrowImageWIthHoverPopover_Previews: PreviewProvider {\n    static var previews: some View {\n        ArrowImageWithHoverPopover(project: Project.dummy)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Images/CloseHintImage.swift",
    "content": "//\n//  CloseHintImage.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 24/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct CloseHintImage: View {\n    var body: some View {\n        Image(\"close\")\n        .resizable()\n        .renderingMode(.template)\n        .frame(width: 15, height: 15, alignment: .center)\n    }\n}\n\nstruct CloseHintImage_Previews: PreviewProvider {\n    static var previews: some View {\n        CloseHintImage()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Images/PackageSwiftImage.swift",
    "content": "//\n//  PackageSwiftImage.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 12/07/2023.\n//  Copyright © 2023 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct PackageSwiftImage: View {\n\n    var size: ArrowSize = .normal\n\n    var body: some View {\n        Image(\"packageSwift\")\n            .resizable()\n            .renderingMode(.template)\n            .frame(width: size.width, height: size.height, alignment: .center)\n    }\n}\n\nstruct PackageSwiftImagee_Previews: PreviewProvider {\n    static var previews: some View {\n        ArrowImage()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Modifiers/OnHover.swift",
    "content": "//\n//  OnHover.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 22/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct OnHover: ViewModifier {\n    @State private var isHovered = false\n\n    var tl: CGFloat = 0.0\n    var tr: CGFloat = 0.0\n    var bl: CGFloat = 0.0\n    var br: CGFloat = 0.0\n\n    func body(content: Content) -> some View {\n        content\n            .onHover(perform: { isHovered in\n                self.isHovered = isHovered\n            })\n            .background(isHovered ?\n                RoundedCorners(color: Color.primary.opacity(0.2), tl: self.tl, tr: self.tr, bl: self.bl, br: self.br) :\n                RoundedCorners(color: Color.clear))\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Modifiers/OnHoverText.swift",
    "content": "//\n//  OnHoverText.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 22/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct OnHoverText: ViewModifier {\n    @State private var isHovered = false\n\n    func body(content: Content) -> some View {\n        content\n            .onHover(perform: { isHovered in\n                self.isHovered = isHovered\n            })\n            .foregroundColor(isHovered ? Color.primary : Color.primary.opacity(0.5))\n    }\n}\n\n"
  },
  {
    "path": "XcodeProjects/UI/Modifiers/RoundedCorners.swift",
    "content": "//\n//  RoundedCorners.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 22/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct RoundedCorners: View {\n    var color: Color\n    var tl: CGFloat = 0.0\n    var tr: CGFloat = 0.0\n    var bl: CGFloat = 0.0\n    var br: CGFloat = 0.0\n\n    var body: some View {\n        GeometryReader { geometry in\n            Path { path in\n\n                let w = geometry.size.width\n                let h = geometry.size.height\n\n                // Make sure we do not exceed the size of the rectangle\n                let tr = min(min(self.tr, h/2), w/2)\n                let tl = min(min(self.tl, h/2), w/2)\n                let bl = min(min(self.bl, h/2), w/2)\n                let br = min(min(self.br, h/2), w/2)\n\n                path.move(to: CGPoint(x: w / 2.0, y: 0))\n                path.addLine(to: CGPoint(x: w - tr, y: 0))\n                path.addArc(center: CGPoint(x: w - tr, y: tr), radius: tr, startAngle: Angle(degrees: -90), endAngle: Angle(degrees: 0), clockwise: false)\n                path.addLine(to: CGPoint(x: w, y: h - br))\n                path.addArc(center: CGPoint(x: w - br, y: h - br), radius: br, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 90), clockwise: false)\n                path.addLine(to: CGPoint(x: bl, y: h))\n                path.addArc(center: CGPoint(x: bl, y: h - bl), radius: bl, startAngle: Angle(degrees: 90), endAngle: Angle(degrees: 180), clockwise: false)\n                path.addLine(to: CGPoint(x: 0, y: tl))\n                path.addArc(center: CGPoint(x: tl, y: tl), radius: tl, startAngle: Angle(degrees: 180), endAngle: Angle(degrees: 270), clockwise: false)\n            }\n            .fill(self.color)\n        }\n    }\n}\n\nextension RoundedCorners {\n    static let right = RoundedCorners(color: Color.gray.opacity(0.25), tl: 0, tr: 12, bl: 0, br: 12)\n    static let left = RoundedCorners(color: Color.gray.opacity(0.25), tl: 12, tr: 0, bl: 12, br: 0)\n    static let all = RoundedCorners(color: Color.gray.opacity(0.25), tl: 12, tr: 12, bl: 12, br: 12)\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/ActionsMenuText.swift",
    "content": "//\n//  ActionsMenuText.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 22/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ActionsMenuText: View {\n\n    var body: some View {\n        Text(\"   ...\")\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/AliasNameView.swift",
    "content": "//\n//  AliasNameView.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 14/07/2023.\n//  Copyright © 2023 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct AliasNameView: View {\n    \n    let alias: Alias\n    \n    var body: some View {\n        HStack {\n            Spacer()\n            Text(alias.name)\n            Spacer()\n        }\n        .frame(height: 40)\n        .background(RoundedCorners.left)\n        .modifier(OnHover(tl: 12, tr: 0, bl: 12, br: 0))\n        \n    }\n}\n\nstruct AliasCellView_Previews: PreviewProvider {\n    static var previews: some View {\n        AliasNameView(alias: Alias(name: \"pod install\"))\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/DividerSection.swift",
    "content": "//\n//  DividerSection.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 20/03/2021.\n//  Copyright © 2021 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct DividerSection: View {\n\n    let title: String?\n\n    var body: some View {\n        VStack {\n            Divider()\n            if let title = title {\n                Text(title)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/HintView.swift",
    "content": "//\n//  HintView.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 24/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct HintView: View {\n    @EnvironmentObject var preferences: Preferences\n    @State var showCloseButton = false\n\n    var body: some View {\n        VStack(spacing: 8) {\n            Spacer().frame(height: 1)\n            HStack {\n                Spacer().frame(width: 8)\n                ArrowImage(size: .small)\n                    .foregroundColor(Color.secondary)\n                Text(\"- open with Xcode. Click 􀍠 for more options\")\n                    .font(Font.system(size: 10))\n                    .foregroundColor(Color.secondary)\n                Spacer()\n                if showCloseButton {\n                    HStack {\n                        Button(action: {\n                            self.preferences.hideHint()\n                        }, label: {\n                            CloseHintImage()\n                        })\n                        .buttonStyle(BorderlessButtonStyle())\n                        .frame(width: 10, height: 10, alignment: .center)\n\n                        Spacer().frame(width: 15)\n                    }\n                }\n            }\n            HStack {\n                Spacer().frame(width: 8)\n                Text(\"long tap on project's icon to set custom image icon\")\n                    .font(Font.system(size: 10))\n                    .foregroundColor(Color.secondary)\n                Spacer()\n            }\n        }\n            .padding(.leading, 10)\n            .onHover { result in\n                self.showCloseButton = result\n            }\n            .opacity(0.8)\n    }\n}\n\nstruct HintView_Previews: PreviewProvider {\n    static var previews: some View {\n        HintView()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/MainView.swift",
    "content": "//\n//  MainView.swift\n//  StatusBuddy\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct MainView: View {\n\n    @State private var searchTerm = \"\"\n    //@State private var listToShow: ListToDisplay = .projects\n    @State private var listToShow: Int = 0\n    @EnvironmentObject var preferences: Preferences\n\n//    enum ListToDisplay: Int {\n//        case projects = 0\n//        case aliases\n//    }\n    \n    private var projects: [Project] {\n        preferences.projects.filter({ searchTerm.isEmpty ? true : $0.name.lowercased().contains(searchTerm.lowercased()) })\n    }\n\n    var body: some View {\n        VStack(spacing: 0) {\n            \n            HStack(spacing: 15) {\n                Spacer().frame(width: 0)\n                TextField(\"Search in projects\", text: $searchTerm)\n                    .frame(width: 215)\n                    .textFieldStyle(RoundedBorderTextFieldStyle())\n                AddProjectButton(action: addProject)\n                AddCustomCommandButton(action: addCustomCommand)\n                PreferencesView()\n            }.padding(EdgeInsets(top: 10, leading: 10, bottom: 5, trailing: 10))\n\n            Divider().padding([.top], 3)\n\n            if listToShow == 0 || preferences.showAliases == false {\n                if projects.isEmpty {\n                    Spacer()\n                    if searchTerm.isEmpty {\n                        VStack {\n                            HStack {\n                                Text(\"Please add a project\")\n                                AddProjectButton(action: addProject)\n                            }\n                        }\n\n                    } else {\n                        Text(\"No projects\")\n                    }\n                    Spacer()\n                } else {\n                    VStack {\n                        if self.preferences.hintDisabled == false {\n                            HintView().environmentObject(self.preferences)\n                        }\n                        List {\n                            ForEach(projects) { project in\n                                ProjectCell(project: project).environmentObject(self.preferences)\n                            }\n                            .onMove(perform: move)\n                        }\n                        .padding(0)\n                    }\n                }\n            } else {\n                VStack {\n                    Spacer().frame(height: 10)\n                    HStack(spacing: 10) {\n                        Text(\"Add aliases from custom script file\")\n                        AddProjectButton(action: parseCustomScriptFile)\n                        Text(\"Add alias\")\n                        AddAliasButton(action: addCustomAlias)\n                    }\n                    \n                    let allAliases = preferences.aliases\n                    if allAliases.isEmpty {\n                        Group {\n                            Spacer()\n                            Text(\"No aliases were detected. Please add them\")\n                            Spacer()\n                        }\n                    } else {\n                        List {\n                            ForEach(allAliases) { alias in\n                                AliasCell(alias: alias, completion: nil).environmentObject(self.preferences)\n                            }\n                        }\n                    }\n                }\n            }\n            \n            if preferences.showAliases {\n                Picker(\"\", selection: $listToShow) {\n                    Text(\"Projects\").tag(0)\n                    Text(\"Aliases\").tag(1)\n                }\n                .pickerStyle(SegmentedPickerStyle())\n                .padding([.leading], -8)\n                .padding()\n            }\n        }\n    }\n    \n    func move(from source: IndexSet, to destination: Int) {\n        if searchTerm.isEmpty {\n            preferences.moveProjects(from: source, to: destination)\n        }\n    }\n}\n\nextension MainView {\n    \n    private func parseCustomScriptFile() {\n        let appDelegate: AppDelegate? = NSApplication.shared.delegate as? AppDelegate\n        let dialog = NSOpenPanel()\n        dialog.title = \"Choose script file to parse\"\n        dialog.showsResizeIndicator = true\n        dialog.showsHiddenFiles = true\n        dialog.canChooseDirectories = false\n        dialog.canCreateDirectories = false\n        dialog.allowsMultipleSelection = true\n        dialog.canChooseFiles = true\n        dialog.becomesKeyOnlyIfNeeded = true\n\n        appDelegate?.closePopover(sender: nil)\n\n        if dialog.runModal() == NSApplication.ModalResponse.OK {\n            \n            let newProfileFiles = dialog.urls.map{ProfileFile.custom(name: $0.lastPathComponent, path: $0.standardizedFileURL)}\n            preferences.addAliases(newProfileFiles.flatMap{$0.aliases})\n        } else {\n            print(\"something went wrong\")\n        }\n        appDelegate?.showPopover(sender: nil)\n    }\n    \n    private func addProject() {\n        let appDelegate: AppDelegate? = NSApplication.shared.delegate as? AppDelegate\n        let dialog = NSOpenPanel()\n        dialog.title = \"Choose a folder with your project/workspace\"\n        dialog.showsResizeIndicator = true\n        dialog.showsHiddenFiles = false\n        dialog.canChooseDirectories = true\n        dialog.canCreateDirectories = true\n        dialog.allowsMultipleSelection = true\n        dialog.canChooseFiles = false\n        dialog.becomesKeyOnlyIfNeeded = true\n\n        appDelegate?.closePopover(sender: nil)\n\n        if dialog.runModal() == NSApplication.ModalResponse.OK {\n            let projectUrls = dialog.urls\n            let projects = projectUrls.compactMap { Project(url: $0) }\n            preferences.addProjects(projects)\n            appDelegate?.showPopover(sender: nil)\n        } else {\n            print(\"something went wrong\")\n            appDelegate?.showPopover(sender: nil)\n        }\n    }\n    \n    private func addCustomCommand() {\n        let controller = ProjectPreferencesViewController(preferences: preferences,\n                                                          type: .addTerminalCommand)\n        controller.window?.title = \"Add custom command\"\n        controller.showWindow(nil)\n        AppDelegate.closePopover()\n    }\n    \n    private func addCustomAlias() {\n        let controller = ProjectPreferencesViewController(preferences: preferences,\n                                                          type: .addAlias)\n        controller.window?.title = \"Add custom alias\"\n        controller.showWindow(nil)\n        \n        AppDelegate.closePopover()\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/ProjectIcon.swift",
    "content": "//\n//  ProjectIcon.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 21/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ProjectIcon: View {\n    let project: Project\n    @EnvironmentObject var preferences: Preferences\n\n    var body: some View {\n        ZStack {\n            if let iconPath = project.iconPath,\n               let data = try? Data(contentsOf: URL(fileURLWithPath: iconPath)),\n               let nsImage = NSImage(data: data) {\n                Image(nsImage: nsImage)\n                    .resizable()\n                    .aspectRatio(contentMode: .fill)\n            } else {\n                Rectangle()\n                    .foregroundColor(Color.clear)\n                    .background(Color(self.project.color.color))\n                    .cornerRadius(8)\n\n                Text(String(self.project.name.first ?? \"-\").capitalized)\n                    .font(.system(size: 14, weight: Font.Weight.semibold))\n                    .padding(EdgeInsets(top: 0, leading: 4, bottom: 0, trailing: 4))\n                    .foregroundColor(Color.white)\n            }\n            \n        }\n        .frame(width: 24, height: 24)\n        .onTapGesture {\n            let newColor = CodableColorPicker.shared.pickRandomColor()\n            self.preferences.changeProjectsColor(self.project, newColor: newColor)\n        }\n        .onLongPressGesture { showImagePicker() }\n    }\n}\n\nprivate extension ProjectIcon {\n    func showImagePicker() {\n        let dialog = NSOpenPanel()\n        dialog.title = \"Choose an icon for your project\"\n        dialog.showsResizeIndicator = true\n        dialog.showsHiddenFiles = false\n        dialog.canChooseDirectories = false\n        dialog.canCreateDirectories = false\n        dialog.allowsMultipleSelection = false\n        dialog.canChooseFiles = true\n        dialog.becomesKeyOnlyIfNeeded = true\n        dialog.allowedFileTypes = [\"png\",\"jpg\",\"jpeg\"]\n        dialog.begin { (result) -> Void in\n            if result.rawValue == NSApplication.ModalResponse.OK.rawValue {\n                guard let selectedPath = dialog.url?.path else { return }\n                self.preferences.changeProjectsIcon(self.project, iconPath: selectedPath)\n            }\n        }\n        \n        let appDelegate: AppDelegate? = NSApplication.shared.delegate as? AppDelegate\n        appDelegate?.closePopover(sender: nil)\n    }\n}\n\nstruct ProjectIcon_Previews: PreviewProvider {\n    static var previews: some View {\n        ProjectIcon(project: Project.dummy)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/ProjectMenuView.swift",
    "content": "//\n//  ProjectMenuView.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 09/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ProjectMenuView: View {\n\n    let project: Project\n    @EnvironmentObject var preferences: Preferences\n    @State private var hover = false\n\n    var body: some View {\n        MenuButton(label: ActionsMenuText()) {\n            Group {\n                TerminalCommandButton(project: project, command: .openInTerminal)\n                TerminalCommandButton(project: project, command: .finder)\n            }\n        \n            Group {\n                if NSWorkspace.shared.sourceTreeAppInstalled {\n                    TerminalCommandButton(project: project, command: .sourceTree)\n                }\n                if NSWorkspace.shared.forkAppInstalled {\n                    TerminalCommandButton(project: project, command: .fork)\n                }\n            }\n\n            if project.hasCocoapods {\n                DividerSection(title: \"Cocoapods\")\n                TerminalCommandButton(project: project, command: .podInstall)\n                TerminalCommandButton(project: project, command: .podUpdate)\n                TerminalCommandButton(project: project, command: .podDeintegrate)\n                if project.hasPodfileLock {\n                    TerminalCommandButton(project: project, command: .removePodfileLock) {\n                        preferences.updateProjectMenu = true\n                    }\n                }\n\n            }\n\n            customCommandButtons()\n\n            DividerSection(title: \"Preferences\")\n            if project.hasDerivedData {\n                TerminalCommandButton(project: project,\n                                      command: .clearProjectDerivedData,\n                                      customName: \"Clear \\(project.name) derived data folder\") {\n                    preferences.updateProjectMenu = true\n                }\n            }\n\n            Button(action: {\n                let controller = ProjectPreferencesViewController(project: project,\n                                                                  preferences: preferences,\n                                                                  type: .project)\n                controller.window?.title = \"\\(self.project.name)'s preferences\"\n                controller.showWindow(nil)\n                AppDelegate.closePopover()\n            }) {\n                Text(\"Rename project\")\n            }\n            \n            if project.iconPath != nil {\n                Button(action: {\n                    self.preferences.changeProjectsIcon(self.project, iconPath: nil)\n                }) {\n                    Text(\"Remove project's icon\")\n                }\n            }\n\n            Button(action: {\n                preferences.removeProject(project)\n            }) {\n                Text(\"Remove \\(project.name) from the list\")\n            }\n        }\n            .menuButtonStyle(BorderlessButtonMenuButtonStyle())\n\n    }\n}\n\nextension ProjectMenuView {\n\n    func customCommandButtons() -> some View {\n        VStack {\n            if !preferences.customTerminalCommands.isEmpty {\n                DividerSection(title: \"Custom commands\")\n                ForEach(preferences.customTerminalCommands, id: \\.self) { customCommand in\n                    CustomTerminalCommandButton(command: customCommand,\n                                                project: project).environmentObject(preferences)\n                }\n            }\n        }\n    }\n}\n\nstruct CustomTerminalCommandButton: View {\n    let command: CustomCommand\n    let project: Project\n    @EnvironmentObject var preferences: Preferences\n\n    var body: some View {\n        MenuButton(label: Text(command.name)) {\n            TerminalCommandButton(project: project,\n                                  command: .custom(command: command.fullCommand(for: project)))\n            Button(action: {\n                preferences.removeCustomTerminalCommand(command)\n            }) {\n                HStack(spacing: 4) {\n                    Text(\"Remove \\(command.name)\")\n                    Image(systemName: \"minus.circle.fill\")\n                        .frame(width: 10, height: 10)\n                }\n            }\n        }\n    }\n}\n\nstruct ProjectMenuView_Previews: PreviewProvider {\n    static var previews: some View {\n        ProjectMenuView(project: Project.dummy).environmentObject(Preferences())\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/ProjectNameView.swift",
    "content": "//\n//  ProjectNameView.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 22/06/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ProjectNameView: View {\n    let project: Project\n    @EnvironmentObject var preferences: Preferences\n\n    var body: some View {\n        HStack {\n\n            Spacer()\n                .frame(width: 8)\n\n            if self.preferences.showProjectIcon {\n                ProjectIcon(project: project).environmentObject(preferences)\n            }\n\n            Text(self.project.name)\n                .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 5))\n           \n            // open project\n            Spacer()\n            Button(action: {\n                AppDelegate.closePopover()\n                NSWorkspace.execute(command: .openWorkspace, forProject: self.project)\n            }) {\n                ArrowImageWithHoverPopover(project: self.project)\n            }\n            .buttonStyle(BorderlessButtonStyle())\n            .padding([.trailing], 5)\n            .modifier(OnHoverText())\n\n            // open package swift if exists\n            if project.hasSwiftPackage {\n                Button(action: {\n                    AppDelegate.closePopover()\n                    NSWorkspace.execute(command: .openSwiftPackage, forProject: self.project)\n                }) {\n                    PackageSwiftImage()\n                }\n                .buttonStyle(BorderlessButtonStyle())\n                .padding([.trailing], 5)\n                .modifier(OnHoverText())\n            }\n            \n            Spacer().frame(width: 3)\n        }\n        .frame(height: 40)\n        .background(RoundedCorners.left)\n        .modifier(OnHover(tl: 12, tr: 0, bl: 12, br: 0))\n    }\n}\n\nstruct ProjectNameView_Previews: PreviewProvider {\n    static var previews: some View {\n        ProjectNameView(project: Project.dummy)\n    }\n}\n"
  },
  {
    "path": "XcodeProjects/UI/Views/ProjectPreferencesView.swift",
    "content": "//\n//  ProjectPreferencesView.swift\n//  XcodeProjects\n//\n//  Created by Dima Kalachniuk on 13/08/2020.\n//  Copyright © 2020 com.klm.mac.myProjects. All rights reserved.\n//\n\nimport SwiftUI\n\nstruct ProjectPreferencesView: View {\n    let type: ProjectPreferencesType\n    let project: Project?\n    @State var newCommandTitle: String = \"\"\n    @State var newValue: String = \"\"\n    @EnvironmentObject var preferences: Preferences\n\n    var body: some View {\n        VStack {\n            VStack(alignment: .leading, spacing: 5) {\n                if type == .addTerminalCommand {\n                    Text(titleAddTheCommand)\n                    TextField(titleAddTheCommand, text: $newCommandTitle)\n                }\n                Text(title)\n                TextField(value, text: $newValue)\n            }.padding()\n\n            Button(action: {\n                if value != newValue {\n                    switch type {\n                        case .project:\n                            if let project = project {\n                                preferences.changeProjectsName(project, newName: newValue)\n                            }\n                        case .addTerminalCommand:\n                            let result = preferences.addNewTerminalCommand(CustomCommand(name: newCommandTitle, command: newValue))\n                            switch result {\n                                case .failure(let error):\n                                    NSWorkspace.showErrorAlert(withMessage: error.localizedDescription)\n                                    break\n                                case .success:\n                                    break\n                            }\n                        case .addAlias:\n                            preferences.addAliases([Alias(name: newValue)])\n                            break\n                    }\n                    NotificationCenter.default.post(name: .closePreferencesController, object: nil)\n                }\n            }, label: { Text(saveButton) })\n            .disabled(newValue.isEmpty)\n        }\n    }\n}\n\nprivate extension ProjectPreferencesView {\n    \n    var titleAddTheCommand: String {\n        \"Name of the command\"\n    }\n    \n    var title: String {\n        switch type {\n            case .project: return \"New name\"\n            case .addTerminalCommand: return \"Terminal command\"\n            case .addAlias: return \"Alias to call\"\n        }\n    }\n    var value: String {\n        switch type {\n            case .project: return project?.name ?? \"\"\n            case .addTerminalCommand: return \"cd <path to your project> will be added automatically\"\n            case .addAlias: return \"\"\n        }\n    }\n\n    var saveButton: String {\n        switch type {\n            case .project: return \"Rename\"\n            case .addTerminalCommand: return \"Add new command\"\n            case .addAlias: return \"Add new alias\"\n        }\n    }\n}\n\nstruct ProjectPreferencesView_Previews: PreviewProvider {\n    static var previews: some View {\n        ProjectPreferencesView(type: .project, project: Project.dummy, newValue: \"something\")\n    }\n}\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6EC78A69286C7167007F453C /* Alias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC78A68286C7167007F453C /* Alias.swift */; };\n\t\t6EC78A6B286C7808007F453C /* AliasCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC78A6A286C7808007F453C /* AliasCell.swift */; };\n\t\t6EC78A6D286C9E72007F453C /* ProfileFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC78A6C286C9E72007F453C /* ProfileFile.swift */; };\n\t\t6EE247962A5F453A00DC2B4A /* PackageSwiftImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE247952A5F453A00DC2B4A /* PackageSwiftImage.swift */; };\n\t\t6EE2479A2A61488E00DC2B4A /* AddAliasButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE247992A61488E00DC2B4A /* AddAliasButton.swift */; };\n\t\t6EE2479C2A61669700DC2B4A /* AliasNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE2479B2A61669700DC2B4A /* AliasNameView.swift */; };\n\t\tC8088D562418E5F5001239CB /* TerminalCommandButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8088D552418E5F5001239CB /* TerminalCommandButton.swift */; };\n\t\tC80D1228241583E800CBCB0F /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80D1227241583E800CBCB0F /* PreferencesView.swift */; };\n\t\tC80D122A2415840300CBCB0F /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80D12292415840300CBCB0F /* Preferences.swift */; };\n\t\tC80D122F2415842B00CBCB0F /* SharedFileList.m in Sources */ = {isa = PBXBuildFile; fileRef = C80D122E2415842B00CBCB0F /* SharedFileList.m */; };\n\t\tC80E916624A39ADF0073CF3F /* ArrowImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80E916524A39ADF0073CF3F /* ArrowImage.swift */; };\n\t\tC80E916824A39B570073CF3F /* HintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80E916724A39B570073CF3F /* HintView.swift */; };\n\t\tC80E916C24A39E2C0073CF3F /* CloseHintImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C80E916B24A39E2C0073CF3F /* CloseHintImage.swift */; };\n\t\tC8412E2A24129B4F0066A8A5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E2924129B4F0066A8A5 /* AppDelegate.swift */; };\n\t\tC8412E2E24129B530066A8A5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8412E2D24129B530066A8A5 /* Assets.xcassets */; };\n\t\tC8412E3124129B530066A8A5 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8412E3024129B530066A8A5 /* Preview Assets.xcassets */; };\n\t\tC8412E3424129B530066A8A5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C8412E3224129B530066A8A5 /* Main.storyboard */; };\n\t\tC8412E4024129B530066A8A5 /* XcodeProjectsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E3F24129B530066A8A5 /* XcodeProjectsTests.swift */; };\n\t\tC8412E4B2412A23B0066A8A5 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E4A2412A23B0066A8A5 /* EventMonitor.swift */; };\n\t\tC8412E4F2412A2A00066A8A5 /* StatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E4E2412A2A00066A8A5 /* StatusViewController.swift */; };\n\t\tC8412E512412A2F00066A8A5 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E502412A2F00066A8A5 /* MainView.swift */; };\n\t\tC8412E822412A70F0066A8A5 /* Project.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8412E812412A70F0066A8A5 /* Project.swift */; };\n\t\tC8456CF1249A540F00BAEF17 /* AddProjectButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8456CF0249A540F00BAEF17 /* AddProjectButton.swift */; };\n\t\tC855572724A14300006AF499 /* OnHover.swift in Sources */ = {isa = PBXBuildFile; fileRef = C855572624A14300006AF499 /* OnHover.swift */; };\n\t\tC855572924A144F8006AF499 /* RoundedCorners.swift in Sources */ = {isa = PBXBuildFile; fileRef = C855572824A144F8006AF499 /* RoundedCorners.swift */; };\n\t\tC855572D24A14A01006AF499 /* ActionsMenuText.swift in Sources */ = {isa = PBXBuildFile; fileRef = C855572C24A14A00006AF499 /* ActionsMenuText.swift */; };\n\t\tC855572F24A14B30006AF499 /* ProjectNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C855572E24A14B30006AF499 /* ProjectNameView.swift */; };\n\t\tC855573124A15104006AF499 /* OnHoverText.swift in Sources */ = {isa = PBXBuildFile; fileRef = C855573024A15104006AF499 /* OnHoverText.swift */; };\n\t\tC8573C44249D6EA600E1F969 /* FileManger+Content.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8573C43249D6EA600E1F969 /* FileManger+Content.swift */; };\n\t\tC8573C49249E77E400E1F969 /* TerminalScript.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8573C48249E77E400E1F969 /* TerminalScript.swift */; };\n\t\tC874747226069D600091E791 /* DividerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = C874747126069D600091E791 /* DividerSection.swift */; };\n\t\tC8A4C09B25FACA280008054A /* View+If.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A4C09A25FACA280008054A /* View+If.swift */; };\n\t\tC8A4C09F25FADFBA0008054A /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = C8A4C09E25FADFB90008054A /* README.md */; };\n\t\tC8AE963524997AC000E6B080 /* String+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8AE963424997AC000E6B080 /* String+Components.swift */; };\n\t\tC8AE96372499818200E6B080 /* CharacterSet+All.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8AE96362499818200E6B080 /* CharacterSet+All.swift */; };\n\t\tC8BE992324CA1635000D4E5E /* ProjectIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BE992224CA1635000D4E5E /* ProjectIcon.swift */; };\n\t\tC8BE992424CA1732000D4E5E /* NSColor+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8573C4E24A0045200E1F969 /* NSColor+Codable.swift */; };\n\t\tC8D35B3624CC2CB00075308D /* CodableColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D35B3524CC2CB00075308D /* CodableColorPicker.swift */; };\n\t\tC8D9623824AD31F100B70B23 /* ArrowImageWithHoverPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D9623724AD31F000B70B23 /* ArrowImageWithHoverPopover.swift */; };\n\t\tC8D9623A24AD348600B70B23 /* NSWorkspace+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D9623924AD348600B70B23 /* NSWorkspace+App.swift */; };\n\t\tC8D9F49425FCCE61004C952C /* ProjectPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D9F49325FCCE61004C952C /* ProjectPreferencesView.swift */; };\n\t\tC8D9F49725FCCE80004C952C /* ProjectPreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D9F49625FCCE80004C952C /* ProjectPreferencesViewController.swift */; };\n\t\tC8D9F49A25FCD5F6004C952C /* NotificationNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8D9F49925FCD5F6004C952C /* NotificationNames.swift */; };\n\t\tC8DB027227C6DD860048157A /* CustomCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DB027127C6DD860048157A /* CustomCommand.swift */; };\n\t\tC8DB027427C6E4410048157A /* AddCustomCommandButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DB027327C6E4410048157A /* AddCustomCommandButton.swift */; };\n\t\tC8F450F1241632D1002B9D69 /* ProjectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F450F0241632D1002B9D69 /* ProjectCell.swift */; };\n\t\tC8F450F6241638C2002B9D69 /* TerminalCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F450F5241638C2002B9D69 /* TerminalCommand.swift */; };\n\t\tC8F450FA24165C21002B9D69 /* UserDefaultsWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F450F924165C21002B9D69 /* UserDefaultsWrapper.swift */; };\n\t\tC8F450FC24165C29002B9D69 /* UserDefaultsConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F450FB24165C29002B9D69 /* UserDefaultsConfig.swift */; };\n\t\tC8F450FF24167592002B9D69 /* NSWorkspace+Execute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F450FE24167592002B9D69 /* NSWorkspace+Execute.swift */; };\n\t\tC8F451012416950D002B9D69 /* ProjectMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F451002416950D002B9D69 /* ProjectMenuView.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tC8412E3C24129B530066A8A5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C8412E1E24129B4F0066A8A5 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C8412E2524129B4F0066A8A5;\n\t\t\tremoteInfo = MyProjects;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tC80D12382415868600CBCB0F /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t6EC78A68286C7167007F453C /* Alias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alias.swift; sourceTree = \"<group>\"; };\n\t\t6EC78A6A286C7808007F453C /* AliasCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AliasCell.swift; sourceTree = \"<group>\"; };\n\t\t6EC78A6C286C9E72007F453C /* ProfileFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileFile.swift; sourceTree = \"<group>\"; };\n\t\t6EE247952A5F453A00DC2B4A /* PackageSwiftImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PackageSwiftImage.swift; sourceTree = \"<group>\"; };\n\t\t6EE247992A61488E00DC2B4A /* AddAliasButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAliasButton.swift; sourceTree = \"<group>\"; };\n\t\t6EE2479B2A61669700DC2B4A /* AliasNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AliasNameView.swift; sourceTree = \"<group>\"; };\n\t\tC8088D552418E5F5001239CB /* TerminalCommandButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalCommandButton.swift; sourceTree = \"<group>\"; };\n\t\tC80D1227241583E800CBCB0F /* PreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = \"<group>\"; };\n\t\tC80D12292415840300CBCB0F /* Preferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = \"<group>\"; };\n\t\tC80D122C2415842A00CBCB0F /* XcodeProjects-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"XcodeProjects-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tC80D122D2415842B00CBCB0F /* SharedFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedFileList.h; sourceTree = \"<group>\"; };\n\t\tC80D122E2415842B00CBCB0F /* SharedFileList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedFileList.m; sourceTree = \"<group>\"; };\n\t\tC80E916524A39ADF0073CF3F /* ArrowImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowImage.swift; sourceTree = \"<group>\"; };\n\t\tC80E916724A39B570073CF3F /* HintView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HintView.swift; sourceTree = \"<group>\"; };\n\t\tC80E916B24A39E2C0073CF3F /* CloseHintImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloseHintImage.swift; sourceTree = \"<group>\"; };\n\t\tC8412E2624129B4F0066A8A5 /* XcodeProjects.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XcodeProjects.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8412E2924129B4F0066A8A5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tC8412E2D24129B530066A8A5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC8412E3024129B530066A8A5 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\tC8412E3324129B530066A8A5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tC8412E3524129B530066A8A5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC8412E3624129B530066A8A5 /* XcodeProjects.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = XcodeProjects.entitlements; sourceTree = \"<group>\"; };\n\t\tC8412E3B24129B530066A8A5 /* XcodeProjectsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XcodeProjectsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC8412E3F24129B530066A8A5 /* XcodeProjectsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodeProjectsTests.swift; sourceTree = \"<group>\"; };\n\t\tC8412E4124129B530066A8A5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tC8412E4A2412A23B0066A8A5 /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = \"<group>\"; };\n\t\tC8412E4E2412A2A00066A8A5 /* StatusViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusViewController.swift; sourceTree = \"<group>\"; };\n\t\tC8412E502412A2F00066A8A5 /* MainView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = \"<group>\"; };\n\t\tC8412E812412A70F0066A8A5 /* Project.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Project.swift; sourceTree = \"<group>\"; };\n\t\tC8456CF0249A540F00BAEF17 /* AddProjectButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddProjectButton.swift; sourceTree = \"<group>\"; };\n\t\tC855572624A14300006AF499 /* OnHover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnHover.swift; sourceTree = \"<group>\"; };\n\t\tC855572824A144F8006AF499 /* RoundedCorners.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedCorners.swift; sourceTree = \"<group>\"; };\n\t\tC855572C24A14A00006AF499 /* ActionsMenuText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionsMenuText.swift; sourceTree = \"<group>\"; };\n\t\tC855572E24A14B30006AF499 /* ProjectNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectNameView.swift; sourceTree = \"<group>\"; };\n\t\tC855573024A15104006AF499 /* OnHoverText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnHoverText.swift; sourceTree = \"<group>\"; };\n\t\tC8573C43249D6EA600E1F969 /* FileManger+Content.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"FileManger+Content.swift\"; sourceTree = \"<group>\"; };\n\t\tC8573C48249E77E400E1F969 /* TerminalScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalScript.swift; sourceTree = \"<group>\"; };\n\t\tC8573C4E24A0045200E1F969 /* NSColor+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSColor+Codable.swift\"; sourceTree = \"<group>\"; };\n\t\tC874747126069D600091E791 /* DividerSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DividerSection.swift; sourceTree = \"<group>\"; };\n\t\tC8A4C09A25FACA280008054A /* View+If.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"View+If.swift\"; sourceTree = \"<group>\"; };\n\t\tC8A4C09E25FADFB90008054A /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; };\n\t\tC8AE963424997AC000E6B080 /* String+Components.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"String+Components.swift\"; sourceTree = \"<group>\"; };\n\t\tC8AE96362499818200E6B080 /* CharacterSet+All.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"CharacterSet+All.swift\"; sourceTree = \"<group>\"; };\n\t\tC8BE992224CA1635000D4E5E /* ProjectIcon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProjectIcon.swift; sourceTree = \"<group>\"; };\n\t\tC8D35B3524CC2CB00075308D /* CodableColorPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableColorPicker.swift; sourceTree = \"<group>\"; };\n\t\tC8D9623724AD31F000B70B23 /* ArrowImageWithHoverPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowImageWithHoverPopover.swift; sourceTree = \"<group>\"; };\n\t\tC8D9623924AD348600B70B23 /* NSWorkspace+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSWorkspace+App.swift\"; sourceTree = \"<group>\"; };\n\t\tC8D9F49325FCCE61004C952C /* ProjectPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProjectPreferencesView.swift; sourceTree = \"<group>\"; };\n\t\tC8D9F49625FCCE80004C952C /* ProjectPreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProjectPreferencesViewController.swift; sourceTree = \"<group>\"; };\n\t\tC8D9F49925FCD5F6004C952C /* NotificationNames.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationNames.swift; sourceTree = \"<group>\"; };\n\t\tC8DB027127C6DD860048157A /* CustomCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomCommand.swift; sourceTree = \"<group>\"; };\n\t\tC8DB027327C6E4410048157A /* AddCustomCommandButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomCommandButton.swift; sourceTree = \"<group>\"; };\n\t\tC8F450F0241632D1002B9D69 /* ProjectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectCell.swift; sourceTree = \"<group>\"; };\n\t\tC8F450F5241638C2002B9D69 /* TerminalCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalCommand.swift; sourceTree = \"<group>\"; };\n\t\tC8F450F924165C21002B9D69 /* UserDefaultsWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsWrapper.swift; sourceTree = \"<group>\"; };\n\t\tC8F450FB24165C29002B9D69 /* UserDefaultsConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsConfig.swift; sourceTree = \"<group>\"; };\n\t\tC8F450FE24167592002B9D69 /* NSWorkspace+Execute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = \"NSWorkspace+Execute.swift\"; sourceTree = \"<group>\"; };\n\t\tC8F451002416950D002B9D69 /* ProjectMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectMenuView.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC8412E2324129B4F0066A8A5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8412E3824129B530066A8A5 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tC80D122B2415841F00CBCB0F /* Support */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E4A2412A23B0066A8A5 /* EventMonitor.swift */,\n\t\t\t\tC80D122D2415842B00CBCB0F /* SharedFileList.h */,\n\t\t\t\tC80D122E2415842B00CBCB0F /* SharedFileList.m */,\n\t\t\t\tC80D12292415840300CBCB0F /* Preferences.swift */,\n\t\t\t\tC80D122C2415842A00CBCB0F /* XcodeProjects-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Support;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC80D12352415868600CBCB0F /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC80E916424A39ACD0073CF3F /* Images */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC80E916524A39ADF0073CF3F /* ArrowImage.swift */,\n\t\t\t\tC8D9623724AD31F000B70B23 /* ArrowImageWithHoverPopover.swift */,\n\t\t\t\tC80E916B24A39E2C0073CF3F /* CloseHintImage.swift */,\n\t\t\t\t6EE247952A5F453A00DC2B4A /* PackageSwiftImage.swift */,\n\t\t\t);\n\t\t\tpath = Images;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E1D24129B4F0066A8A5 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E2824129B4F0066A8A5 /* XcodeProjects */,\n\t\t\t\tC8412E3E24129B530066A8A5 /* XcodeProjectsTests */,\n\t\t\t\tC8412E2724129B4F0066A8A5 /* Products */,\n\t\t\t\tC80D12352415868600CBCB0F /* Frameworks */,\n\t\t\t\tC8BE992124CA161A000D4E5E /* Recovered References */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E2724129B4F0066A8A5 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E2624129B4F0066A8A5 /* XcodeProjects.app */,\n\t\t\t\tC8412E3B24129B530066A8A5 /* XcodeProjectsTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E2824129B4F0066A8A5 /* XcodeProjects */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8A4C09E25FADFB90008054A /* README.md */,\n\t\t\t\tC8456CE8249A1C0400BAEF17 /* Resourses */,\n\t\t\t\tC80D122B2415841F00CBCB0F /* Support */,\n\t\t\t\tC8F450F4241638B9002B9D69 /* Logic */,\n\t\t\t\tC8412E802412A7010066A8A5 /* Data */,\n\t\t\t\tC8412E4C2412A2950066A8A5 /* UI */,\n\t\t\t\tC8412E2924129B4F0066A8A5 /* AppDelegate.swift */,\n\t\t\t\tC8412E2F24129B530066A8A5 /* Preview Content */,\n\t\t\t);\n\t\t\tpath = XcodeProjects;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E2F24129B530066A8A5 /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E3024129B530066A8A5 /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E3E24129B530066A8A5 /* XcodeProjectsTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E3F24129B530066A8A5 /* XcodeProjectsTests.swift */,\n\t\t\t\tC8412E4124129B530066A8A5 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = XcodeProjectsTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E4C2412A2950066A8A5 /* UI */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC80E916424A39ACD0073CF3F /* Images */,\n\t\t\t\tC855572524A142F0006AF499 /* Modifiers */,\n\t\t\t\tC8456CEF249A53F000BAEF17 /* Buttons */,\n\t\t\t\tC8F450EF241632C3002B9D69 /* Cells */,\n\t\t\t\tC8412E522412A2F20066A8A5 /* Views */,\n\t\t\t\tC8412E4D2412A29A0066A8A5 /* Controllers */,\n\t\t\t);\n\t\t\tpath = UI;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E4D2412A29A0066A8A5 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8D9F49625FCCE80004C952C /* ProjectPreferencesViewController.swift */,\n\t\t\t\tC8412E4E2412A2A00066A8A5 /* StatusViewController.swift */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E522412A2F20066A8A5 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8D9F49325FCCE61004C952C /* ProjectPreferencesView.swift */,\n\t\t\t\tC8BE992224CA1635000D4E5E /* ProjectIcon.swift */,\n\t\t\t\tC8412E502412A2F00066A8A5 /* MainView.swift */,\n\t\t\t\tC8F451002416950D002B9D69 /* ProjectMenuView.swift */,\n\t\t\t\tC855572E24A14B30006AF499 /* ProjectNameView.swift */,\n\t\t\t\tC855572C24A14A00006AF499 /* ActionsMenuText.swift */,\n\t\t\t\tC80E916724A39B570073CF3F /* HintView.swift */,\n\t\t\t\tC874747126069D600091E791 /* DividerSection.swift */,\n\t\t\t\t6EE2479B2A61669700DC2B4A /* AliasNameView.swift */,\n\t\t\t);\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8412E802412A7010066A8A5 /* Data */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8F450F5241638C2002B9D69 /* TerminalCommand.swift */,\n\t\t\t\tC8412E812412A70F0066A8A5 /* Project.swift */,\n\t\t\t\tC8DB027127C6DD860048157A /* CustomCommand.swift */,\n\t\t\t\tC8573C48249E77E400E1F969 /* TerminalScript.swift */,\n\t\t\t\t6EC78A68286C7167007F453C /* Alias.swift */,\n\t\t\t);\n\t\t\tpath = Data;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8456CE8249A1C0400BAEF17 /* Resourses */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E2D24129B530066A8A5 /* Assets.xcassets */,\n\t\t\t\tC8412E3224129B530066A8A5 /* Main.storyboard */,\n\t\t\t\tC8412E3524129B530066A8A5 /* Info.plist */,\n\t\t\t\tC8412E3624129B530066A8A5 /* XcodeProjects.entitlements */,\n\t\t\t);\n\t\t\tpath = Resourses;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8456CE9249A1D6700BAEF17 /* PropertyWrappers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8F450F924165C21002B9D69 /* UserDefaultsWrapper.swift */,\n\t\t\t);\n\t\t\tpath = PropertyWrappers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8456CEF249A53F000BAEF17 /* Buttons */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC80D1227241583E800CBCB0F /* PreferencesView.swift */,\n\t\t\t\tC8456CF0249A540F00BAEF17 /* AddProjectButton.swift */,\n\t\t\t\tC8088D552418E5F5001239CB /* TerminalCommandButton.swift */,\n\t\t\t\tC8DB027327C6E4410048157A /* AddCustomCommandButton.swift */,\n\t\t\t\t6EE247992A61488E00DC2B4A /* AddAliasButton.swift */,\n\t\t\t);\n\t\t\tpath = Buttons;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC855572524A142F0006AF499 /* Modifiers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC855572624A14300006AF499 /* OnHover.swift */,\n\t\t\t\tC855573024A15104006AF499 /* OnHoverText.swift */,\n\t\t\t\tC855572824A144F8006AF499 /* RoundedCorners.swift */,\n\t\t\t);\n\t\t\tpath = Modifiers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8BE992124CA161A000D4E5E /* Recovered References */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = \"Recovered References\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8F450EF241632C3002B9D69 /* Cells */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8F450F0241632D1002B9D69 /* ProjectCell.swift */,\n\t\t\t\t6EC78A6A286C7808007F453C /* AliasCell.swift */,\n\t\t\t);\n\t\t\tpath = Cells;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8F450F4241638B9002B9D69 /* Logic */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8456CE9249A1D6700BAEF17 /* PropertyWrappers */,\n\t\t\t\tC8F450FD24167576002B9D69 /* Extensions */,\n\t\t\t\tC8F450FB24165C29002B9D69 /* UserDefaultsConfig.swift */,\n\t\t\t\tC8D35B3524CC2CB00075308D /* CodableColorPicker.swift */,\n\t\t\t\t6EC78A6C286C9E72007F453C /* ProfileFile.swift */,\n\t\t\t);\n\t\t\tpath = Logic;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8F450FD24167576002B9D69 /* Extensions */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC8F450FE24167592002B9D69 /* NSWorkspace+Execute.swift */,\n\t\t\t\tC8D9623924AD348600B70B23 /* NSWorkspace+App.swift */,\n\t\t\t\tC8AE963424997AC000E6B080 /* String+Components.swift */,\n\t\t\t\tC8AE96362499818200E6B080 /* CharacterSet+All.swift */,\n\t\t\t\tC8573C43249D6EA600E1F969 /* FileManger+Content.swift */,\n\t\t\t\tC8573C4E24A0045200E1F969 /* NSColor+Codable.swift */,\n\t\t\t\tC8A4C09A25FACA280008054A /* View+If.swift */,\n\t\t\t\tC8D9F49925FCD5F6004C952C /* NotificationNames.swift */,\n\t\t\t);\n\t\t\tpath = Extensions;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC8412E2524129B4F0066A8A5 /* XcodeProjects */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8412E4424129B530066A8A5 /* Build configuration list for PBXNativeTarget \"XcodeProjects\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8412E2224129B4F0066A8A5 /* Sources */,\n\t\t\t\tC8412E2324129B4F0066A8A5 /* Frameworks */,\n\t\t\t\tC8412E2424129B4F0066A8A5 /* Resources */,\n\t\t\t\tC80D12382415868600CBCB0F /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = XcodeProjects;\n\t\t\tproductName = MyProjects;\n\t\t\tproductReference = C8412E2624129B4F0066A8A5 /* XcodeProjects.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tC8412E3A24129B530066A8A5 /* XcodeProjectsTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C8412E4724129B530066A8A5 /* Build configuration list for PBXNativeTarget \"XcodeProjectsTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC8412E3724129B530066A8A5 /* Sources */,\n\t\t\t\tC8412E3824129B530066A8A5 /* Frameworks */,\n\t\t\t\tC8412E3924129B530066A8A5 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC8412E3D24129B530066A8A5 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = XcodeProjectsTests;\n\t\t\tproductName = MyProjectsTests;\n\t\t\tproductReference = C8412E3B24129B530066A8A5 /* XcodeProjectsTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC8412E1E24129B4F0066A8A5 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1130;\n\t\t\t\tLastUpgradeCheck = 1420;\n\t\t\t\tORGANIZATIONNAME = com.klm.mac.myProjects;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC8412E2524129B4F0066A8A5 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t};\n\t\t\t\t\tC8412E3A24129B530066A8A5 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 11.3.1;\n\t\t\t\t\t\tTestTargetID = C8412E2524129B4F0066A8A5;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C8412E2124129B4F0066A8A5 /* Build configuration list for PBXProject \"XcodeProjects\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = C8412E1D24129B4F0066A8A5;\n\t\t\tproductRefGroup = C8412E2724129B4F0066A8A5 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC8412E2524129B4F0066A8A5 /* XcodeProjects */,\n\t\t\t\tC8412E3A24129B530066A8A5 /* XcodeProjectsTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC8412E2424129B4F0066A8A5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8412E3424129B530066A8A5 /* Main.storyboard in Resources */,\n\t\t\t\tC8412E3124129B530066A8A5 /* Preview Assets.xcassets in Resources */,\n\t\t\t\tC8A4C09F25FADFBA0008054A /* README.md in Resources */,\n\t\t\t\tC8412E2E24129B530066A8A5 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8412E3924129B530066A8A5 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC8412E2224129B4F0066A8A5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8D9F49425FCCE61004C952C /* ProjectPreferencesView.swift in Sources */,\n\t\t\t\t6EE2479C2A61669700DC2B4A /* AliasNameView.swift in Sources */,\n\t\t\t\tC8D9F49725FCCE80004C952C /* ProjectPreferencesViewController.swift in Sources */,\n\t\t\t\tC8BE992424CA1732000D4E5E /* NSColor+Codable.swift in Sources */,\n\t\t\t\tC8412E2A24129B4F0066A8A5 /* AppDelegate.swift in Sources */,\n\t\t\t\tC8D9623824AD31F100B70B23 /* ArrowImageWithHoverPopover.swift in Sources */,\n\t\t\t\tC80E916824A39B570073CF3F /* HintView.swift in Sources */,\n\t\t\t\tC8AE96372499818200E6B080 /* CharacterSet+All.swift in Sources */,\n\t\t\t\tC8D35B3624CC2CB00075308D /* CodableColorPicker.swift in Sources */,\n\t\t\t\tC80D122A2415840300CBCB0F /* Preferences.swift in Sources */,\n\t\t\t\tC80E916624A39ADF0073CF3F /* ArrowImage.swift in Sources */,\n\t\t\t\tC80D1228241583E800CBCB0F /* PreferencesView.swift in Sources */,\n\t\t\t\tC8412E512412A2F00066A8A5 /* MainView.swift in Sources */,\n\t\t\t\tC8DB027427C6E4410048157A /* AddCustomCommandButton.swift in Sources */,\n\t\t\t\tC855572724A14300006AF499 /* OnHover.swift in Sources */,\n\t\t\t\tC8F450FC24165C29002B9D69 /* UserDefaultsConfig.swift in Sources */,\n\t\t\t\t6EC78A69286C7167007F453C /* Alias.swift in Sources */,\n\t\t\t\t6EC78A6B286C7808007F453C /* AliasCell.swift in Sources */,\n\t\t\t\tC8F450FA24165C21002B9D69 /* UserDefaultsWrapper.swift in Sources */,\n\t\t\t\tC8BE992324CA1635000D4E5E /* ProjectIcon.swift in Sources */,\n\t\t\t\tC8F450F1241632D1002B9D69 /* ProjectCell.swift in Sources */,\n\t\t\t\tC855572D24A14A01006AF499 /* ActionsMenuText.swift in Sources */,\n\t\t\t\tC855573124A15104006AF499 /* OnHoverText.swift in Sources */,\n\t\t\t\t6EC78A6D286C9E72007F453C /* ProfileFile.swift in Sources */,\n\t\t\t\tC8412E4F2412A2A00066A8A5 /* StatusViewController.swift in Sources */,\n\t\t\t\tC8412E822412A70F0066A8A5 /* Project.swift in Sources */,\n\t\t\t\tC8F450F6241638C2002B9D69 /* TerminalCommand.swift in Sources */,\n\t\t\t\tC855572924A144F8006AF499 /* RoundedCorners.swift in Sources */,\n\t\t\t\tC8AE963524997AC000E6B080 /* String+Components.swift in Sources */,\n\t\t\t\tC80D122F2415842B00CBCB0F /* SharedFileList.m in Sources */,\n\t\t\t\tC80E916C24A39E2C0073CF3F /* CloseHintImage.swift in Sources */,\n\t\t\t\tC8088D562418E5F5001239CB /* TerminalCommandButton.swift in Sources */,\n\t\t\t\tC8DB027227C6DD860048157A /* CustomCommand.swift in Sources */,\n\t\t\t\tC8D9623A24AD348600B70B23 /* NSWorkspace+App.swift in Sources */,\n\t\t\t\tC8F451012416950D002B9D69 /* ProjectMenuView.swift in Sources */,\n\t\t\t\tC874747226069D600091E791 /* DividerSection.swift in Sources */,\n\t\t\t\tC8573C44249D6EA600E1F969 /* FileManger+Content.swift in Sources */,\n\t\t\t\tC855572F24A14B30006AF499 /* ProjectNameView.swift in Sources */,\n\t\t\t\t6EE247962A5F453A00DC2B4A /* PackageSwiftImage.swift in Sources */,\n\t\t\t\tC8F450FF24167592002B9D69 /* NSWorkspace+Execute.swift in Sources */,\n\t\t\t\tC8412E4B2412A23B0066A8A5 /* EventMonitor.swift in Sources */,\n\t\t\t\t6EE2479A2A61488E00DC2B4A /* AddAliasButton.swift in Sources */,\n\t\t\t\tC8D9F49A25FCD5F6004C952C /* NotificationNames.swift in Sources */,\n\t\t\t\tC8A4C09B25FACA280008054A /* View+If.swift in Sources */,\n\t\t\t\tC8456CF1249A540F00BAEF17 /* AddProjectButton.swift in Sources */,\n\t\t\t\tC8573C49249E77E400E1F969 /* TerminalScript.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC8412E3724129B530066A8A5 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC8412E4024129B530066A8A5 /* XcodeProjectsTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tC8412E3D24129B530066A8A5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C8412E2524129B4F0066A8A5 /* XcodeProjects */;\n\t\t\ttargetProxy = C8412E3C24129B530066A8A5 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tC8412E3224129B530066A8A5 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tC8412E3324129B530066A8A5 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tC8412E4224129B530066A8A5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8412E4324129B530066A8A5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8412E4524129B530066A8A5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = XcodeProjects/Resourses/XcodeProjects.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"XcodeProjects/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = N5V3ES565J;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = XcodeProjects/Resourses/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tMARKETING_VERSION = 1.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.dkcompany.xcodeprojects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"XcodeProjects/Support/XcodeProjects-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8412E4624129B530066A8A5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = XcodeProjects/Resourses/XcodeProjects.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"XcodeProjects/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = N5V3ES565J;\n\t\t\t\tENABLE_HARDENED_RUNTIME = YES;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = XcodeProjects/Resourses/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tMARKETING_VERSION = 1.9;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.dkcompany.xcodeprojects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"XcodeProjects/Support/XcodeProjects-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC8412E4824129B530066A8A5 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = N5V3ES565J;\n\t\t\t\tINFOPLIST_FILE = XcodeProjectsTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.dkcompany.xcodeprojects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/XcodeProjects.app/Contents/MacOS/XcodeProjects\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC8412E4924129B530066A8A5 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = N5V3ES565J;\n\t\t\t\tINFOPLIST_FILE = XcodeProjectsTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t\t\"@loader_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.dkcompany.xcodeprojects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/XcodeProjects.app/Contents/MacOS/XcodeProjects\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC8412E2124129B4F0066A8A5 /* Build configuration list for PBXProject \"XcodeProjects\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8412E4224129B530066A8A5 /* Debug */,\n\t\t\t\tC8412E4324129B530066A8A5 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8412E4424129B530066A8A5 /* Build configuration list for PBXNativeTarget \"XcodeProjects\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8412E4524129B530066A8A5 /* Debug */,\n\t\t\t\tC8412E4624129B530066A8A5 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC8412E4724129B530066A8A5 /* Build configuration list for PBXNativeTarget \"XcodeProjectsTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC8412E4824129B530066A8A5 /* Debug */,\n\t\t\t\tC8412E4924129B530066A8A5 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = C8412E1E24129B4F0066A8A5 /* Project object */;\n}\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/xcshareddata/xcschemes/XcodeProjects.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1420\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8412E2524129B4F0066A8A5\"\n               BuildableName = \"XcodeProjects.app\"\n               BlueprintName = \"XcodeProjects\"\n               ReferencedContainer = \"container:XcodeProjects.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8412E2524129B4F0066A8A5\"\n            BuildableName = \"XcodeProjects.app\"\n            BlueprintName = \"XcodeProjects\"\n            ReferencedContainer = \"container:XcodeProjects.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"C8412E2524129B4F0066A8A5\"\n            BuildableName = \"XcodeProjects.app\"\n            BlueprintName = \"XcodeProjects\"\n            ReferencedContainer = \"container:XcodeProjects.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/xcshareddata/xcschemes/XcodeProjectsTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1420\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"C8412E3A24129B530066A8A5\"\n               BuildableName = \"XcodeProjectsTests.xctest\"\n               BlueprintName = \"XcodeProjectsTests\"\n               ReferencedContainer = \"container:XcodeProjects.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "XcodeProjects.xcodeproj/xcuserdata/klm88400.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   uuid = \"61C36C63-9446-45EE-9C1F-C84930F4BCE2\"\n   type = \"1\"\n   version = \"2.0\">\n   <Breakpoints>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.FileBreakpoint\">\n         <BreakpointContent\n            uuid = \"E455244E-89DE-40B0-8512-B239A4878375\"\n            shouldBeEnabled = \"No\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            filePath = \"XcodeProjects/Logic/Extensions/NSWorkspace+Execute.swift\"\n            startingColumnNumber = \"9223372036854775807\"\n            endingColumnNumber = \"9223372036854775807\"\n            startingLineNumber = \"14\"\n            endingLineNumber = \"14\"\n            landmarkName = \"execute(command:forProject:)\"\n            landmarkType = \"7\">\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.FileBreakpoint\">\n         <BreakpointContent\n            uuid = \"F2281AD8-585D-4B94-B205-457F83CE1A1C\"\n            shouldBeEnabled = \"No\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            filePath = \"XcodeProjects/Data/TerminalCommand.swift\"\n            startingColumnNumber = \"9223372036854775807\"\n            endingColumnNumber = \"9223372036854775807\"\n            startingLineNumber = \"85\"\n            endingLineNumber = \"85\"\n            landmarkName = \"script(for:)\"\n            landmarkType = \"7\">\n         </BreakpointContent>\n      </BreakpointProxy>\n      <BreakpointProxy\n         BreakpointExtensionID = \"Xcode.Breakpoint.FileBreakpoint\">\n         <BreakpointContent\n            uuid = \"4DB5F898-4134-4C60-B871-50100D5F164D\"\n            shouldBeEnabled = \"Yes\"\n            ignoreCount = \"0\"\n            continueAfterRunningActions = \"No\"\n            filePath = \"XcodeProjects/UI/Views/MainView.swift\"\n            startingColumnNumber = \"9223372036854775807\"\n            endingColumnNumber = \"9223372036854775807\"\n            startingLineNumber = \"121\"\n            endingLineNumber = \"121\"\n            landmarkName = \"parseCustomScriptFile()\"\n            landmarkType = \"7\">\n         </BreakpointContent>\n      </BreakpointProxy>\n   </Breakpoints>\n</Bucket>\n"
  },
  {
    "path": "XcodeProjectsTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "XcodeProjectsTests/XcodeProjectsTests.swift",
    "content": "//\n//  XcodeProjectsTests.swift\n//  XcodeProjectsTests\n//\n//  Created by Dima Kalachniuk on 06/03/2020.\n//  Copyright © 2020 com.dkcompany.xcodeprojects. All rights reserved.\n//\n\nimport XCTest\n@testable import XcodeProjects\n\nclass XcodeProjectsTests: XCTestCase {\n\n    override func setUp() {\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n\n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n    }\n\n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n\n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n\n}\n"
  }
]