Showing preview only (612K chars total). Download the full file or copy to clipboard to get everything.
Repository: EthanSK/Menu-Bar-Dock
Branch: master
Commit: ff07311aa505
Files: 46
Total size: 577.6 KB
Directory structure:
gitextract_7cny6vu1/
├── .gitignore
├── .swiftlint.yml
├── CNAME
├── Launcher/
│ ├── AppDelegateLauncher.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj/
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── Launcher.entitlements
├── Menu Bar Dock.xcodeproj/
│ └── project.pbxproj
├── Menu Bar Dock.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── MenuBarDock/
│ ├── AboutViewController.swift
│ ├── AppDelegate.swift
│ ├── AppTracker.swift
│ ├── AppsTablePreferencesViewController.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── ETGgames.imageset/
│ │ │ └── Contents.json
│ │ └── ETGgamesCircle.imageset/
│ │ └── Contents.json
│ ├── Base.lproj/
│ │ └── Main.storyboard
│ ├── Constants.swift
│ ├── Info.plist
│ ├── InfoViewController.swift
│ ├── MenuBarDock.entitlements
│ ├── MenuBarItem.swift
│ ├── MenuBarItems.swift
│ ├── OpenableApp.swift
│ ├── OpenableApps.swift
│ ├── PreferencesViewController.swift
│ ├── RegularApp.swift
│ ├── RegularApps.swift
│ ├── RunningApp.swift
│ ├── RunningApps.swift
│ ├── UserPrefs.swift
│ └── Utils.swift
├── MenuBarDockTests/
│ ├── Info.plist
│ └── MenuBarDockTests.swift
├── MenuBarDockUITests/
│ ├── Info.plist
│ └── MenuBarDockUITests.swift
├── Podfile
├── README.md
├── _config.yml
├── assets/
│ ├── DownloadButton.psd
│ └── logo.ai
└── setup.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
## Gcc Patch
/*.gcno
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
## Storing some api keys and stuff that you don't want to be uploaded on Github
Secrets.swift
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
================================================
FILE: .swiftlint.yml
================================================
line_length: 420
disabled_rules:
- redundant_string_enum_value
- identifier_name
- cyclomatic_complexity
================================================
FILE: CNAME
================================================
www.menubardock.com
================================================
FILE: Launcher/AppDelegateLauncher.swift
================================================
//
// AppDelegate.swift
// Launcher
//
// Created by Ethan Sarif-Kattan on 04/03/2019.
// Copyright © 2019 Ethan Sarif-Kattan. All rights reserved.
//
import Cocoa
extension Notification.Name {
static let killLauncher = Notification.Name("killLauncher")
}
@NSApplicationMain
class AppDelegateLauncher: NSObject {
@objc func terminate() {
NSApp.terminate(nil) // off for testing
}
}
extension AppDelegateLauncher: NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
let mainAppIdentifier = "com.ethansk.MenuBarDock"
let runningApps = NSWorkspace.shared.runningApplications
let isRunning = !runningApps.filter { $0.bundleIdentifier == mainAppIdentifier }.isEmpty
if !isRunning {
DistributedNotificationCenter.default().addObserver(self,
selector: #selector(self.terminate),
name: .killLauncher,
object: mainAppIdentifier)
let path = Bundle.main.bundlePath as NSString
var components = path.pathComponents
components.removeLast()
components.removeLast()
components.removeLast()
components.removeLast() // launche the .app, not the binary
// components.append("MacOS")
// components.append("Menu Bar Dock") //main app name
let newPath = NSString.path(withComponents: components)
let url = URL(fileURLWithPath: newPath)
// Launch the main app
if #available(macOS 10.15, *) {
NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration()) { (_, error) in
if let error = error {
print("Failed to launch app: \(error)")
} else {
print("Successfully launched app")
}
// Terminate the helper app
self.terminate()
}
} else {
NSWorkspace.shared.launchApplication(newPath)
self.terminate()
}
} else {
self.terminate()
}
}
}
================================================
FILE: Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"idiom" : "mac",
"size" : "16x16",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "16x16",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "32x32",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "32x32",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "128x128",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "128x128",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "256x256",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "256x256",
"scale" : "2x"
},
{
"idiom" : "mac",
"size" : "512x512",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "512x512",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Launcher/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Launcher/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
</dependencies>
<scenes>
<!--Application-->
<scene sceneID="JPo-4y-FX3">
<objects>
<application id="hnw-xV-0zn" sceneMemberID="viewController">
<menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="Launcher" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Launcher" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About Launcher" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
<menuItem title="Services" id="NMo-om-nkz">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
<menuItem title="Hide Launcher" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit Launcher" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="dMs-cI-mzQ">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="File" id="bib-Uj-vzu">
<items>
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
<connections>
<action selector="newDocument:" target="Ady-hI-5gd" id="4Si-XN-c54"/>
</connections>
</menuItem>
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
<connections>
<action selector="openDocument:" target="Ady-hI-5gd" id="bVn-NM-KNZ"/>
</connections>
</menuItem>
<menuItem title="Open Recent" id="tXI-mr-wws">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
<items>
<menuItem title="Clear Menu" id="vNY-rz-j42">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="clearRecentDocuments:" target="Ady-hI-5gd" id="Daa-9d-B3U"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
<connections>
<action selector="performClose:" target="Ady-hI-5gd" id="HmO-Ls-i7Q"/>
</connections>
</menuItem>
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
<connections>
<action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/>
</connections>
</menuItem>
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
<connections>
<action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/>
</connections>
</menuItem>
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
<connections>
<action selector="revertDocumentToSaved:" target="Ady-hI-5gd" id="iJ3-Pv-kwq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="runPageLayout:" target="Ady-hI-5gd" id="Din-rz-gC5"/>
</connections>
</menuItem>
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
<connections>
<action selector="print:" target="Ady-hI-5gd" id="qaZ-4w-aoO"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="5QF-Oa-p0T">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
<items>
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
<connections>
<action selector="undo:" target="Ady-hI-5gd" id="M6e-cu-g7V"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
<connections>
<action selector="redo:" target="Ady-hI-5gd" id="oIA-Rs-6OD"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
<connections>
<action selector="cut:" target="Ady-hI-5gd" id="YJe-68-I9s"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
<connections>
<action selector="copy:" target="Ady-hI-5gd" id="G1f-GL-Joy"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
<connections>
<action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="Ady-hI-5gd" id="cEh-KX-wJQ"/>
</connections>
</menuItem>
<menuItem title="Delete" id="pa3-QI-u2k">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="Ady-hI-5gd" id="0Mk-Ml-PaM"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
<connections>
<action selector="selectAll:" target="Ady-hI-5gd" id="VNm-Mi-diN"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
<menuItem title="Find" id="4EN-yA-p0u">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="1b7-l0-nxx">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="cD7-Qs-BN4"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="WD3-Gg-5AJ"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="NDo-RZ-v9R"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="U76-nv-p5D"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
<connections>
<action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
<connections>
<action selector="showGuessPanel:" target="Ady-hI-5gd" id="vFj-Ks-hy3"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
<connections>
<action selector="checkSpelling:" target="Ady-hI-5gd" id="fz7-VC-reM"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="Ady-hI-5gd" id="7w6-Qz-0kB"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="Ady-hI-5gd" id="muD-Qn-j4w"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="Ady-hI-5gd" id="2lM-Qi-WAP"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="9ic-FL-obx">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
<items>
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="Ady-hI-5gd" id="oku-mr-iSq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="Ady-hI-5gd" id="3IJ-Se-DZD"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="Ady-hI-5gd" id="ptq-xd-QOA"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="Ady-hI-5gd" id="oCt-pO-9gS"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="cwL-P1-jid">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="Ady-hI-5gd" id="Gip-E3-Fov"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="tRr-pd-1PS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="Ady-hI-5gd" id="R1I-Nq-Kbl"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="Ady-hI-5gd" id="DvP-Fe-Py6"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="2oI-Rn-ZJC">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
<items>
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="Ady-hI-5gd" id="sPh-Tk-edu"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="Ady-hI-5gd" id="iUZ-b5-hil"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="Ady-hI-5gd" id="26H-TL-nsh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="xrE-MZ-jX0">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
<items>
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="Ady-hI-5gd" id="654-Ng-kyl"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="Ady-hI-5gd" id="dX8-6p-jy9"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Format" id="jxT-CU-nIS">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
<items>
<menuItem title="Font" id="Gi5-1S-RQB">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
<items>
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
<connections>
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
</connections>
</menuItem>
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
<connections>
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
</connections>
</menuItem>
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
<connections>
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
</connections>
</menuItem>
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
<connections>
<action selector="underline:" target="Ady-hI-5gd" id="FYS-2b-JAY"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
<connections>
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
</connections>
</menuItem>
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
<connections>
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
<menuItem title="Kern" id="jBQ-r6-VK2">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
<items>
<menuItem title="Use Default" id="GUa-eO-cwY">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardKerning:" target="Ady-hI-5gd" id="6dk-9l-Ckg"/>
</connections>
</menuItem>
<menuItem title="Use None" id="cDB-IK-hbR">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffKerning:" target="Ady-hI-5gd" id="U8a-gz-Maa"/>
</connections>
</menuItem>
<menuItem title="Tighten" id="46P-cB-AYj">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="tightenKerning:" target="Ady-hI-5gd" id="hr7-Nz-8ro"/>
</connections>
</menuItem>
<menuItem title="Loosen" id="ogc-rX-tC1">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="loosenKerning:" target="Ady-hI-5gd" id="8i4-f9-FKE"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Ligatures" id="o6e-r0-MWq">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
<items>
<menuItem title="Use Default" id="agt-UL-0e3">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardLigatures:" target="Ady-hI-5gd" id="7uR-wd-Dx6"/>
</connections>
</menuItem>
<menuItem title="Use None" id="J7y-lM-qPV">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffLigatures:" target="Ady-hI-5gd" id="iX2-gA-Ilz"/>
</connections>
</menuItem>
<menuItem title="Use All" id="xQD-1f-W4t">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useAllLigatures:" target="Ady-hI-5gd" id="KcB-kA-TuK"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Baseline" id="OaQ-X3-Vso">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
<items>
<menuItem title="Use Default" id="3Om-Ey-2VK">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unscript:" target="Ady-hI-5gd" id="0vZ-95-Ywn"/>
</connections>
</menuItem>
<menuItem title="Superscript" id="Rqc-34-cIF">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="superscript:" target="Ady-hI-5gd" id="3qV-fo-wpU"/>
</connections>
</menuItem>
<menuItem title="Subscript" id="I0S-gh-46l">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="subscript:" target="Ady-hI-5gd" id="Q6W-4W-IGz"/>
</connections>
</menuItem>
<menuItem title="Raise" id="2h7-ER-AoG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="raiseBaseline:" target="Ady-hI-5gd" id="4sk-31-7Q9"/>
</connections>
</menuItem>
<menuItem title="Lower" id="1tx-W0-xDw">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowerBaseline:" target="Ady-hI-5gd" id="OF1-bc-KW4"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
<connections>
<action selector="orderFrontColorPanel:" target="Ady-hI-5gd" id="mSX-Xz-DV3"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="copyFont:" target="Ady-hI-5gd" id="GJO-xA-L4q"/>
</connections>
</menuItem>
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteFont:" target="Ady-hI-5gd" id="JfD-CL-leO"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Text" id="Fal-I4-PZk">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Text" id="d9c-me-L2H">
<items>
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
<connections>
<action selector="alignLeft:" target="Ady-hI-5gd" id="zUv-R1-uAa"/>
</connections>
</menuItem>
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
<connections>
<action selector="alignCenter:" target="Ady-hI-5gd" id="spX-mk-kcS"/>
</connections>
</menuItem>
<menuItem title="Justify" id="J5U-5w-g23">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="alignJustified:" target="Ady-hI-5gd" id="ljL-7U-jND"/>
</connections>
</menuItem>
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
<connections>
<action selector="alignRight:" target="Ady-hI-5gd" id="r48-bG-YeY"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
<menuItem title="Writing Direction" id="H1b-Si-o9J">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
<items>
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem id="YGs-j5-SAR">
<string key="title"> Default</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionNatural:" target="Ady-hI-5gd" id="qtV-5e-UBP"/>
</connections>
</menuItem>
<menuItem id="Lbh-J2-qVU">
<string key="title"> Left to Right</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="S0X-9S-QSf"/>
</connections>
</menuItem>
<menuItem id="jFq-tB-4Kx">
<string key="title"> Right to Left</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="5fk-qB-AqJ"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem id="Nop-cj-93Q">
<string key="title"> Default</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionNatural:" target="Ady-hI-5gd" id="lPI-Se-ZHp"/>
</connections>
</menuItem>
<menuItem id="BgM-ve-c93">
<string key="title"> Left to Right</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="caW-Bv-w94"/>
</connections>
</menuItem>
<menuItem id="RB4-Sm-HuC">
<string key="title"> Right to Left</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="EXD-6r-ZUu"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
<menuItem title="Show Ruler" id="vLm-3I-IUL">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleRuler:" target="Ady-hI-5gd" id="FOx-HJ-KwY"/>
</connections>
</menuItem>
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="copyRuler:" target="Ady-hI-5gd" id="71i-fW-3W2"/>
</connections>
</menuItem>
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="pasteRuler:" target="Ady-hI-5gd" id="cSh-wd-qM2"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="H8h-7b-M4v">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="View" id="HyV-fh-RgO">
<items>
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="toggleToolbarShown:" target="Ady-hI-5gd" id="BXY-wc-z0C"/>
</connections>
</menuItem>
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="runToolbarCustomizationPalette:" target="Ady-hI-5gd" id="pQI-g3-MTW"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleSidebar:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
</connections>
</menuItem>
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleFullScreen:" target="Ady-hI-5gd" id="dU3-MA-1Rq"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="Ady-hI-5gd" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="Ady-hI-5gd" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="Ady-hI-5gd" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="wpr-3q-Mcd">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
<items>
<menuItem title="Launcher Help" keyEquivalent="?" id="FKE-Sm-Kum">
<connections>
<action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
</connections>
</application>
<customObject id="Voe-Tx-rLC" customClass="AppDelegateLauncher" customModule="Launcher" customModuleProvider="target"/>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="75" y="0.0"/>
</scene>
</scenes>
</document>
================================================
FILE: Launcher/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSBackgroundOnly</key>
<true/>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2019 Ethan Sarif-Kattan. All rights reserved.</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
================================================
FILE: Launcher/Launcher.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
</dict>
</plist>
================================================
FILE: Menu Bar Dock.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
01DC8CAE270F9515FE1B0FAC /* Pods_Menu_Bar_Dock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E25AD7108669ADAF8C59B09 /* Pods_Menu_Bar_Dock.framework */; };
3821D96E222DAB1800D69BD1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3821D96D222DAB1700D69BD1 /* Cocoa.framework */; };
38412F00222B3E2F00D3FA0C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412EFF222B3E2F00D3FA0C /* AppDelegate.swift */; };
38412F02222B3E2F00D3FA0C /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412F01222B3E2F00D3FA0C /* PreferencesViewController.swift */; };
38412F04222B3E3000D3FA0C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38412F03222B3E3000D3FA0C /* Assets.xcassets */; };
38412F07222B3E3000D3FA0C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 38412F05222B3E3000D3FA0C /* Main.storyboard */; };
38412F13222B3E3000D3FA0C /* MenuBarDockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412F12222B3E3000D3FA0C /* MenuBarDockTests.swift */; };
38412F1E222B3E3000D3FA0C /* MenuBarDockUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412F1D222B3E3000D3FA0C /* MenuBarDockUITests.swift */; };
38412F30222B715400D3FA0C /* UserPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412F2F222B715400D3FA0C /* UserPrefs.swift */; };
38412F32222B722100D3FA0C /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38412F31222B722100D3FA0C /* Constants.swift */; };
384318F82624A36A00A6B6A0 /* RunningApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384318F72624A36A00A6B6A0 /* RunningApps.swift */; };
384319022624BAB800A6B6A0 /* RegularApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384319012624BAB800A6B6A0 /* RegularApps.swift */; };
384319152626487200A6B6A0 /* RunningApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384319142626487200A6B6A0 /* RunningApp.swift */; };
3843191B2626487E00A6B6A0 /* RegularApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3843191A2626487E00A6B6A0 /* RegularApp.swift */; };
3843194426267FC100A6B6A0 /* AppsTablePreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3843194326267FC100A6B6A0 /* AppsTablePreferencesViewController.swift */; };
384319582628BD7800A6B6A0 /* AppTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384319572628BD7800A6B6A0 /* AppTracker.swift */; };
384319632628EC8700A6B6A0 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384319612628EC8700A6B6A0 /* AboutViewController.swift */; };
38431992262911C900A6B6A0 /* InfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38431990262911C900A6B6A0 /* InfoViewController.swift */; };
384CBEA526226333000B08FC /* MenuBarItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384CBEA426226333000B08FC /* MenuBarItems.swift */; };
384CBEAB26226677000B08FC /* MenuBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384CBEAA26226677000B08FC /* MenuBarItem.swift */; };
384CBEB926227329000B08FC /* OpenableApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384CBEB826227329000B08FC /* OpenableApp.swift */; };
384CBEBF262276A9000B08FC /* OpenableApps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384CBEBE262276A9000B08FC /* OpenableApps.swift */; };
3875B2B6222E1EF70042D748 /* Launcher.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 38E394E3222D778F006F926E /* Launcher.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
38D723EB222D8D8600D6F079 /* Launcher.app in Resources */ = {isa = PBXBuildFile; fileRef = 38E394E3222D778F006F926E /* Launcher.app */; };
38E394E6222D778F006F926E /* AppDelegateLauncher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E394E5222D778F006F926E /* AppDelegateLauncher.swift */; };
38E394EA222D7790006F926E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 38E394E9222D7790006F926E /* Assets.xcassets */; };
38E394ED222D7790006F926E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 38E394EB222D7790006F926E /* Main.storyboard */; };
38E394F9222D7B61006F926E /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E394F8222D7B61006F926E /* ServiceManagement.framework */; };
38EEA8BF26238C14005DD6A1 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38EEA8BE26238C14005DD6A1 /* Utils.swift */; };
8025B2CADE468941B1A841B9 /* Pods_Launcher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98BF29A3FBD4222A2994CC63 /* Pods_Launcher.framework */; };
88AD155137A7D16EF21440CF /* Pods_Menu_Bar_DockUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9B9AC2CA0427E3D1161227B /* Pods_Menu_Bar_DockUITests.framework */; };
B7AFA862BC6214A4D95098CC /* Pods_Menu_Bar_DockTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30D61877253F489B8F948C27 /* Pods_Menu_Bar_DockTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
38412F0F222B3E3000D3FA0C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 38412EF4222B3E2F00D3FA0C /* Project object */;
proxyType = 1;
remoteGlobalIDString = 38412EFB222B3E2F00D3FA0C;
remoteInfo = MenuDock;
};
38412F1A222B3E3000D3FA0C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 38412EF4222B3E2F00D3FA0C /* Project object */;
proxyType = 1;
remoteGlobalIDString = 38412EFB222B3E2F00D3FA0C;
remoteInfo = MenuDock;
};
38E394F5222D7B57006F926E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 38412EF4222B3E2F00D3FA0C /* Project object */;
proxyType = 1;
remoteGlobalIDString = 38E394E2222D778F006F926E;
remoteInfo = Launcher;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
3875B2B5222E1EDA0042D748 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = Contents/Library/LoginItems;
dstSubfolderSpec = 1;
files = (
3875B2B6222E1EF70042D748 /* Launcher.app in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
16B37C87D338947865D0A942 /* Pods-Launcher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Launcher.release.xcconfig"; path = "Target Support Files/Pods-Launcher/Pods-Launcher.release.xcconfig"; sourceTree = "<group>"; };
2309E0F2AA48CFD993F809B6 /* Pods-Launcher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Launcher.debug.xcconfig"; path = "Target Support Files/Pods-Launcher/Pods-Launcher.debug.xcconfig"; sourceTree = "<group>"; };
297EFDBCAC62749525C31A00 /* Pods-Menu Bar Dock.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar Dock.release.xcconfig"; path = "Target Support Files/Pods-Menu Bar Dock/Pods-Menu Bar Dock.release.xcconfig"; sourceTree = "<group>"; };
30D61877253F489B8F948C27 /* Pods_Menu_Bar_DockTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Menu_Bar_DockTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3821D96D222DAB1700D69BD1 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
38412EFC222B3E2F00D3FA0C /* Menu Bar Dock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Menu Bar Dock.app"; sourceTree = BUILT_PRODUCTS_DIR; };
38412EFF222B3E2F00D3FA0C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
38412F01222B3E2F00D3FA0C /* PreferencesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesViewController.swift; sourceTree = "<group>"; };
38412F03222B3E3000D3FA0C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
38412F06222B3E3000D3FA0C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
38412F08222B3E3000D3FA0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
38412F09222B3E3000D3FA0C /* MenuBarDock.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MenuBarDock.entitlements; sourceTree = "<group>"; };
38412F0E222B3E3000D3FA0C /* Menu Bar DockTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Menu Bar DockTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
38412F12222B3E3000D3FA0C /* MenuBarDockTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarDockTests.swift; sourceTree = "<group>"; };
38412F14222B3E3000D3FA0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
38412F19222B3E3000D3FA0C /* Menu Bar DockUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Menu Bar DockUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
38412F1D222B3E3000D3FA0C /* MenuBarDockUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarDockUITests.swift; sourceTree = "<group>"; };
38412F1F222B3E3000D3FA0C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
38412F2F222B715400D3FA0C /* UserPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPrefs.swift; sourceTree = "<group>"; };
38412F31222B722100D3FA0C /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
384318F72624A36A00A6B6A0 /* RunningApps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunningApps.swift; sourceTree = "<group>"; };
384319012624BAB800A6B6A0 /* RegularApps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegularApps.swift; sourceTree = "<group>"; };
384319142626487200A6B6A0 /* RunningApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunningApp.swift; sourceTree = "<group>"; };
3843191A2626487E00A6B6A0 /* RegularApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RegularApp.swift; path = MenuBarDock/RegularApp.swift; sourceTree = SOURCE_ROOT; };
3843194326267FC100A6B6A0 /* AppsTablePreferencesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsTablePreferencesViewController.swift; sourceTree = "<group>"; };
384319572628BD7800A6B6A0 /* AppTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTracker.swift; sourceTree = "<group>"; };
384319612628EC8700A6B6A0 /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
38431990262911C900A6B6A0 /* InfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InfoViewController.swift; sourceTree = "<group>"; };
384CBEA426226333000B08FC /* MenuBarItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarItems.swift; sourceTree = "<group>"; };
384CBEAA26226677000B08FC /* MenuBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarItem.swift; sourceTree = "<group>"; };
384CBEB826227329000B08FC /* OpenableApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenableApp.swift; sourceTree = "<group>"; };
384CBEBE262276A9000B08FC /* OpenableApps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenableApps.swift; sourceTree = "<group>"; };
38E394E3222D778F006F926E /* Launcher.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Launcher.app; sourceTree = BUILT_PRODUCTS_DIR; };
38E394E5222D778F006F926E /* AppDelegateLauncher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegateLauncher.swift; sourceTree = "<group>"; };
38E394E9222D7790006F926E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
38E394EC222D7790006F926E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
38E394EE222D7790006F926E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
38E394EF222D7790006F926E /* Launcher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Launcher.entitlements; sourceTree = "<group>"; };
38E394F8222D7B61006F926E /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
38EEA8BE26238C14005DD6A1 /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = "<group>"; };
489942CC5F97C7BABFC066E7 /* Pods-Menu Bar Dock.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar Dock.debug.xcconfig"; path = "Target Support Files/Pods-Menu Bar Dock/Pods-Menu Bar Dock.debug.xcconfig"; sourceTree = "<group>"; };
4E25AD7108669ADAF8C59B09 /* Pods_Menu_Bar_Dock.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Menu_Bar_Dock.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6EECCBA0CAA1B9E8A1451213 /* Pods-Menu Bar DockTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar DockTests.debug.xcconfig"; path = "Target Support Files/Pods-Menu Bar DockTests/Pods-Menu Bar DockTests.debug.xcconfig"; sourceTree = "<group>"; };
98BF29A3FBD4222A2994CC63 /* Pods_Launcher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Launcher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C9B9AC2CA0427E3D1161227B /* Pods_Menu_Bar_DockUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Menu_Bar_DockUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CAB0347B15BF571A9C8E5CEA /* Pods-Menu Bar DockUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar DockUITests.debug.xcconfig"; path = "Target Support Files/Pods-Menu Bar DockUITests/Pods-Menu Bar DockUITests.debug.xcconfig"; sourceTree = "<group>"; };
E569DC6845C62E8F66979A14 /* Pods-Menu Bar DockTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar DockTests.release.xcconfig"; path = "Target Support Files/Pods-Menu Bar DockTests/Pods-Menu Bar DockTests.release.xcconfig"; sourceTree = "<group>"; };
F4C68185006A66C34A217A6D /* Pods-Menu Bar DockUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Menu Bar DockUITests.release.xcconfig"; path = "Target Support Files/Pods-Menu Bar DockUITests/Pods-Menu Bar DockUITests.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
38412EF9222B3E2F00D3FA0C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3821D96E222DAB1800D69BD1 /* Cocoa.framework in Frameworks */,
38E394F9222D7B61006F926E /* ServiceManagement.framework in Frameworks */,
01DC8CAE270F9515FE1B0FAC /* Pods_Menu_Bar_Dock.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F0B222B3E3000D3FA0C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
B7AFA862BC6214A4D95098CC /* Pods_Menu_Bar_DockTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F16222B3E3000D3FA0C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
88AD155137A7D16EF21440CF /* Pods_Menu_Bar_DockUITests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38E394E0222D778F006F926E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8025B2CADE468941B1A841B9 /* Pods_Launcher.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2FD7E510B279AEB90CCCE4FE /* Pods */ = {
isa = PBXGroup;
children = (
2309E0F2AA48CFD993F809B6 /* Pods-Launcher.debug.xcconfig */,
16B37C87D338947865D0A942 /* Pods-Launcher.release.xcconfig */,
489942CC5F97C7BABFC066E7 /* Pods-Menu Bar Dock.debug.xcconfig */,
297EFDBCAC62749525C31A00 /* Pods-Menu Bar Dock.release.xcconfig */,
6EECCBA0CAA1B9E8A1451213 /* Pods-Menu Bar DockTests.debug.xcconfig */,
E569DC6845C62E8F66979A14 /* Pods-Menu Bar DockTests.release.xcconfig */,
CAB0347B15BF571A9C8E5CEA /* Pods-Menu Bar DockUITests.debug.xcconfig */,
F4C68185006A66C34A217A6D /* Pods-Menu Bar DockUITests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
38412EF3222B3E2F00D3FA0C = {
isa = PBXGroup;
children = (
38412EFE222B3E2F00D3FA0C /* MenuBarDock */,
38412F11222B3E3000D3FA0C /* MenuBarDockTests */,
38412F1C222B3E3000D3FA0C /* MenuBarDockUITests */,
38E394E4222D778F006F926E /* Launcher */,
38412EFD222B3E2F00D3FA0C /* Products */,
38E394F7222D7B61006F926E /* Frameworks */,
2FD7E510B279AEB90CCCE4FE /* Pods */,
);
sourceTree = "<group>";
};
38412EFD222B3E2F00D3FA0C /* Products */ = {
isa = PBXGroup;
children = (
38412EFC222B3E2F00D3FA0C /* Menu Bar Dock.app */,
38412F0E222B3E3000D3FA0C /* Menu Bar DockTests.xctest */,
38412F19222B3E3000D3FA0C /* Menu Bar DockUITests.xctest */,
38E394E3222D778F006F926E /* Launcher.app */,
);
name = Products;
sourceTree = "<group>";
};
38412EFE222B3E2F00D3FA0C /* MenuBarDock */ = {
isa = PBXGroup;
children = (
38412F03222B3E3000D3FA0C /* Assets.xcassets */,
38412F05222B3E3000D3FA0C /* Main.storyboard */,
38412F01222B3E2F00D3FA0C /* PreferencesViewController.swift */,
384319612628EC8700A6B6A0 /* AboutViewController.swift */,
38431990262911C900A6B6A0 /* InfoViewController.swift */,
38412F08222B3E3000D3FA0C /* Info.plist */,
38412F09222B3E3000D3FA0C /* MenuBarDock.entitlements */,
38EEA8BE26238C14005DD6A1 /* Utils.swift */,
38412EFF222B3E2F00D3FA0C /* AppDelegate.swift */,
3843194326267FC100A6B6A0 /* AppsTablePreferencesViewController.swift */,
38412F2F222B715400D3FA0C /* UserPrefs.swift */,
38412F31222B722100D3FA0C /* Constants.swift */,
384CBEAA26226677000B08FC /* MenuBarItem.swift */,
384CBEA426226333000B08FC /* MenuBarItems.swift */,
384CBEB826227329000B08FC /* OpenableApp.swift */,
384CBEBE262276A9000B08FC /* OpenableApps.swift */,
384319142626487200A6B6A0 /* RunningApp.swift */,
384318F72624A36A00A6B6A0 /* RunningApps.swift */,
3843191A2626487E00A6B6A0 /* RegularApp.swift */,
384319012624BAB800A6B6A0 /* RegularApps.swift */,
384319572628BD7800A6B6A0 /* AppTracker.swift */,
);
path = MenuBarDock;
sourceTree = "<group>";
};
38412F11222B3E3000D3FA0C /* MenuBarDockTests */ = {
isa = PBXGroup;
children = (
38412F12222B3E3000D3FA0C /* MenuBarDockTests.swift */,
38412F14222B3E3000D3FA0C /* Info.plist */,
);
path = MenuBarDockTests;
sourceTree = "<group>";
};
38412F1C222B3E3000D3FA0C /* MenuBarDockUITests */ = {
isa = PBXGroup;
children = (
38412F1D222B3E3000D3FA0C /* MenuBarDockUITests.swift */,
38412F1F222B3E3000D3FA0C /* Info.plist */,
);
path = MenuBarDockUITests;
sourceTree = "<group>";
};
38E394E4222D778F006F926E /* Launcher */ = {
isa = PBXGroup;
children = (
38E394E5222D778F006F926E /* AppDelegateLauncher.swift */,
38E394E9222D7790006F926E /* Assets.xcassets */,
38E394EB222D7790006F926E /* Main.storyboard */,
38E394EE222D7790006F926E /* Info.plist */,
38E394EF222D7790006F926E /* Launcher.entitlements */,
);
path = Launcher;
sourceTree = "<group>";
};
38E394F7222D7B61006F926E /* Frameworks */ = {
isa = PBXGroup;
children = (
3821D96D222DAB1700D69BD1 /* Cocoa.framework */,
38E394F8222D7B61006F926E /* ServiceManagement.framework */,
98BF29A3FBD4222A2994CC63 /* Pods_Launcher.framework */,
4E25AD7108669ADAF8C59B09 /* Pods_Menu_Bar_Dock.framework */,
30D61877253F489B8F948C27 /* Pods_Menu_Bar_DockTests.framework */,
C9B9AC2CA0427E3D1161227B /* Pods_Menu_Bar_DockUITests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
38412EFB222B3E2F00D3FA0C /* Menu Bar Dock */ = {
isa = PBXNativeTarget;
buildConfigurationList = 38412F22222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar Dock" */;
buildPhases = (
C5C0404AAACF2DAABE583079 /* [CP] Check Pods Manifest.lock */,
38412EF8222B3E2F00D3FA0C /* Sources */,
38412EF9222B3E2F00D3FA0C /* Frameworks */,
38412EFA222B3E2F00D3FA0C /* Resources */,
3875B2B5222E1EDA0042D748 /* CopyFiles */,
38E38B81262204CA00B95187 /* ShellScript */,
);
buildRules = (
);
dependencies = (
38E394F6222D7B57006F926E /* PBXTargetDependency */,
);
name = "Menu Bar Dock";
productName = MenuDock;
productReference = 38412EFC222B3E2F00D3FA0C /* Menu Bar Dock.app */;
productType = "com.apple.product-type.application";
};
38412F0D222B3E3000D3FA0C /* Menu Bar DockTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 38412F25222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar DockTests" */;
buildPhases = (
4436723CBA676C3A82A067A6 /* [CP] Check Pods Manifest.lock */,
38412F0A222B3E3000D3FA0C /* Sources */,
38412F0B222B3E3000D3FA0C /* Frameworks */,
38412F0C222B3E3000D3FA0C /* Resources */,
);
buildRules = (
);
dependencies = (
38412F10222B3E3000D3FA0C /* PBXTargetDependency */,
);
name = "Menu Bar DockTests";
productName = MenuDockTests;
productReference = 38412F0E222B3E3000D3FA0C /* Menu Bar DockTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
38412F18222B3E3000D3FA0C /* Menu Bar DockUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 38412F28222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar DockUITests" */;
buildPhases = (
B86D3DC26529A66E5DCC6910 /* [CP] Check Pods Manifest.lock */,
38412F15222B3E3000D3FA0C /* Sources */,
38412F16222B3E3000D3FA0C /* Frameworks */,
38412F17222B3E3000D3FA0C /* Resources */,
);
buildRules = (
);
dependencies = (
38412F1B222B3E3000D3FA0C /* PBXTargetDependency */,
);
name = "Menu Bar DockUITests";
productName = MenuDockUITests;
productReference = 38412F19222B3E3000D3FA0C /* Menu Bar DockUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
38E394E2222D778F006F926E /* Launcher */ = {
isa = PBXNativeTarget;
buildConfigurationList = 38E394F0222D7790006F926E /* Build configuration list for PBXNativeTarget "Launcher" */;
buildPhases = (
7D2237419116724B6A283AA1 /* [CP] Check Pods Manifest.lock */,
38E394DF222D778F006F926E /* Sources */,
38E394E0222D778F006F926E /* Frameworks */,
38E394E1222D778F006F926E /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = Launcher;
productName = Launcher;
productReference = 38E394E3222D778F006F926E /* Launcher.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
38412EF4222B3E2F00D3FA0C /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1010;
LastUpgradeCheck = 1240;
ORGANIZATIONNAME = "Ethan Sarif-Kattan";
TargetAttributes = {
38412EFB222B3E2F00D3FA0C = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1240;
SystemCapabilities = {
com.apple.HardenedRuntime = {
enabled = 1;
};
};
};
38412F0D222B3E3000D3FA0C = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1240;
TestTargetID = 38412EFB222B3E2F00D3FA0C;
};
38412F18222B3E3000D3FA0C = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1240;
TestTargetID = 38412EFB222B3E2F00D3FA0C;
};
38E394E2222D778F006F926E = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1240;
SystemCapabilities = {
com.apple.HardenedRuntime = {
enabled = 1;
};
};
};
};
};
buildConfigurationList = 38412EF7222B3E2F00D3FA0C /* Build configuration list for PBXProject "Menu Bar Dock" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 38412EF3222B3E2F00D3FA0C;
productRefGroup = 38412EFD222B3E2F00D3FA0C /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
38412EFB222B3E2F00D3FA0C /* Menu Bar Dock */,
38412F0D222B3E3000D3FA0C /* Menu Bar DockTests */,
38412F18222B3E3000D3FA0C /* Menu Bar DockUITests */,
38E394E2222D778F006F926E /* Launcher */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
38412EFA222B3E2F00D3FA0C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
38412F04222B3E3000D3FA0C /* Assets.xcassets in Resources */,
38D723EB222D8D8600D6F079 /* Launcher.app in Resources */,
38412F07222B3E3000D3FA0C /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F0C222B3E3000D3FA0C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F17222B3E3000D3FA0C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
38E394E1222D778F006F926E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
38E394EA222D7790006F926E /* Assets.xcassets in Resources */,
38E394ED222D7790006F926E /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
38E38B81262204CA00B95187 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "if which \"${PODS_ROOT}/SwiftLint/swiftlint\" >/dev/null; then\n\"${PODS_ROOT}/SwiftLint/swiftlint\" --fix #off for now\n\"${PODS_ROOT}/SwiftLint/swiftlint\"\n\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
};
4436723CBA676C3A82A067A6 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Menu Bar DockTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
7D2237419116724B6A283AA1 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Launcher-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
B86D3DC26529A66E5DCC6910 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Menu Bar DockUITests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
C5C0404AAACF2DAABE583079 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Menu Bar Dock-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
38412EF8222B3E2F00D3FA0C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3843194426267FC100A6B6A0 /* AppsTablePreferencesViewController.swift in Sources */,
384CBEAB26226677000B08FC /* MenuBarItem.swift in Sources */,
384319152626487200A6B6A0 /* RunningApp.swift in Sources */,
384CBEB926227329000B08FC /* OpenableApp.swift in Sources */,
38EEA8BF26238C14005DD6A1 /* Utils.swift in Sources */,
3843191B2626487E00A6B6A0 /* RegularApp.swift in Sources */,
38412F32222B722100D3FA0C /* Constants.swift in Sources */,
38412F30222B715400D3FA0C /* UserPrefs.swift in Sources */,
38431992262911C900A6B6A0 /* InfoViewController.swift in Sources */,
384319582628BD7800A6B6A0 /* AppTracker.swift in Sources */,
384319022624BAB800A6B6A0 /* RegularApps.swift in Sources */,
384318F82624A36A00A6B6A0 /* RunningApps.swift in Sources */,
38412F02222B3E2F00D3FA0C /* PreferencesViewController.swift in Sources */,
384CBEBF262276A9000B08FC /* OpenableApps.swift in Sources */,
38412F00222B3E2F00D3FA0C /* AppDelegate.swift in Sources */,
384319632628EC8700A6B6A0 /* AboutViewController.swift in Sources */,
384CBEA526226333000B08FC /* MenuBarItems.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F0A222B3E3000D3FA0C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
38412F13222B3E3000D3FA0C /* MenuBarDockTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38412F15222B3E3000D3FA0C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
38412F1E222B3E3000D3FA0C /* MenuBarDockUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
38E394DF222D778F006F926E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
38E394E6222D778F006F926E /* AppDelegateLauncher.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
38412F10222B3E3000D3FA0C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 38412EFB222B3E2F00D3FA0C /* Menu Bar Dock */;
targetProxy = 38412F0F222B3E3000D3FA0C /* PBXContainerItemProxy */;
};
38412F1B222B3E3000D3FA0C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 38412EFB222B3E2F00D3FA0C /* Menu Bar Dock */;
targetProxy = 38412F1A222B3E3000D3FA0C /* PBXContainerItemProxy */;
};
38E394F6222D7B57006F926E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 38E394E2222D778F006F926E /* Launcher */;
targetProxy = 38E394F5222D7B57006F926E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
38412F05222B3E3000D3FA0C /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
38412F06222B3E3000D3FA0C /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
38E394EB222D7790006F926E /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
38E394EC222D7790006F926E /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
38412F20222B3E3000D3FA0C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
38412F21222B3E3000D3FA0C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
38412F23222B3E3000D3FA0C /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 489942CC5F97C7BABFC066E7 /* Pods-Menu Bar Dock.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = MenuBarDock/MenuBarDock.entitlements;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 26;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = T34G959ZG8;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = MenuBarDock/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.6;
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDock;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
38412F24222B3E3000D3FA0C /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 297EFDBCAC62749525C31A00 /* Pods-Menu Bar Dock.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = MenuBarDock/MenuBarDock.entitlements;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 26;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = T34G959ZG8;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = MenuBarDock/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MARKETING_VERSION = 4.6;
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDock;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Release;
};
38412F26222B3E3000D3FA0C /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 6EECCBA0CAA1B9E8A1451213 /* Pods-Menu Bar DockTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
INFOPLIST_FILE = MenuBarDockTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Menu Bar Dock.app/Contents/MacOS/Menu Bar Dock";
};
name = Debug;
};
38412F27222B3E3000D3FA0C /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = E569DC6845C62E8F66979A14 /* Pods-Menu Bar DockTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
INFOPLIST_FILE = MenuBarDockTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Menu Bar Dock.app/Contents/MacOS/Menu Bar Dock";
};
name = Release;
};
38412F29222B3E3000D3FA0C /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = CAB0347B15BF571A9C8E5CEA /* Pods-Menu Bar DockUITests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
INFOPLIST_FILE = MenuBarDockUITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
TEST_TARGET_NAME = MenuBarDock;
};
name = Debug;
};
38412F2A222B3E3000D3FA0C /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = F4C68185006A66C34A217A6D /* Pods-Menu Bar DockUITests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
INFOPLIST_FILE = MenuBarDockUITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
TEST_TARGET_NAME = MenuBarDock;
};
name = Release;
};
38E394F1222D7790006F926E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2309E0F2AA48CFD993F809B6 /* Pods-Launcher.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = Launcher/Launcher.entitlements;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Launcher/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockLauncher;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
};
name = Debug;
};
38E394F2222D7790006F926E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 16B37C87D338947865D0A942 /* Pods-Launcher.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = Launcher/Launcher.entitlements;
CODE_SIGN_IDENTITY = "Mac Developer";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = T34G959ZG8;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = Launcher/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.ethansk.MenuBarDockLauncher;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
38412EF7222B3E2F00D3FA0C /* Build configuration list for PBXProject "Menu Bar Dock" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38412F20222B3E3000D3FA0C /* Debug */,
38412F21222B3E3000D3FA0C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
38412F22222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar Dock" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38412F23222B3E3000D3FA0C /* Debug */,
38412F24222B3E3000D3FA0C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
38412F25222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar DockTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38412F26222B3E3000D3FA0C /* Debug */,
38412F27222B3E3000D3FA0C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
38412F28222B3E3000D3FA0C /* Build configuration list for PBXNativeTarget "Menu Bar DockUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38412F29222B3E3000D3FA0C /* Debug */,
38412F2A222B3E3000D3FA0C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
38E394F0222D7790006F926E /* Build configuration list for PBXNativeTarget "Launcher" */ = {
isa = XCConfigurationList;
buildConfigurations = (
38E394F1222D7790006F926E /* Debug */,
38E394F2222D7790006F926E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 38412EF4222B3E2F00D3FA0C /* Project object */;
}
================================================
FILE: Menu Bar Dock.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Menu Bar Dock.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: Menu Bar Dock.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: MenuBarDock/AboutViewController.swift
================================================
//
// AboutViewController.swift
// Menu Bar Dock
//
// Created by Ethan Sarif-Kattan on 15/04/2021.
// Copyright © 2021 Ethan Sarif-Kattan. All rights reserved.
//
import Cocoa
class AboutViewController: NSViewController {
@IBOutlet weak var versionLabel: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
setVersionLabel()
}
@IBAction func menuBarDockWebsitePressed(_ sender: NSButton) {
if let url = URL(string: "https://www.menubardock.com"),
NSWorkspace.shared.open(url) {
}
}
@IBAction func myWebsitePressed(_ sender: Any) {
if let url = URL(string: "https://portosaurus.github.io/ethansk/"),
NSWorkspace.shared.open(url) {
}
}
@IBAction func etgGamesPressed(_ sender: NSButton) {
if let url = URL(string: "https://www.etggames.com"),
NSWorkspace.shared.open(url) {
}
}
private func setVersionLabel() {
guard let version: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String else { return }
versionLabel.stringValue = "Version \(version)"
}
}
================================================
FILE: MenuBarDock/AppDelegate.swift
================================================
//
// AppDelegate.swift
// MenuBarDock
//
// Created by Ethan Sarif-Kattan on 02/03/2019.
// Copyright © 2019 Ethan Sarif-Kattan. All rights reserved.
//
import Cocoa
import ServiceManagement
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
let popover = NSPopover()
var storyboard: NSStoryboard!
var preferencesWindow = NSWindow()
var aboutWindowController: NSWindowController?
var infoWindowController: NSWindowController?
var userPrefs = UserPrefs()
var menuBarItems: MenuBarItems! // need reference so it stays alive
var openableApps: OpenableApps!
var appTracker: AppTracker!
var runningApps: RunningApps!
var regularApps: RegularApps!
func applicationDidFinishLaunching(_ aNotification: Notification) {
initApp()
setupLaunchAtLogin()
}
func applicationWillTerminate(_ aNotification: Notification) {
userPrefs.save()
}
func initApp() {
userPrefs.load()
storyboard = NSStoryboard(name: "Main", bundle: nil)
menuBarItems = MenuBarItems(
userPrefsDataSource: userPrefs
)
menuBarItems.delegate = self
appTracker = AppTracker()
appTracker.delegate = self
runningApps = RunningApps(userPrefsDataSource: userPrefs)
regularApps = RegularApps(userPrefsDataSource: userPrefs)
openableApps = OpenableApps(userPrefsDataSource: userPrefs, runningApps: runningApps, regularApps: regularApps)
updateMenuBarItems()
}
func setupLaunchAtLogin() {
let launcherAppId = Constants.App.launcherBundleId
let runningApps = NSWorkspace.shared.runningApplications
if #available(macOS 13.0, *) {
do {
let appService = SMAppService.loginItem(identifier: launcherAppId)
if userPrefs.launchAtLogin {
try appService.register()
} else {
try appService.unregister()
}
} catch {
print("Failed to register/unregister login item: \(error)")
}
} else {
SMLoginItemSetEnabled(launcherAppId as CFString, false) // needs to be set to false to actually create the loginitems.501.plist file, then we can set it to the legit value...weird
SMLoginItemSetEnabled(launcherAppId as CFString, userPrefs.launchAtLogin)
}
let isLauncherRunning = !runningApps.filter { $0.bundleIdentifier == launcherAppId }.isEmpty
if isLauncherRunning {
DistributedNotificationCenter.default().post(name: Notification.Name("killLauncher"), object: Bundle.main.bundleIdentifier!)
}
}
private func updateMenuBarItems() {
menuBarItems.update(openableApps: openableApps)
}
}
extension AppDelegate: MenuBarItemsDelegate {
func didSetAppOpeningMethod(_ method: AppOpeningMethod?, _ app: OpenableApp) {
userPrefs.appOpeningMethods[app.id] = method
userPrefsWasUpdated()
}
func didOpenPreferencesWindow() {
openPreferencesWindow()
}
func openPreferencesWindow() {
if let viewController = NSStoryboard(name: "Main", bundle: nil).instantiateController(withIdentifier: Constants.Identifiers.ViewControllers.preferences) as? PreferencesViewController {
viewController.userPrefsDataSource = userPrefs
viewController.delegate = self
if !preferencesWindow.isVisible == true {
preferencesWindow = NSWindow(contentViewController: viewController)
preferencesWindow.makeKeyAndOrderFront(self)
}
preferencesWindow.makeKeyAndOrderFront(self)
preferencesWindow.minSize = preferencesWindow.frame.size
preferencesWindow.windowController?.showWindow(self)
NSApp.activate(ignoringOtherApps: true)// stops bugz n shiz i think
}
}
}
extension AppDelegate: AppTrackerDelegate {
func appWasActivated(runningApp: NSRunningApplication) {
runningApps.handleAppActivation(runningApp: runningApp)
regularApps.handleAppActivation(runningApp: runningApp)
appActivationChange()
}
func appWasQuit(runningApp: NSRunningApplication) {
runningApps.handleAppQuit(runningApp: runningApp)
regularApps.handleAppQuit(runningApp: runningApp)
appActivationChange()
}
private func appActivationChange() {
runningApps.update()
// regularApps.update() //doesn't make sense to update regular apps based on app activations. we could if we wanted to due to the hot reactive code structure, but best not to.
openableApps.update(runningApps: runningApps, regularApps: regularApps)
updateMenuBarItems()
}
}
extension AppDelegate: PreferencesViewControllerDelegate {
func maxRunningAppsSliderDidChange(_ value: Int) {
userPrefs.maxRunningApps = value
userPrefsWasUpdated()
}
func itemSlotWidthSliderDidChange(_ value: Double) {
userPrefs.itemSlotWidth = CGFloat(value)
userPrefsWasUpdated()
}
func appIconSizeSliderDidChange(_ value: Double) {
userPrefs.appIconSize = CGFloat(value)
userPrefsWasUpdated()
}
func runningAppsSortingMethodDidChange(_ value: RunningAppsSortingMethod) {
userPrefs.runningAppsSortingMethod = value
userPrefsWasUpdated()
}
func resetPreferencesToDefaultsWasPressed() {
userPrefs.resetToDefaults()
userPrefsWasUpdated()
}
func resetAppOpeningMethodsWasPressed() {
userPrefs.resetAppOpeningMethodsToDefaults()
userPrefsWasUpdated()
}
func launchAtLoginDidChange(_ value: Bool) {
userPrefs.launchAtLogin = value
let launcherAppId = Constants.App.launcherBundleId
if #available(macOS 13.0, *) {
do {
let appService = SMAppService.loginItem(identifier: launcherAppId)
if value {
try appService.register()
} else {
try appService.unregister()
}
} catch {
print("Failed to register/unregister login item: \(error)")
}
} else {
SMLoginItemSetEnabled(launcherAppId as CFString, value)
}
userPrefsWasUpdated()
}
func aboutWasPressed() {
if let windowController = aboutWindowController ?? storyboard.instantiateController(withIdentifier: Constants.Identifiers.WindowControllers.about) as? NSWindowController {
windowController.showWindow(self)
aboutWindowController = windowController
}
}
func hideFinderDidChange(_ value: Bool) {
userPrefs.hideFinderFromRunningApps = value
userPrefsWasUpdated()
}
func hideActiveAppDidChange(_ value: Bool) {
userPrefs.hideActiveAppFromRunningApps = value
userPrefsWasUpdated()
}
func preserveAppOrderDidChange(_ value: Bool) {
userPrefs.preserveAppOrder = value
userPrefsWasUpdated()
}
func rightClickByDefaultDidChange(_ value: Bool) {
userPrefs.rightClickByDefault = value
userPrefsWasUpdated()
}
func appOpeningMethodDidChange(_ value: AppOpeningMethod) {
userPrefs.defaultAppOpeningMethod = value
userPrefsWasUpdated()
}
func regularAppsUrlsWereAdded(_ value: [URL]) {
value.forEach { (url) in
if !userPrefs.regularAppsUrls.contains(url) {
userPrefs.regularAppsUrls.append(url)
}
}
userPrefsWasUpdated()
}
func regularAppsUrlsWereRemoved(_ removedIndexes: IndexSet) {
userPrefs.regularAppsUrls.remove(at: removedIndexes)
userPrefsWasUpdated()
}
func regularAppUrlWasMoved(oldIndex: Int, newIndex: Int) {
let url = userPrefs.regularAppsUrls.remove(at: oldIndex)
userPrefs.regularAppsUrls.insert(url, at: newIndex)
userPrefsWasUpdated()
}
func sideToShowRunningAppsDidChange(_ value: SideToShowRunningApps) {
userPrefs.sideToShowRunningApps = value
userPrefsWasUpdated()
}
func hideDuplicateAppsDidChange(_ value: Bool) {
userPrefs.hideDuplicateApps = value
userPrefsWasUpdated()
}
func duplicateAppsPriorityDidChange(_ value: DuplicateAppsPriority) {
userPrefs.duplicateAppsPriority = value
userPrefsWasUpdated()
}
func infoWasPressed() {
if let windowController = infoWindowController ?? storyboard.instantiateController(withIdentifier: Constants.Identifiers.WindowControllers.info) as? NSWindowController {
windowController.showWindow(self)
infoWindowController = windowController
}
}
private func userPrefsWasUpdated() {
userPrefs.save()
runningApps.update()
regularApps.update()
openableApps.update(runningApps: runningApps, regularApps: regularApps)
updateMenuBarItems()
}
}
================================================
FILE: MenuBarDock/AppTracker.swift
================================================
//
// AppTracker.swift
// Menu Bar Dock
//
// Created by Ethan Sarif-Kattan on 15/04/2021.
// Copyright © 2021 Ethan Sarif-Kattan. All rights reserved.
//
import Cocoa
protocol AppTrackerDelegate: AnyObject {
func appWasActivated(runningApp: NSRunningApplication)
func appWasQuit(runningApp: NSRunningApplication)
}
// tracks app activations and quits
class AppTracker {
public weak var delegate: AppTrackerDelegate?
init() {
trackAppsBeingActivated()
trackAppsBeingQuit()
}
private func trackAppsBeingActivated() {
NSWorkspace.shared.notificationCenter.addObserver(forName: NSWorkspace.didActivateApplicationNotification, object: nil, queue: .main) { (notification) in
if
let app = notification.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication,
NSWorkspace.shared.frontmostApplication == app // make sure it wasn't triggered by some background process
{
self.delegate?.appWasActivated(runningApp: app)
}
}
}
private func trackAppsBeingQuit() {
NSWorkspace.shared.notificationCenter.addObserver(forName: NSWorkspace.didTerminateApplicationNotification, object: nil, queue: .main) { (notification) in
if let app = notification.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication {
self.delegate?.appWasQuit(runningApp: app)
}
}
}
}
================================================
FILE: MenuBarDock/AppsTablePreferencesViewController.swift
================================================
//
// AppsTablePreferencesViewController.swift
// Menu Bar Dock
//
// Created by Ethan Sarif-Kattan on 14/04/2021.
// Copyright © 2021 Ethan Sarif-Kattan. All rights reserved.
//
import Cocoa
extension PreferencesViewController: NSTableViewDataSource {
func numberOfRows(in tableView: NSTableView) -> Int {
userPrefsDataSource.regularAppsUrls.count
}
}
extension PreferencesViewController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
return 30
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
var cellIdentifier: String = ""
let url = userPrefsDataSource.regularAppsUrls[row]
let bundle = Bundle(url: url)
let icon = NSWorkspace.shared.icon(forFile: url.path)
if tableColumn == tableView.tableColumns[0] {
cellIdentifier = "AppCell"
}
if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: cellIdentifier), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = bundle?.name ?? "NOT FOUND"
cell.imageView?.image = icon
return cell
}
return nil
}
// drag and drop copied from https://stackoverflow.com/questions/2121907/drag-drop-reorder-rows-on-nstableview
func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? {
let pasteboard = NSPasteboardItem()
pasteboard.setString("\(row)", forType: .string)
return pasteboard
}
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation {
return .move
}
func tableView(_ tableView: NSTableView, acceptDrop info: NSDraggingInfo, row: Int, dropOperation: NSTableView.DropOperation) -> Bool {
var oldIndexes = [Int]()
info.enumerateDraggingItems(options: [], for: tableView, classes: [NSPasteboardItem.self], searchOptions: [:]) { dragItem, _, _ in
if let str = (dragItem.item as? NSPasteboardItem)?.string(forType: .string), let index = Int(str) {
oldIndexes.append(index)
}
}
var oldIndexOffset = 0
var newIndexOffset = 0
tableView.beginUpdates()
for oldIndex in oldIndexes {
if oldIndex < row {
let old = oldIndex + oldIndexOffset
let new = row - 1
tableView.moveRow(at: oldIndex + oldIndexOffset, to: row - 1)
delegate?.regularAppUrlWasMoved(oldIndex: old, newIndex: new)
oldIndexOffset -= 1
} else {
let old = oldIndex
let new = row + newIndexOffset
tableView.moveRow(at: oldIndex, to: row + newIndexOffset)
delegate?.regularAppUrlWasMoved(oldIndex: old, newIndex: new)
newIndexOffset += 1
}
}
tableView.endUpdates()
return true
}
}
================================================
FILE: MenuBarDock/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"filename" : "icon_16x16.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "icon_16x16@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "icon_32x32.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "icon_32x32@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "icon_128x128.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "icon_128x128@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "icon_256x256.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "icon_256x256@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "icon_512x512.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: MenuBarDock/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: MenuBarDock/Assets.xcassets/ETGgames.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "logo.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: MenuBarDock/Assets.xcassets/ETGgamesCircle.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "spikesSmallerWhiteBG.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: MenuBarDock/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Application-->
<scene sceneID="JPo-4y-FX3">
<objects>
<application id="hnw-xV-0zn" sceneMemberID="viewController">
<menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="MenuBarDock" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="MenuBarDock" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About MenuBarDock" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
<menuItem title="Services" id="NMo-om-nkz">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
<menuItem title="Hide MenuBarDock" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit MenuBarDock" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="dMs-cI-mzQ">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="File" id="bib-Uj-vzu">
<items>
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
<connections>
<action selector="newDocument:" target="Ady-hI-5gd" id="4Si-XN-c54"/>
</connections>
</menuItem>
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
<connections>
<action selector="openDocument:" target="Ady-hI-5gd" id="bVn-NM-KNZ"/>
</connections>
</menuItem>
<menuItem title="Open Recent" id="tXI-mr-wws">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
<items>
<menuItem title="Clear Menu" id="vNY-rz-j42">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="clearRecentDocuments:" target="Ady-hI-5gd" id="Daa-9d-B3U"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
<connections>
<action selector="performClose:" target="Ady-hI-5gd" id="HmO-Ls-i7Q"/>
</connections>
</menuItem>
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
<connections>
<action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/>
</connections>
</menuItem>
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
<connections>
<action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/>
</connections>
</menuItem>
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
<connections>
<action selector="revertDocumentToSaved:" target="Ady-hI-5gd" id="iJ3-Pv-kwq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="runPageLayout:" target="Ady-hI-5gd" id="Din-rz-gC5"/>
</connections>
</menuItem>
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
<connections>
<action selector="print:" target="Ady-hI-5gd" id="qaZ-4w-aoO"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="5QF-Oa-p0T">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
<items>
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
<connections>
<action selector="undo:" target="Ady-hI-5gd" id="M6e-cu-g7V"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
<connections>
<action selector="redo:" target="Ady-hI-5gd" id="oIA-Rs-6OD"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
<connections>
<action selector="cut:" target="Ady-hI-5gd" id="YJe-68-I9s"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
<connections>
<action selector="copy:" target="Ady-hI-5gd" id="G1f-GL-Joy"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
<connections>
<action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="Ady-hI-5gd" id="cEh-KX-wJQ"/>
</connections>
</menuItem>
<menuItem title="Delete" id="pa3-QI-u2k">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="Ady-hI-5gd" id="0Mk-Ml-PaM"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
<connections>
<action selector="selectAll:" target="Ady-hI-5gd" id="VNm-Mi-diN"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
<menuItem title="Find" id="4EN-yA-p0u">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="1b7-l0-nxx">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="cD7-Qs-BN4"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="WD3-Gg-5AJ"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="NDo-RZ-v9R"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
<connections>
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="U76-nv-p5D"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
<connections>
<action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
<connections>
<action selector="showGuessPanel:" target="Ady-hI-5gd" id="vFj-Ks-hy3"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
<connections>
<action selector="checkSpelling:" target="Ady-hI-5gd" id="fz7-VC-reM"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="Ady-hI-5gd" id="7w6-Qz-0kB"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="Ady-hI-5gd" id="muD-Qn-j4w"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="Ady-hI-5gd" id="2lM-Qi-WAP"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="9ic-FL-obx">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
<items>
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="Ady-hI-5gd" id="oku-mr-iSq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="Ady-hI-5gd" id="3IJ-Se-DZD"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="Ady-hI-5gd" id="ptq-xd-QOA"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="Ady-hI-5gd" id="oCt-pO-9gS"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="cwL-P1-jid">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="Ady-hI-5gd" id="Gip-E3-Fov"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="tRr-pd-1PS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="Ady-hI-5gd" id="R1I-Nq-Kbl"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="Ady-hI-5gd" id="DvP-Fe-Py6"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="2oI-Rn-ZJC">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
<items>
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="Ady-hI-5gd" id="sPh-Tk-edu"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="Ady-hI-5gd" id="iUZ-b5-hil"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="Ady-hI-5gd" id="26H-TL-nsh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="xrE-MZ-jX0">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
<items>
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="Ady-hI-5gd" id="654-Ng-kyl"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="Ady-hI-5gd" id="dX8-6p-jy9"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Format" id="jxT-CU-nIS">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
<items>
<menuItem title="Font" id="Gi5-1S-RQB">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
<items>
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
<connections>
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
</connections>
</menuItem>
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
<connections>
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
</connections>
</menuItem>
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
<connections>
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
</connections>
</menuItem>
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
<connections>
<action selector="underline:" target="Ady-hI-5gd" id="FYS-2b-JAY"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
<connections>
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
</connections>
</menuItem>
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
<connections>
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
<menuItem title="Kern" id="jBQ-r6-VK2">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
<items>
<menuItem title="Use Default" id="GUa-eO-cwY">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardKerning:" target="Ady-hI-5gd" id="6dk-9l-Ckg"/>
</connections>
</menuItem>
<menuItem title="Use None" id="cDB-IK-hbR">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffKerning:" target="Ady-hI-5gd" id="U8a-gz-Maa"/>
</connections>
</menuItem>
<menuItem title="Tighten" id="46P-cB-AYj">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="tightenKerning:" target="Ady-hI-5gd" id="hr7-Nz-8ro"/>
</connections>
</menuItem>
<menuItem title="Loosen" id="ogc-rX-tC1">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="loosenKerning:" target="Ady-hI-5gd" id="8i4-f9-FKE"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Ligatures" id="o6e-r0-MWq">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
<items>
<menuItem title="Use Default" id="agt-UL-0e3">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useStandardLigatures:" target="Ady-hI-5gd" id="7uR-wd-Dx6"/>
</connections>
</menuItem>
<menuItem title="Use None" id="J7y-lM-qPV">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="turnOffLigatures:" target="Ady-hI-5gd" id="iX2-gA-Ilz"/>
</connections>
</menuItem>
<menuItem title="Use All" id="xQD-1f-W4t">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="useAllLigatures:" target="Ady-hI-5gd" id="KcB-kA-TuK"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Baseline" id="OaQ-X3-Vso">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
<items>
<menuItem title="Use Default" id="3Om-Ey-2VK">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unscript:" target="Ady-hI-5gd" id="0vZ-95-Ywn"/>
</connections>
</menuItem>
<menuItem title="Superscript" id="Rqc-34-cIF">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="superscript:" target="Ady-hI-5gd" id="3qV-fo-wpU"/>
</connections>
</menuItem>
<menuItem title="Subscript" id="I0S-gh-46l">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="subscript:" target="Ady-hI-5gd" id="Q6W-4W-IGz"/>
</connections>
</menuItem>
<menuItem title="Raise" id="2h7-ER-AoG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="raiseBaseline:" target="Ady-hI-5gd" id="4sk-31-7Q9"/>
</connections>
</menuItem>
<menuItem title="Lower" id="1tx-W0-xDw">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowerBaseline:" target="Ady-hI-5gd" id="OF1-bc-KW4"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
<connections>
<action selector="orderFrontColorPanel:" target="Ady-hI-5gd" id="mSX-Xz-DV3"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="copyFont:" target="Ady-hI-5gd" id="GJO-xA-L4q"/>
</connections>
</menuItem>
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteFont:" target="Ady-hI-5gd" id="JfD-CL-leO"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Text" id="Fal-I4-PZk">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Text" id="d9c-me-L2H">
<items>
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
<connections>
<action selector="alignLeft:" target="Ady-hI-5gd" id="zUv-R1-uAa"/>
</connections>
</menuItem>
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
<connections>
<action selector="alignCenter:" target="Ady-hI-5gd" id="spX-mk-kcS"/>
</connections>
</menuItem>
<menuItem title="Justify" id="J5U-5w-g23">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="alignJustified:" target="Ady-hI-5gd" id="ljL-7U-jND"/>
</connections>
</menuItem>
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
<connections>
<action selector="alignRight:" target="Ady-hI-5gd" id="r48-bG-YeY"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
<menuItem title="Writing Direction" id="H1b-Si-o9J">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
<items>
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem id="YGs-j5-SAR">
<string key="title"> Default</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionNatural:" target="Ady-hI-5gd" id="qtV-5e-UBP"/>
</connections>
</menuItem>
<menuItem id="Lbh-J2-qVU">
<string key="title"> Left to Right</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="S0X-9S-QSf"/>
</connections>
</menuItem>
<menuItem id="jFq-tB-4Kx">
<string key="title"> Right to Left</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeBaseWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="5fk-qB-AqJ"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem id="Nop-cj-93Q">
<string key="title"> Default</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionNatural:" target="Ady-hI-5gd" id="lPI-Se-ZHp"/>
</connections>
</menuItem>
<menuItem id="BgM-ve-c93">
<string key="title"> Left to Right</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="caW-Bv-w94"/>
</connections>
</menuItem>
<menuItem id="RB4-Sm-HuC">
<string key="title"> Right to Left</string>
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="makeTextWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="EXD-6r-ZUu"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
<menuItem title="Show Ruler" id="vLm-3I-IUL">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleRuler:" target="Ady-hI-5gd" id="FOx-HJ-KwY"/>
</connections>
</menuItem>
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="copyRuler:" target="Ady-hI-5gd" id="71i-fW-3W2"/>
</connections>
</menuItem>
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="pasteRuler:" target="Ady-hI-5gd" id="cSh-wd-qM2"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="H8h-7b-M4v">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="View" id="HyV-fh-RgO">
<items>
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="toggleToolbarShown:" target="Ady-hI-5gd" id="BXY-wc-z0C"/>
</connections>
</menuItem>
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="runToolbarCustomizationPalette:" target="Ady-hI-5gd" id="pQI-g3-MTW"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleSidebar:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
</connections>
</menuItem>
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleFullScreen:" target="Ady-hI-5gd" id="dU3-MA-1Rq"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="Ady-hI-5gd" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="Ady-hI-5gd" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="Ady-hI-5gd" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="wpr-3q-Mcd">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
<items>
<menuItem title="MenuBarDock Help" keyEquivalent="?" id="FKE-Sm-Kum">
<connections>
<action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
</connections>
</application>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Menu_Bar_Dock" customModuleProvider="target"/>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="75" y="0.0"/>
</scene>
<!--Window Controller-->
<scene sceneID="9lT-h9-rFR">
<objects>
<windowController storyboardIdentifier="AboutWindowController" showSeguePresentationStyle="single" id="qdu-rn-vPL" sceneMemberID="viewController">
<window key="window" title="About" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="0ts-JK-4v9">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<rect key="contentRect" x="1056" y="544" width="480" height="270"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
<view key="contentView" id="5fP-mo-fb9">
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
<autoresizingMask key="autoresizingMask"/>
</view>
<connections>
<outlet property="delegate" destination="qdu-rn-vPL" id="akg-0e-ipn"/>
</connections>
</window>
<connections>
<segue destination="BVq-hD-zNV" kind="relationship" relationship="window.shadowedContentViewController" id="9JJ-AC-ExM"/>
</connections>
</windowController>
<customObject id="Hbl-FP-CdP" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-444" y="168"/>
</scene>
<!--About-->
<scene sceneID="EhK-jd-MYs">
<objects>
<viewController title="About" storyboardIdentifier="AboutViewController" showSeguePresentationStyle="single" id="BVq-hD-zNV" customClass="AboutViewController" customModule="Menu_Bar_Dock" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" wantsLayer="YES" id="Es4-SC-pal">
<rect key="frame" x="0.0" y="0.0" width="450" height="200"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4yh-0T-Dlc">
<rect key="frame" x="18" y="149" width="176" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Menu Bar Dock" id="lTe-NV-dYz">
<font key="font" textStyle="largeTitle" name=".SFNS-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ppJ-1n-UMA">
<rect key="frame" x="18" y="20" width="227" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Copyright © 2021 Ethan Sarif-Kattan" id="gWN-Gm-FOF">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="y7s-17-oDz">
<rect key="frame" x="362" y="20" width="70" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Version 69" id="5Y0-e7-w1D">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="FOi-iw-Qmp">
<rect key="frame" x="13" y="106" width="179" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Menu Bar Dock Website" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="vIX-M7-7Kg">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="menuBarDockWebsitePressed:" target="BVq-hD-zNV" id="bDt-pP-KGJ"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RYJ-Jo-fXA">
<rect key="frame" x="13" y="71" width="143" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Creator's Website" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="l2I-km-L9C">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="myWebsitePressed:" target="BVq-hD-zNV" id="ehe-xP-UNE"/>
</connections>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e3f-4A-DRn">
<rect key="frame" x="376" y="126" width="54" height="54"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="ETGgamesCircle" imagePosition="only" alignm
gitextract_7cny6vu1/ ├── .gitignore ├── .swiftlint.yml ├── CNAME ├── Launcher/ │ ├── AppDelegateLauncher.swift │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── Main.storyboard │ ├── Info.plist │ └── Launcher.entitlements ├── Menu Bar Dock.xcodeproj/ │ └── project.pbxproj ├── Menu Bar Dock.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ └── IDEWorkspaceChecks.plist ├── MenuBarDock/ │ ├── AboutViewController.swift │ ├── AppDelegate.swift │ ├── AppTracker.swift │ ├── AppsTablePreferencesViewController.swift │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── ETGgames.imageset/ │ │ │ └── Contents.json │ │ └── ETGgamesCircle.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── Main.storyboard │ ├── Constants.swift │ ├── Info.plist │ ├── InfoViewController.swift │ ├── MenuBarDock.entitlements │ ├── MenuBarItem.swift │ ├── MenuBarItems.swift │ ├── OpenableApp.swift │ ├── OpenableApps.swift │ ├── PreferencesViewController.swift │ ├── RegularApp.swift │ ├── RegularApps.swift │ ├── RunningApp.swift │ ├── RunningApps.swift │ ├── UserPrefs.swift │ └── Utils.swift ├── MenuBarDockTests/ │ ├── Info.plist │ └── MenuBarDockTests.swift ├── MenuBarDockUITests/ │ ├── Info.plist │ └── MenuBarDockUITests.swift ├── Podfile ├── README.md ├── _config.yml ├── assets/ │ ├── DownloadButton.psd │ └── logo.ai └── setup.sh
Condensed preview — 46 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (793K chars).
[
{
"path": ".gitignore",
"chars": 2882,
"preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
},
{
"path": ".swiftlint.yml",
"chars": 112,
"preview": "line_length: 420\n\ndisabled_rules:\n - redundant_string_enum_value\n - identifier_name\n - cyclomatic_complexity\n"
},
{
"path": "CNAME",
"chars": 19,
"preview": "www.menubardock.com"
},
{
"path": "Launcher/AppDelegateLauncher.swift",
"chars": 2067,
"preview": "//\n// AppDelegate.swift\n// Launcher\n//\n// Created by Ethan Sarif-Kattan on 04/03/2019.\n// Copyright © 2019 Ethan Sar"
},
{
"path": "Launcher/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 903,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"mac\",\n \"size\" : \"16x16\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : "
},
{
"path": "Launcher/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "Launcher/Base.lproj/Main.storyboard",
"chars": 58394,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" t"
},
{
"path": "Launcher/Info.plist",
"chars": 1098,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Launcher/Launcher.entitlements",
"chars": 310,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Menu Bar Dock.xcodeproj/project.pbxproj",
"chars": 49352,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "Menu Bar Dock.xcworkspace/contents.xcworkspacedata",
"chars": 231,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Menu Bar Dock."
},
{
"path": "Menu Bar Dock.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "MenuBarDock/AboutViewController.swift",
"chars": 1059,
"preview": "//\n// AboutViewController.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 15/04/2021.\n// Copyright © 2"
},
{
"path": "MenuBarDock/AppDelegate.swift",
"chars": 8224,
"preview": "//\n// AppDelegate.swift\n// MenuBarDock\n//\n// Created by Ethan Sarif-Kattan on 02/03/2019.\n// Copyright © 2019 Ethan "
},
{
"path": "MenuBarDock/AppTracker.swift",
"chars": 1334,
"preview": "//\n// AppTracker.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 15/04/2021.\n// Copyright © 2021 Ethan"
},
{
"path": "MenuBarDock/AppsTablePreferencesViewController.swift",
"chars": 2752,
"preview": "//\n// AppsTablePreferencesViewController.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 14/04/2021.\n//"
},
{
"path": "MenuBarDock/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1259,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"icon_16x16.png\",\n \"idiom\" : \"mac\",\n \"scale\" : \"1x\",\n \"size\" : "
},
{
"path": "MenuBarDock/Assets.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "MenuBarDock/Assets.xcassets/ETGgames.imageset/Contents.json",
"chars": 154,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"logo.png\",\n \"idiom\" : \"universal\"\n }\n ],\n \"info\" : {\n \"author\" :"
},
{
"path": "MenuBarDock/Assets.xcassets/ETGgamesCircle.imageset/Contents.json",
"chars": 170,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"spikesSmallerWhiteBG.png\",\n \"idiom\" : \"universal\"\n }\n ],\n \"info\" : "
},
{
"path": "MenuBarDock/Base.lproj/Main.storyboard",
"chars": 156412,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" t"
},
{
"path": "MenuBarDock/Constants.swift",
"chars": 1880,
"preview": "//\n// Constants.swift\n// MenuBarDock\n//\n// Created by Ethan Sarif-Kattan on 03/03/2019.\n// Copyright © 2019 Ethan Sa"
},
{
"path": "MenuBarDock/Info.plist",
"chars": 1224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "MenuBarDock/InfoViewController.swift",
"chars": 1756,
"preview": "//\n// InfoViewController.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 16/04/2021.\n// Copyright © 20"
},
{
"path": "MenuBarDock/MenuBarDock.entitlements",
"chars": 181,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "MenuBarDock/MenuBarItem.swift",
"chars": 6906,
"preview": "//\n// MenuBarItem.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 11/04/2021.\n// Copyright © 2021 Etha"
},
{
"path": "MenuBarDock/MenuBarItems.swift",
"chars": 4366,
"preview": "//\n// MenuBarItems.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 10/04/2021.\n// Copyright © 2021 Eth"
},
{
"path": "MenuBarDock/OpenableApp.swift",
"chars": 5577,
"preview": "//\n// OpenableApp.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 11/04/2021.\n// Copyright © 2021 Etha"
},
{
"path": "MenuBarDock/OpenableApps.swift",
"chars": 2863,
"preview": "//\n// OpenableApps.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 11/04/2021.\n// Copyright © 2021 Eth"
},
{
"path": "MenuBarDock/PreferencesViewController.swift",
"chars": 12973,
"preview": "//\n// ViewController.swift\n// MenuBarDock\n//\n// Created by Ethan Sarif-Kattan on 02/03/2019.\n// Copyright © 2019 Eth"
},
{
"path": "MenuBarDock/RegularApp.swift",
"chars": 638,
"preview": "//\n// RegularApp.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 13/04/2021.\n// Copyright © 2021 Ethan"
},
{
"path": "MenuBarDock/RegularApps.swift",
"chars": 1995,
"preview": "//\n// RegularApps.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 12/04/2021.\n// Copyright © 2021 Etha"
},
{
"path": "MenuBarDock/RunningApp.swift",
"chars": 692,
"preview": "//\n// RunningApp.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 13/04/2021.\n// Copyright © 2021 Ethan"
},
{
"path": "MenuBarDock/RunningApps.swift",
"chars": 3463,
"preview": "//\n// RunningApps.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 12/04/2021.\n// Copyright © 2021 Etha"
},
{
"path": "MenuBarDock/UserPrefs.swift",
"chars": 9260,
"preview": "//\n// UserPrefs.swift\n// MenuBarDock\n//\n// Created by Ethan Sarif-Kattan on 03/03/2019.\n// Copyright © 2019 Ethan Sa"
},
{
"path": "MenuBarDock/Utils.swift",
"chars": 1270,
"preview": "//\n// Utils.swift\n// Menu Bar Dock\n//\n// Created by Ethan Sarif-Kattan on 11/04/2021.\n// Copyright © 2021 Ethan Sari"
},
{
"path": "MenuBarDockTests/Info.plist",
"chars": 701,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "MenuBarDockTests/MenuBarDockTests.swift",
"chars": 905,
"preview": "//\n// MenuBarDockTests.swift\n// MenuBarDockTests\n//\n// Created by Ethan Sarif-Kattan on 02/03/2019.\n// Copyright © 2"
},
{
"path": "MenuBarDockUITests/Info.plist",
"chars": 701,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "MenuBarDockUITests/MenuBarDockUITests.swift",
"chars": 1187,
"preview": "//\n// MenuBarDockUITests.swift\n// MenuBarDockUITests\n//\n// Created by Ethan Sarif-Kattan on 02/03/2019.\n// Copyright"
},
{
"path": "Podfile",
"chars": 628,
"preview": "# Uncomment the next line to define a global platform for your project\nplatform :macos, '10.15'\n\ntarget 'Launcher' do\n "
},
{
"path": "README.md",
"chars": 4615,
"preview": " <div style=\"text-align: center;\">\n <a href=\"https://www.aiwallpapergenerator.ai/\" target=\"_blank\" rel=\"noopener norefe"
},
{
"path": "_config.yml",
"chars": 182,
"preview": "theme: jekyll-theme-cayman\nshow_downloads: false #if true it shows the download links to the actual project not the app "
},
{
"path": "assets/logo.ai",
"chars": 240364,
"preview": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 24 0 R 45 0 R 66 0 R 88 0 R 109 0 R]/Order 110 0 R/RBG"
},
{
"path": "setup.sh",
"chars": 84,
"preview": "#!/bin/bash\n\n# Run this script to setup the project after cloning fresh\npod install\n"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the EthanSK/Menu-Bar-Dock GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 46 files (577.6 KB), approximately 260.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.