├── screenshot.png
├── yabai-help-overlay
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── yabai_help_overlay.entitlements
├── AppDelegate.swift
├── extract-help-data.awk
├── Info.plist
├── ViewController.swift
├── Groups.swift
└── Base.lproj
│ └── Main.storyboard
├── yabai-help-overlayTests
├── Info.plist
└── yabai_help_overlayTests.swift
├── yabai-help-overlayUITests
├── Info.plist
└── yabai_help_overlayUITests.swift
├── LICENSE.txt
├── README.md
├── .gitignore
└── yabai-help-overlay.xcodeproj
└── project.pbxproj
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arunvelsriram/yabai-help-overlay/HEAD/screenshot.png
--------------------------------------------------------------------------------
/yabai-help-overlay/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/yabai-help-overlay/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/yabai-help-overlay/yabai_help_overlay.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/yabai-help-overlay/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // yabai-help-overlay
4 | //
5 | // Created by Arunvel Sriram on 31/12/20.
6 | //
7 |
8 | import Cocoa
9 |
10 | @main
11 | class AppDelegate: NSObject, NSApplicationDelegate {
12 |
13 | func applicationDidFinishLaunching(_ aNotification: Notification) {
14 | // Insert code here to initialize your application
15 | }
16 |
17 | func applicationWillTerminate(_ aNotification: Notification) {
18 | // Insert code here to tear down your application
19 | }
20 |
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/yabai-help-overlay/extract-help-data.awk:
--------------------------------------------------------------------------------
1 | function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
2 | function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
3 | function trim(s) { return rtrim(ltrim(s)); }
4 |
5 | BEGIN {
6 | RS="#";
7 | FS=":";
8 | printf "[";
9 | }
10 |
11 | NR==1 { next }
12 |
13 | {
14 | group=trim($1);
15 | split($2, parts, "\n")
16 | description=trim(parts[1]);
17 | shortcut=trim(parts[2]);
18 | sub(/-/, "+", shortcut)
19 | printf "%s{\"group\": \"%s\", \"description\": \"%s\", \"keyCombination\": \"%s\"}", seperator, group, description, shortcut
20 | seperator=","
21 | }
22 |
23 | END {
24 | printf "]"
25 | }
26 |
--------------------------------------------------------------------------------
/yabai-help-overlayTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/yabai-help-overlayUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/yabai-help-overlay/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 2.0
21 | CFBundleVersion
22 | 2.0.1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSMainStoryboardFile
26 | Main
27 | NSPrincipalClass
28 | NSApplication
29 |
30 |
31 |
--------------------------------------------------------------------------------
/yabai-help-overlayTests/yabai_help_overlayTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yabai_help_overlayTests.swift
3 | // yabai-help-overlayTests
4 | //
5 | // Created by Arunvel Sriram on 31/12/20.
6 | //
7 |
8 | import XCTest
9 | @testable import yabai_help_overlay
10 |
11 | class yabai_help_overlayTests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 | }
16 |
17 | override func tearDownWithError() throws {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() throws {
22 | // This is an example of a functional test case.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | }
25 |
26 | func testPerformanceExample() throws {
27 | // This is an example of a performance test case.
28 | self.measure {
29 | // Put the code you want to measure the time of here.
30 | }
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Arunvel Sriram
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THESOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/yabai-help-overlay/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # yabai-help-overlay
2 |
3 | Help overlay for [yabai](https://github.com/koekeishiya/yabai) inspired by [regolith-linux](https://regolith-linux.org/)'s help overlay.
4 |
5 | 
6 |
7 | ## How it works?
8 |
9 | The overlay (basically a window) is populated using comments provided in the [skhd](https://github.com/koekeishiya/skhd/) configuration `~/.skhdrc`.
10 |
11 | Each skhd config has a comment in the below format:
12 |
13 | ```
14 | # group : description
15 | skhd config
16 |
17 | # group : description
18 | skhd config
19 | ```
20 |
21 | For example:
22 |
23 | ```
24 | # Launch : Terminal
25 | hyper - return : open /Applications/Alacritty.app
26 | # Launch : Browser
27 | hyper - b : yabai-utils open-firefox
28 |
29 | # Window : Focus top window
30 | hyper - k : yabai -m window --focus north
31 | ...
32 | ```
33 |
34 | My [`.skhdrc`](https://github.com/arunvelsriram/dotfiles/blob/master/skhdrc) for reference.
35 |
36 | ## Install
37 |
38 | 1. Download the package and move the application to `/Applications`
39 | 2. To open the help overlay using a keyboard shortcut add the below config to `~/.skhdrc`
40 |
41 | ```
42 | # Launch : Help
43 | hyper - f1 : yabai -m rule --add app="^yabai-help-overlay$" sticky=on layer=above manage=off && open /Applications/yabai-help-overlay.app
44 | ```
45 |
46 | `hyper + f1` shows the overlay
47 |
48 |
--------------------------------------------------------------------------------
/yabai-help-overlayUITests/yabai_help_overlayUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yabai_help_overlayUITests.swift
3 | // yabai-help-overlayUITests
4 | //
5 | // Created by Arunvel Sriram on 31/12/20.
6 | //
7 |
8 | import XCTest
9 |
10 | class yabai_help_overlayUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | func testExample() throws {
26 | // UI tests must launch the application that they test.
27 | let app = XCUIApplication()
28 | app.launch()
29 |
30 | // Use recording to get started writing UI tests.
31 | // Use XCTAssert and related functions to verify your tests produce the correct results.
32 | }
33 |
34 | func testLaunchPerformance() throws {
35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
36 | // This measures how long it takes to launch your application.
37 | measure(metrics: [XCTApplicationLaunchMetric()]) {
38 | XCUIApplication().launch()
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # see https://gist.github.com/muhasturk/df28ec9d2cc18bf1cfc8
2 | # see https://github.com/github/gitignore/blob/master/Swift.gitignore
3 |
4 | *.xcodeproj/*
5 | !*.xcodeproj/project.pbxproj
6 | !*.xcodeproj/xcshareddata
7 |
8 | #
9 | # *.lock - this is used and abused by many editors for many different things.
10 | # For the main ones I use (e.g. Eclipse), it should be excluded
11 | # from source-control, but YMMV.
12 | # (lock files are usually local-only file-synchronization on the local FS that should NOT go in git)
13 | # c.f. the "OPTIONAL" section at bottom though, for tool-specific variations!
14 | #
15 | # In particular, if you're using CocoaPods, you'll want to comment-out this line:
16 | *.lock
17 |
18 | # bundler
19 | /.bundle/
20 | !Gemfile.lock
21 |
22 | ####
23 | # Xcode temporary files that should never be committed
24 | #
25 | # NB: NIB/XIB files still exist even on Storyboard projects, so we want this...
26 | *~.nib
27 |
28 | ## Build generated
29 | build/
30 | DerivedData/
31 |
32 | ####
33 | # Xcode 4 - Deprecated classes
34 | #
35 | # Allegedly, if you manually "deprecate" your classes, they get moved here.
36 | #
37 | # We're using source-control, so this is a "feature" that we do not want!
38 | *.moved-aside
39 |
40 | ## Various settings
41 | *.pbxuser
42 | !default.pbxuser
43 | *.mode1v3
44 | !default.mode1v3
45 | *.mode2v3
46 | !default.mode2v3
47 | *.perspectivev3
48 | !default.perspectivev3
49 | xcuserdata
50 |
51 | ## Other
52 | *.xccheckout
53 | *.moved-aside
54 | *.xcuserstate
55 | *.xcscmblueprint
56 |
57 | ## Obj-C/Swift specific
58 | *.hmap
59 | *.ipa
60 |
61 | ## Playgrounds
62 | timeline.xctimeline
63 | playground.xcworkspace
64 |
65 | # Swift Package Manager
66 | #
67 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
68 | Packages/
69 | .build/
70 |
71 | # CocoaPods
72 | #
73 | # We recommend against adding the Pods directory to your .gitignore. However
74 | # you should judge for yourself, the pros and cons are mentioned at:
75 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
76 | Pods/
77 |
78 | # Carthage
79 | #
80 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
81 | # Carthage/Checkouts
82 | Carthage
83 |
84 | # fastlane
85 | #
86 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
87 | # screenshots whenever they are needed.
88 | # For more information about the recommended setup visit:
89 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
90 | fastlane/report.xml
91 | fastlane/screenshots
92 |
93 | # OSX Temp
94 | .DS_Store
95 | .AppleDouble
96 | .LSOverride
97 |
98 | # OSX Thumbnails
99 | ._*
100 |
101 | # OSX Directories potentially created on remote AFP share
102 | .AppleDB
103 | .AppleDesktop
104 | Network Trash Folder
105 | Temporary Items
106 | .apdisk
107 |
108 | # Linux trash folder which might appear on any partition or disk
109 | .Trash-*
110 |
111 | # vim
112 | *.swp
113 |
114 |
--------------------------------------------------------------------------------
/yabai-help-overlay/ViewController.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 |
3 | class ViewController: NSViewController {
4 |
5 | @IBOutlet weak var outlineView: NSOutlineView!
6 |
7 | let groups: [Group] = loadHelpData()
8 |
9 | override func viewDidLoad() {
10 | super.viewDidLoad()
11 |
12 | // Do any additional setup after loading the view.
13 |
14 | outlineView.dataSource = self
15 | outlineView.delegate = self
16 | }
17 |
18 | override var representedObject: Any? {
19 | didSet {
20 | // Update the view, if already loaded.
21 | }
22 | }
23 |
24 | }
25 |
26 | extension ViewController: NSOutlineViewDataSource {
27 |
28 | func outlineView(_ outlineView: NSOutlineView, numberOfChildrenOfItem item: Any?) -> Int {
29 | if item == nil {
30 | return groups.count
31 | } else {
32 | if let group = item as? Group {
33 | return group.shortcutCount
34 | } else {
35 | return 1
36 | }
37 | }
38 | }
39 |
40 | func outlineView(_ outlineView: NSOutlineView, child index: Int, ofItem item: Any?) -> Any {
41 | if item == nil {
42 | return groups[index]
43 | } else {
44 | if let group = item as? Group {
45 | return group.shortcuts[index]
46 | } else {
47 | return item!
48 | }
49 | }
50 | }
51 |
52 | func outlineView(_ outlineView: NSOutlineView, isItemExpandable item: Any) -> Bool {
53 | guard let _ = item as? Group else { return false }
54 | return true
55 | }
56 |
57 | }
58 |
59 | extension ViewController: NSOutlineViewDelegate {
60 |
61 | func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
62 | guard let colIdentifier = tableColumn?.identifier else { return nil }
63 |
64 | if colIdentifier == NSUserInterfaceItemIdentifier("DescriptionColID") {
65 | let cellIdentifier = NSUserInterfaceItemIdentifier("DescriptionCellID")
66 | guard let cell = outlineView.makeView(withIdentifier: cellIdentifier, owner: nil) as? NSTableCellView else { return nil }
67 | if let group = item as? Group {
68 | cell.textField?.stringValue = group.name
69 | } else if let shortcut = item as? Shortcut {
70 | cell.textField?.stringValue = shortcut.description
71 | }
72 |
73 | return cell
74 |
75 | } else if colIdentifier == NSUserInterfaceItemIdentifier("KeyCombinationColID") {
76 | let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "KeyCombinationCellID")
77 | guard let cell = outlineView.makeView(withIdentifier: cellIdentifier, owner: nil) as? NSTableCellView else { return nil }
78 |
79 | if let shortcut = item as? Shortcut {
80 | cell.textField?.stringValue = shortcut.prettyKeyCombination()
81 | }
82 |
83 | return cell
84 |
85 | }
86 |
87 | return nil
88 |
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/yabai-help-overlay/Groups.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 |
3 | public class Shortcut {
4 | let description: String
5 | let keyCombination: String
6 |
7 | init(description: String, keyCombination: String) {
8 | self.description = description
9 | self.keyCombination = keyCombination
10 | }
11 |
12 | func getSymbol(forKey key: String) -> String? {
13 | return [
14 | "hyper": "✧",
15 | "shift": "⇧",
16 | "alt": "⌥",
17 | "cmd": "⌘",
18 | "ctrl": "⌃",
19 | "return": "⏎"
20 | ][key]
21 | }
22 |
23 | func prettyKeyCombination() -> String {
24 | let keys = self.keyCombination.split(separator: "+")
25 | var prettyKeys: [String] = []
26 | for key in keys {
27 | let keyStr = String(key).trimmingCharacters(in: .whitespaces)
28 | if let symbol = getSymbol(forKey: keyStr) {
29 | prettyKeys.append(symbol)
30 | } else{
31 | prettyKeys.append(keyStr.uppercased())
32 | }
33 | }
34 | return prettyKeys.joined(separator: " ")
35 | }
36 | }
37 |
38 | public class Group {
39 | let name: String
40 | var shortcuts: [Shortcut]
41 | var shortcutCount: Int { get { return shortcuts.count }}
42 |
43 | init(name: String, shortcuts: [Shortcut]) {
44 | self.name = name
45 | self.shortcuts = shortcuts
46 | }
47 | }
48 |
49 | @discardableResult func shell(_ command: String) -> (String?, Int32) {
50 | print("Command:", command)
51 | let task = Process()
52 |
53 | task.launchPath = "/bin/bash"
54 | task.arguments = ["-c", command]
55 |
56 | let pipe = Pipe()
57 | task.standardOutput = pipe
58 | task.standardError = pipe
59 | task.launch()
60 |
61 | let data = pipe.fileHandleForReading.readDataToEndOfFile()
62 | let output = String(data: data, encoding: .utf8)
63 | task.waitUntilExit()
64 | return (output, task.terminationStatus)
65 | }
66 |
67 | func loadHelpData() -> [Group] {
68 | struct HelpDataItem: Decodable {
69 | let group: String
70 | let description: String
71 | let keyCombination: String
72 | }
73 |
74 | guard let awkScript = Bundle.main.path(forResource: "extract-help-data", ofType: "awk") else { return [] }
75 | print("Using awk script:", awkScript)
76 |
77 | let homeDir = FileManager.default.homeDirectoryForCurrentUser.path
78 | let skhdConfig: String = "\(homeDir)/.skhdrc"
79 | if (!FileManager.default.fileExists(atPath: skhdConfig)) {
80 | print("skhd config \(skhdConfig) not found")
81 | return []
82 | }
83 | print("Using skhd config:", skhdConfig)
84 |
85 | let (output, awkExitStatus) = shell("awk -f '\(awkScript)' '\(skhdConfig)'")
86 | print("awk exit status:", awkExitStatus)
87 | if awkExitStatus > 0 { return [] }
88 | guard let awkOutput = output else { print("awk output is nil"); return [] }
89 | print("awk output:", awkOutput)
90 |
91 | guard let jsonData = awkOutput.data(using: .utf8) else { return [] }
92 | let helpDataItems = try! JSONDecoder().decode([HelpDataItem].self, from: jsonData)
93 |
94 | var groups: [Group] = []
95 | for helpDataItem: HelpDataItem in helpDataItems {
96 | let shortcut: Shortcut = Shortcut(
97 | description: helpDataItem.description,
98 | keyCombination: helpDataItem.keyCombination
99 | )
100 | if let i = groups.firstIndex(where: { $0.name == helpDataItem.group }) {
101 | groups[i].shortcuts.append(shortcut)
102 | } else {
103 | let group: Group = Group(
104 | name: helpDataItem.group,
105 | shortcuts: [shortcut]
106 | )
107 | groups.append(group)
108 | }
109 | }
110 |
111 | return groups
112 |
113 | }
114 |
--------------------------------------------------------------------------------
/yabai-help-overlay/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
--------------------------------------------------------------------------------
/yabai-help-overlay.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 6B1B4016259E478400DDF525 /* Groups.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1B4015259E478400DDF525 /* Groups.swift */; };
11 | 6BA24C65259F202C000B5497 /* extract-help-data.awk in Resources */ = {isa = PBXBuildFile; fileRef = 6BA24C64259F202C000B5497 /* extract-help-data.awk */; };
12 | 6BC28B31259E3100009112E5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC28B30259E3100009112E5 /* AppDelegate.swift */; };
13 | 6BC28B33259E3100009112E5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC28B32259E3100009112E5 /* ViewController.swift */; };
14 | 6BC28B35259E3101009112E5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6BC28B34259E3101009112E5 /* Assets.xcassets */; };
15 | 6BC28B38259E3101009112E5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6BC28B36259E3101009112E5 /* Main.storyboard */; };
16 | 6BC28B44259E3101009112E5 /* yabai_help_overlayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC28B43259E3101009112E5 /* yabai_help_overlayTests.swift */; };
17 | 6BC28B4F259E3101009112E5 /* yabai_help_overlayUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC28B4E259E3101009112E5 /* yabai_help_overlayUITests.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXContainerItemProxy section */
21 | 6BC28B40259E3101009112E5 /* PBXContainerItemProxy */ = {
22 | isa = PBXContainerItemProxy;
23 | containerPortal = 6BC28B25259E3100009112E5 /* Project object */;
24 | proxyType = 1;
25 | remoteGlobalIDString = 6BC28B2C259E3100009112E5;
26 | remoteInfo = "yabai-help-overlay";
27 | };
28 | 6BC28B4B259E3101009112E5 /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = 6BC28B25259E3100009112E5 /* Project object */;
31 | proxyType = 1;
32 | remoteGlobalIDString = 6BC28B2C259E3100009112E5;
33 | remoteInfo = "yabai-help-overlay";
34 | };
35 | /* End PBXContainerItemProxy section */
36 |
37 | /* Begin PBXFileReference section */
38 | 6B1B4015259E478400DDF525 /* Groups.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Groups.swift; sourceTree = ""; };
39 | 6BA24C64259F202C000B5497 /* extract-help-data.awk */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 1; path = "extract-help-data.awk"; sourceTree = ""; };
40 | 6BC28B2D259E3100009112E5 /* yabai-help-overlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "yabai-help-overlay.app"; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 6BC28B30259E3100009112E5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
42 | 6BC28B32259E3100009112E5 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
43 | 6BC28B34259E3101009112E5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
44 | 6BC28B37259E3101009112E5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
45 | 6BC28B39259E3101009112E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
46 | 6BC28B3A259E3101009112E5 /* yabai_help_overlay.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = yabai_help_overlay.entitlements; sourceTree = ""; };
47 | 6BC28B3F259E3101009112E5 /* yabai-help-overlayTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "yabai-help-overlayTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
48 | 6BC28B43259E3101009112E5 /* yabai_help_overlayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = yabai_help_overlayTests.swift; sourceTree = ""; };
49 | 6BC28B45259E3101009112E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
50 | 6BC28B4A259E3101009112E5 /* yabai-help-overlayUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "yabai-help-overlayUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
51 | 6BC28B4E259E3101009112E5 /* yabai_help_overlayUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = yabai_help_overlayUITests.swift; sourceTree = ""; };
52 | 6BC28B50259E3101009112E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
53 | /* End PBXFileReference section */
54 |
55 | /* Begin PBXFrameworksBuildPhase section */
56 | 6BC28B2A259E3100009112E5 /* Frameworks */ = {
57 | isa = PBXFrameworksBuildPhase;
58 | buildActionMask = 2147483647;
59 | files = (
60 | );
61 | runOnlyForDeploymentPostprocessing = 0;
62 | };
63 | 6BC28B3C259E3101009112E5 /* Frameworks */ = {
64 | isa = PBXFrameworksBuildPhase;
65 | buildActionMask = 2147483647;
66 | files = (
67 | );
68 | runOnlyForDeploymentPostprocessing = 0;
69 | };
70 | 6BC28B47259E3101009112E5 /* Frameworks */ = {
71 | isa = PBXFrameworksBuildPhase;
72 | buildActionMask = 2147483647;
73 | files = (
74 | );
75 | runOnlyForDeploymentPostprocessing = 0;
76 | };
77 | /* End PBXFrameworksBuildPhase section */
78 |
79 | /* Begin PBXGroup section */
80 | 6BC28B24259E3100009112E5 = {
81 | isa = PBXGroup;
82 | children = (
83 | 6BC28B2F259E3100009112E5 /* yabai-help-overlay */,
84 | 6BC28B42259E3101009112E5 /* yabai-help-overlayTests */,
85 | 6BC28B4D259E3101009112E5 /* yabai-help-overlayUITests */,
86 | 6BC28B2E259E3100009112E5 /* Products */,
87 | );
88 | sourceTree = "";
89 | };
90 | 6BC28B2E259E3100009112E5 /* Products */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 6BC28B2D259E3100009112E5 /* yabai-help-overlay.app */,
94 | 6BC28B3F259E3101009112E5 /* yabai-help-overlayTests.xctest */,
95 | 6BC28B4A259E3101009112E5 /* yabai-help-overlayUITests.xctest */,
96 | );
97 | name = Products;
98 | sourceTree = "";
99 | };
100 | 6BC28B2F259E3100009112E5 /* yabai-help-overlay */ = {
101 | isa = PBXGroup;
102 | children = (
103 | 6BC28B30259E3100009112E5 /* AppDelegate.swift */,
104 | 6BC28B32259E3100009112E5 /* ViewController.swift */,
105 | 6BC28B34259E3101009112E5 /* Assets.xcassets */,
106 | 6BC28B36259E3101009112E5 /* Main.storyboard */,
107 | 6BC28B39259E3101009112E5 /* Info.plist */,
108 | 6BC28B3A259E3101009112E5 /* yabai_help_overlay.entitlements */,
109 | 6B1B4015259E478400DDF525 /* Groups.swift */,
110 | 6BA24C64259F202C000B5497 /* extract-help-data.awk */,
111 | );
112 | path = "yabai-help-overlay";
113 | sourceTree = "";
114 | };
115 | 6BC28B42259E3101009112E5 /* yabai-help-overlayTests */ = {
116 | isa = PBXGroup;
117 | children = (
118 | 6BC28B43259E3101009112E5 /* yabai_help_overlayTests.swift */,
119 | 6BC28B45259E3101009112E5 /* Info.plist */,
120 | );
121 | path = "yabai-help-overlayTests";
122 | sourceTree = "";
123 | };
124 | 6BC28B4D259E3101009112E5 /* yabai-help-overlayUITests */ = {
125 | isa = PBXGroup;
126 | children = (
127 | 6BC28B4E259E3101009112E5 /* yabai_help_overlayUITests.swift */,
128 | 6BC28B50259E3101009112E5 /* Info.plist */,
129 | );
130 | path = "yabai-help-overlayUITests";
131 | sourceTree = "";
132 | };
133 | /* End PBXGroup section */
134 |
135 | /* Begin PBXNativeTarget section */
136 | 6BC28B2C259E3100009112E5 /* yabai-help-overlay */ = {
137 | isa = PBXNativeTarget;
138 | buildConfigurationList = 6BC28B53259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlay" */;
139 | buildPhases = (
140 | 6BC28B29259E3100009112E5 /* Sources */,
141 | 6BC28B2A259E3100009112E5 /* Frameworks */,
142 | 6BC28B2B259E3100009112E5 /* Resources */,
143 | );
144 | buildRules = (
145 | );
146 | dependencies = (
147 | );
148 | name = "yabai-help-overlay";
149 | productName = "yabai-help-overlay";
150 | productReference = 6BC28B2D259E3100009112E5 /* yabai-help-overlay.app */;
151 | productType = "com.apple.product-type.application";
152 | };
153 | 6BC28B3E259E3101009112E5 /* yabai-help-overlayTests */ = {
154 | isa = PBXNativeTarget;
155 | buildConfigurationList = 6BC28B56259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlayTests" */;
156 | buildPhases = (
157 | 6BC28B3B259E3101009112E5 /* Sources */,
158 | 6BC28B3C259E3101009112E5 /* Frameworks */,
159 | 6BC28B3D259E3101009112E5 /* Resources */,
160 | );
161 | buildRules = (
162 | );
163 | dependencies = (
164 | 6BC28B41259E3101009112E5 /* PBXTargetDependency */,
165 | );
166 | name = "yabai-help-overlayTests";
167 | productName = "yabai-help-overlayTests";
168 | productReference = 6BC28B3F259E3101009112E5 /* yabai-help-overlayTests.xctest */;
169 | productType = "com.apple.product-type.bundle.unit-test";
170 | };
171 | 6BC28B49259E3101009112E5 /* yabai-help-overlayUITests */ = {
172 | isa = PBXNativeTarget;
173 | buildConfigurationList = 6BC28B59259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlayUITests" */;
174 | buildPhases = (
175 | 6BC28B46259E3101009112E5 /* Sources */,
176 | 6BC28B47259E3101009112E5 /* Frameworks */,
177 | 6BC28B48259E3101009112E5 /* Resources */,
178 | );
179 | buildRules = (
180 | );
181 | dependencies = (
182 | 6BC28B4C259E3101009112E5 /* PBXTargetDependency */,
183 | );
184 | name = "yabai-help-overlayUITests";
185 | productName = "yabai-help-overlayUITests";
186 | productReference = 6BC28B4A259E3101009112E5 /* yabai-help-overlayUITests.xctest */;
187 | productType = "com.apple.product-type.bundle.ui-testing";
188 | };
189 | /* End PBXNativeTarget section */
190 |
191 | /* Begin PBXProject section */
192 | 6BC28B25259E3100009112E5 /* Project object */ = {
193 | isa = PBXProject;
194 | attributes = {
195 | LastSwiftUpdateCheck = 1220;
196 | LastUpgradeCheck = 1220;
197 | TargetAttributes = {
198 | 6BC28B2C259E3100009112E5 = {
199 | CreatedOnToolsVersion = 12.2;
200 | };
201 | 6BC28B3E259E3101009112E5 = {
202 | CreatedOnToolsVersion = 12.2;
203 | TestTargetID = 6BC28B2C259E3100009112E5;
204 | };
205 | 6BC28B49259E3101009112E5 = {
206 | CreatedOnToolsVersion = 12.2;
207 | TestTargetID = 6BC28B2C259E3100009112E5;
208 | };
209 | };
210 | };
211 | buildConfigurationList = 6BC28B28259E3100009112E5 /* Build configuration list for PBXProject "yabai-help-overlay" */;
212 | compatibilityVersion = "Xcode 9.3";
213 | developmentRegion = en;
214 | hasScannedForEncodings = 0;
215 | knownRegions = (
216 | en,
217 | Base,
218 | );
219 | mainGroup = 6BC28B24259E3100009112E5;
220 | productRefGroup = 6BC28B2E259E3100009112E5 /* Products */;
221 | projectDirPath = "";
222 | projectRoot = "";
223 | targets = (
224 | 6BC28B2C259E3100009112E5 /* yabai-help-overlay */,
225 | 6BC28B3E259E3101009112E5 /* yabai-help-overlayTests */,
226 | 6BC28B49259E3101009112E5 /* yabai-help-overlayUITests */,
227 | );
228 | };
229 | /* End PBXProject section */
230 |
231 | /* Begin PBXResourcesBuildPhase section */
232 | 6BC28B2B259E3100009112E5 /* Resources */ = {
233 | isa = PBXResourcesBuildPhase;
234 | buildActionMask = 2147483647;
235 | files = (
236 | 6BC28B35259E3101009112E5 /* Assets.xcassets in Resources */,
237 | 6BA24C65259F202C000B5497 /* extract-help-data.awk in Resources */,
238 | 6BC28B38259E3101009112E5 /* Main.storyboard in Resources */,
239 | );
240 | runOnlyForDeploymentPostprocessing = 0;
241 | };
242 | 6BC28B3D259E3101009112E5 /* Resources */ = {
243 | isa = PBXResourcesBuildPhase;
244 | buildActionMask = 2147483647;
245 | files = (
246 | );
247 | runOnlyForDeploymentPostprocessing = 0;
248 | };
249 | 6BC28B48259E3101009112E5 /* Resources */ = {
250 | isa = PBXResourcesBuildPhase;
251 | buildActionMask = 2147483647;
252 | files = (
253 | );
254 | runOnlyForDeploymentPostprocessing = 0;
255 | };
256 | /* End PBXResourcesBuildPhase section */
257 |
258 | /* Begin PBXSourcesBuildPhase section */
259 | 6BC28B29259E3100009112E5 /* Sources */ = {
260 | isa = PBXSourcesBuildPhase;
261 | buildActionMask = 2147483647;
262 | files = (
263 | 6BC28B33259E3100009112E5 /* ViewController.swift in Sources */,
264 | 6BC28B31259E3100009112E5 /* AppDelegate.swift in Sources */,
265 | 6B1B4016259E478400DDF525 /* Groups.swift in Sources */,
266 | );
267 | runOnlyForDeploymentPostprocessing = 0;
268 | };
269 | 6BC28B3B259E3101009112E5 /* Sources */ = {
270 | isa = PBXSourcesBuildPhase;
271 | buildActionMask = 2147483647;
272 | files = (
273 | 6BC28B44259E3101009112E5 /* yabai_help_overlayTests.swift in Sources */,
274 | );
275 | runOnlyForDeploymentPostprocessing = 0;
276 | };
277 | 6BC28B46259E3101009112E5 /* Sources */ = {
278 | isa = PBXSourcesBuildPhase;
279 | buildActionMask = 2147483647;
280 | files = (
281 | 6BC28B4F259E3101009112E5 /* yabai_help_overlayUITests.swift in Sources */,
282 | );
283 | runOnlyForDeploymentPostprocessing = 0;
284 | };
285 | /* End PBXSourcesBuildPhase section */
286 |
287 | /* Begin PBXTargetDependency section */
288 | 6BC28B41259E3101009112E5 /* PBXTargetDependency */ = {
289 | isa = PBXTargetDependency;
290 | target = 6BC28B2C259E3100009112E5 /* yabai-help-overlay */;
291 | targetProxy = 6BC28B40259E3101009112E5 /* PBXContainerItemProxy */;
292 | };
293 | 6BC28B4C259E3101009112E5 /* PBXTargetDependency */ = {
294 | isa = PBXTargetDependency;
295 | target = 6BC28B2C259E3100009112E5 /* yabai-help-overlay */;
296 | targetProxy = 6BC28B4B259E3101009112E5 /* PBXContainerItemProxy */;
297 | };
298 | /* End PBXTargetDependency section */
299 |
300 | /* Begin PBXVariantGroup section */
301 | 6BC28B36259E3101009112E5 /* Main.storyboard */ = {
302 | isa = PBXVariantGroup;
303 | children = (
304 | 6BC28B37259E3101009112E5 /* Base */,
305 | );
306 | name = Main.storyboard;
307 | sourceTree = "";
308 | };
309 | /* End PBXVariantGroup section */
310 |
311 | /* Begin XCBuildConfiguration section */
312 | 6BC28B51259E3101009112E5 /* Debug */ = {
313 | isa = XCBuildConfiguration;
314 | buildSettings = {
315 | ALWAYS_SEARCH_USER_PATHS = NO;
316 | CLANG_ANALYZER_NONNULL = YES;
317 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
318 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
319 | CLANG_CXX_LIBRARY = "libc++";
320 | CLANG_ENABLE_MODULES = YES;
321 | CLANG_ENABLE_OBJC_ARC = YES;
322 | CLANG_ENABLE_OBJC_WEAK = YES;
323 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
324 | CLANG_WARN_BOOL_CONVERSION = YES;
325 | CLANG_WARN_COMMA = YES;
326 | CLANG_WARN_CONSTANT_CONVERSION = YES;
327 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
328 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
329 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
330 | CLANG_WARN_EMPTY_BODY = YES;
331 | CLANG_WARN_ENUM_CONVERSION = YES;
332 | CLANG_WARN_INFINITE_RECURSION = YES;
333 | CLANG_WARN_INT_CONVERSION = YES;
334 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
335 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
336 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
337 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
338 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
339 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
340 | CLANG_WARN_STRICT_PROTOTYPES = YES;
341 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
342 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
343 | CLANG_WARN_UNREACHABLE_CODE = YES;
344 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
345 | COPY_PHASE_STRIP = NO;
346 | DEBUG_INFORMATION_FORMAT = dwarf;
347 | ENABLE_STRICT_OBJC_MSGSEND = YES;
348 | ENABLE_TESTABILITY = YES;
349 | GCC_C_LANGUAGE_STANDARD = gnu11;
350 | GCC_DYNAMIC_NO_PIC = NO;
351 | GCC_NO_COMMON_BLOCKS = YES;
352 | GCC_OPTIMIZATION_LEVEL = 0;
353 | GCC_PREPROCESSOR_DEFINITIONS = (
354 | "DEBUG=1",
355 | "$(inherited)",
356 | );
357 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
358 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
359 | GCC_WARN_UNDECLARED_SELECTOR = YES;
360 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
361 | GCC_WARN_UNUSED_FUNCTION = YES;
362 | GCC_WARN_UNUSED_VARIABLE = YES;
363 | MACOSX_DEPLOYMENT_TARGET = 10.15;
364 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
365 | MTL_FAST_MATH = YES;
366 | ONLY_ACTIVE_ARCH = YES;
367 | SDKROOT = macosx;
368 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
369 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
370 | };
371 | name = Debug;
372 | };
373 | 6BC28B52259E3101009112E5 /* Release */ = {
374 | isa = XCBuildConfiguration;
375 | buildSettings = {
376 | ALWAYS_SEARCH_USER_PATHS = NO;
377 | CLANG_ANALYZER_NONNULL = YES;
378 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
379 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
380 | CLANG_CXX_LIBRARY = "libc++";
381 | CLANG_ENABLE_MODULES = YES;
382 | CLANG_ENABLE_OBJC_ARC = YES;
383 | CLANG_ENABLE_OBJC_WEAK = YES;
384 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
385 | CLANG_WARN_BOOL_CONVERSION = YES;
386 | CLANG_WARN_COMMA = YES;
387 | CLANG_WARN_CONSTANT_CONVERSION = YES;
388 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
389 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
390 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
391 | CLANG_WARN_EMPTY_BODY = YES;
392 | CLANG_WARN_ENUM_CONVERSION = YES;
393 | CLANG_WARN_INFINITE_RECURSION = YES;
394 | CLANG_WARN_INT_CONVERSION = YES;
395 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
396 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
399 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
400 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
401 | CLANG_WARN_STRICT_PROTOTYPES = YES;
402 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
403 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
404 | CLANG_WARN_UNREACHABLE_CODE = YES;
405 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
406 | COPY_PHASE_STRIP = NO;
407 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
408 | ENABLE_NS_ASSERTIONS = NO;
409 | ENABLE_STRICT_OBJC_MSGSEND = YES;
410 | GCC_C_LANGUAGE_STANDARD = gnu11;
411 | GCC_NO_COMMON_BLOCKS = YES;
412 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
413 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
414 | GCC_WARN_UNDECLARED_SELECTOR = YES;
415 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
416 | GCC_WARN_UNUSED_FUNCTION = YES;
417 | GCC_WARN_UNUSED_VARIABLE = YES;
418 | MACOSX_DEPLOYMENT_TARGET = 10.15;
419 | MTL_ENABLE_DEBUG_INFO = NO;
420 | MTL_FAST_MATH = YES;
421 | SDKROOT = macosx;
422 | SWIFT_COMPILATION_MODE = wholemodule;
423 | SWIFT_OPTIMIZATION_LEVEL = "-O";
424 | };
425 | name = Release;
426 | };
427 | 6BC28B54259E3101009112E5 /* Debug */ = {
428 | isa = XCBuildConfiguration;
429 | buildSettings = {
430 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
431 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
432 | CODE_SIGN_ENTITLEMENTS = "yabai-help-overlay/yabai_help_overlay.entitlements";
433 | CODE_SIGN_STYLE = Automatic;
434 | COMBINE_HIDPI_IMAGES = YES;
435 | INFOPLIST_FILE = "yabai-help-overlay/Info.plist";
436 | LD_RUNPATH_SEARCH_PATHS = (
437 | "$(inherited)",
438 | "@executable_path/../Frameworks",
439 | );
440 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlay";
441 | PRODUCT_NAME = "$(TARGET_NAME)";
442 | SWIFT_VERSION = 5.0;
443 | };
444 | name = Debug;
445 | };
446 | 6BC28B55259E3101009112E5 /* Release */ = {
447 | isa = XCBuildConfiguration;
448 | buildSettings = {
449 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
450 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
451 | CODE_SIGN_ENTITLEMENTS = "yabai-help-overlay/yabai_help_overlay.entitlements";
452 | CODE_SIGN_STYLE = Automatic;
453 | COMBINE_HIDPI_IMAGES = YES;
454 | INFOPLIST_FILE = "yabai-help-overlay/Info.plist";
455 | LD_RUNPATH_SEARCH_PATHS = (
456 | "$(inherited)",
457 | "@executable_path/../Frameworks",
458 | );
459 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlay";
460 | PRODUCT_NAME = "$(TARGET_NAME)";
461 | SWIFT_VERSION = 5.0;
462 | };
463 | name = Release;
464 | };
465 | 6BC28B57259E3101009112E5 /* Debug */ = {
466 | isa = XCBuildConfiguration;
467 | buildSettings = {
468 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
469 | BUNDLE_LOADER = "$(TEST_HOST)";
470 | CODE_SIGN_STYLE = Automatic;
471 | COMBINE_HIDPI_IMAGES = YES;
472 | INFOPLIST_FILE = "yabai-help-overlayTests/Info.plist";
473 | LD_RUNPATH_SEARCH_PATHS = (
474 | "$(inherited)",
475 | "@executable_path/../Frameworks",
476 | "@loader_path/../Frameworks",
477 | );
478 | MACOSX_DEPLOYMENT_TARGET = 10.15;
479 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlayTests";
480 | PRODUCT_NAME = "$(TARGET_NAME)";
481 | SWIFT_VERSION = 5.0;
482 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/yabai-help-overlay.app/Contents/MacOS/yabai-help-overlay";
483 | };
484 | name = Debug;
485 | };
486 | 6BC28B58259E3101009112E5 /* Release */ = {
487 | isa = XCBuildConfiguration;
488 | buildSettings = {
489 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
490 | BUNDLE_LOADER = "$(TEST_HOST)";
491 | CODE_SIGN_STYLE = Automatic;
492 | COMBINE_HIDPI_IMAGES = YES;
493 | INFOPLIST_FILE = "yabai-help-overlayTests/Info.plist";
494 | LD_RUNPATH_SEARCH_PATHS = (
495 | "$(inherited)",
496 | "@executable_path/../Frameworks",
497 | "@loader_path/../Frameworks",
498 | );
499 | MACOSX_DEPLOYMENT_TARGET = 10.15;
500 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlayTests";
501 | PRODUCT_NAME = "$(TARGET_NAME)";
502 | SWIFT_VERSION = 5.0;
503 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/yabai-help-overlay.app/Contents/MacOS/yabai-help-overlay";
504 | };
505 | name = Release;
506 | };
507 | 6BC28B5A259E3101009112E5 /* Debug */ = {
508 | isa = XCBuildConfiguration;
509 | buildSettings = {
510 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
511 | CODE_SIGN_STYLE = Automatic;
512 | COMBINE_HIDPI_IMAGES = YES;
513 | INFOPLIST_FILE = "yabai-help-overlayUITests/Info.plist";
514 | LD_RUNPATH_SEARCH_PATHS = (
515 | "$(inherited)",
516 | "@executable_path/../Frameworks",
517 | "@loader_path/../Frameworks",
518 | );
519 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlayUITests";
520 | PRODUCT_NAME = "$(TARGET_NAME)";
521 | SWIFT_VERSION = 5.0;
522 | TEST_TARGET_NAME = "yabai-help-overlay";
523 | };
524 | name = Debug;
525 | };
526 | 6BC28B5B259E3101009112E5 /* Release */ = {
527 | isa = XCBuildConfiguration;
528 | buildSettings = {
529 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
530 | CODE_SIGN_STYLE = Automatic;
531 | COMBINE_HIDPI_IMAGES = YES;
532 | INFOPLIST_FILE = "yabai-help-overlayUITests/Info.plist";
533 | LD_RUNPATH_SEARCH_PATHS = (
534 | "$(inherited)",
535 | "@executable_path/../Frameworks",
536 | "@loader_path/../Frameworks",
537 | );
538 | PRODUCT_BUNDLE_IDENTIFIER = "dev.arunvelsriram.yabai-help-overlayUITests";
539 | PRODUCT_NAME = "$(TARGET_NAME)";
540 | SWIFT_VERSION = 5.0;
541 | TEST_TARGET_NAME = "yabai-help-overlay";
542 | };
543 | name = Release;
544 | };
545 | /* End XCBuildConfiguration section */
546 |
547 | /* Begin XCConfigurationList section */
548 | 6BC28B28259E3100009112E5 /* Build configuration list for PBXProject "yabai-help-overlay" */ = {
549 | isa = XCConfigurationList;
550 | buildConfigurations = (
551 | 6BC28B51259E3101009112E5 /* Debug */,
552 | 6BC28B52259E3101009112E5 /* Release */,
553 | );
554 | defaultConfigurationIsVisible = 0;
555 | defaultConfigurationName = Release;
556 | };
557 | 6BC28B53259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlay" */ = {
558 | isa = XCConfigurationList;
559 | buildConfigurations = (
560 | 6BC28B54259E3101009112E5 /* Debug */,
561 | 6BC28B55259E3101009112E5 /* Release */,
562 | );
563 | defaultConfigurationIsVisible = 0;
564 | defaultConfigurationName = Release;
565 | };
566 | 6BC28B56259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlayTests" */ = {
567 | isa = XCConfigurationList;
568 | buildConfigurations = (
569 | 6BC28B57259E3101009112E5 /* Debug */,
570 | 6BC28B58259E3101009112E5 /* Release */,
571 | );
572 | defaultConfigurationIsVisible = 0;
573 | defaultConfigurationName = Release;
574 | };
575 | 6BC28B59259E3101009112E5 /* Build configuration list for PBXNativeTarget "yabai-help-overlayUITests" */ = {
576 | isa = XCConfigurationList;
577 | buildConfigurations = (
578 | 6BC28B5A259E3101009112E5 /* Debug */,
579 | 6BC28B5B259E3101009112E5 /* Release */,
580 | );
581 | defaultConfigurationIsVisible = 0;
582 | defaultConfigurationName = Release;
583 | };
584 | /* End XCConfigurationList section */
585 | };
586 | rootObject = 6BC28B25259E3100009112E5 /* Project object */;
587 | }
588 |
--------------------------------------------------------------------------------