├── macOS
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── macOS.entitlements
├── AppDelegate.swift
├── Info.plist
├── MainWindowController.xib
├── MainWindowController.swift
└── Base.lproj
│ └── MainMenu.xib
├── Cartfile
├── Cartfile.resolved
├── TheTitle.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── renameApp.sh
├── TheTitle.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── DefaultApp.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── Podfile
├── Package.swift
├── Podfile.lock
└── .gitignore
/macOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "sparkle-project/Sparkle"
2 | github "microsoft/appcenter-sdk-apple"
3 | github "Alamofire/Alamofire"
4 | github "SwiftyJSON/SwiftyJSON"
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "Alamofire/Alamofire" "5.0.2"
2 | github "SwiftyJSON/SwiftyJSON" "5.0.0"
3 | github "microsoft/appcenter-sdk-apple" "3.0.0"
4 | github "sparkle-project/Sparkle" "v1.23.0"
5 |
--------------------------------------------------------------------------------
/TheTitle.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/renameApp.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | find . ! -name '.DS_Store' ! -name 'renameApp.sh' ! -path '*.git*' ! -path '*Pods/*' ! -path '*.swiftpm/*' -type f -exec sed -i "" "s/DefaultApp/$1/g" {} \;
3 | mv "DefaultApp.xcodeproj" "$1.xcodeproj"
4 | mv "macOS/Resources/DefaultApp.sdef" "macOS/Resources/$1.sdef"
5 |
--------------------------------------------------------------------------------
/macOS/macOS.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.automation.apple-events
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/TheTitle.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DefaultApp.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/TheTitle.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DefaultApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/TheTitle.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | source 'https://github.com/CocoaPods/Specs.git'
2 |
3 | target "TheTitle" do
4 | platform :osx, "10.14"
5 | inhibit_all_warnings!
6 | pod 'AppCenter'
7 | pod 'SwiftyJSON'
8 | pod 'Sparkle'
9 | pod 'Alamofire'
10 | end
11 |
12 | target "TheTitle-MAS" do
13 | platform :osx, "10.14"
14 | inhibit_all_warnings!
15 | pod 'AppCenter'
16 | pod 'SwiftyJSON'
17 | pod 'Alamofire'
18 | end
19 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:4.0
2 | import PackageDescription
3 |
4 | let package = Package(
5 | name: "YOUR_PROJECT_NAME",
6 | dependencies: [
7 | // .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0"),
8 | // .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.0.0"))
9 | // Sadness...
10 | // Sparkle and MS AppCenter aren't yet available. So I'm disabling Swift PM for now.
11 | // Just use CocoaPods, Carthage, or install everything by hand instead if you'd like.
12 | ]
13 | )
--------------------------------------------------------------------------------
/macOS/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | //
4 | // Created by Tyler Hall on 3/12/20.
5 | // Copyright © 2020 Click On Tyler. All rights reserved.
6 | //
7 |
8 | import Cocoa
9 |
10 | @NSApplicationMain
11 | class AppDelegate: NSObject, NSApplicationDelegate {
12 |
13 | lazy var mainWindowController: MainWindowController = { MainWindowController(windowNibName: String(describing: MainWindowController.self)) }()
14 |
15 | func applicationDidFinishLaunching(_ aNotification: Notification) {
16 | showMainWindow(nil)
17 | }
18 |
19 | func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
20 | showMainWindow(nil)
21 | return true
22 | }
23 |
24 | @IBAction func showMainWindow(_ sender: AnyObject?) {
25 | mainWindowController.showWindow(sender)
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Alamofire (5.0.2)
3 | - AppCenter (3.0.0):
4 | - AppCenter/Analytics (= 3.0.0)
5 | - AppCenter/Crashes (= 3.0.0)
6 | - AppCenter/Analytics (3.0.0):
7 | - AppCenter/Core
8 | - AppCenter/Core (3.0.0)
9 | - AppCenter/Crashes (3.0.0):
10 | - AppCenter/Core
11 | - Sparkle (1.23.0)
12 | - SwiftyJSON (5.0.0)
13 |
14 | DEPENDENCIES:
15 | - Alamofire
16 | - AppCenter
17 | - Sparkle
18 | - SwiftyJSON
19 |
20 | SPEC REPOS:
21 | https://github.com/CocoaPods/Specs.git:
22 | - Alamofire
23 | - AppCenter
24 | - Sparkle
25 | - SwiftyJSON
26 |
27 | SPEC CHECKSUMS:
28 | Alamofire: 3ba7a4db18b4f62c4a1c0e1cb39d7f3d52e10ada
29 | AppCenter: 7a0bbe928d07467ac8b2d7f6f2a675872a6471d8
30 | Sparkle: 55b1a87ba69d56913375a281546b7c82dec95bb0
31 | SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
32 |
33 | PODFILE CHECKSUM: e298fa65e38efe97329aad6efbf8e972a40ecdbe
34 |
35 | COCOAPODS: 1.10.1
36 |
--------------------------------------------------------------------------------
/macOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/macOS/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 | 1.0
21 | CFBundleURLTypes
22 |
23 |
24 | CFBundleURLSchemes
25 |
26 | yourapp
27 |
28 |
29 |
30 | CFBundleVersion
31 | 1
32 | LSMinimumSystemVersion
33 | $(MACOSX_DEPLOYMENT_TARGET)
34 | NSAppleEventsUsageDescription
35 | Allow TheTitle to read your web browser's current page title.
36 | NSHumanReadableCopyright
37 | Copyright © 2021 Click On Tyler. All rights reserved.
38 | NSMainNibFile
39 | MainMenu
40 | NSSupportsAutomaticTermination
41 |
42 | NSSupportsSuddenTermination
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | Packages/
39 | Package.pins
40 | Package.resolved
41 | .build/
42 | .swiftpm
43 |
44 | # CocoaPods
45 | #
46 | # We recommend against adding the Pods directory to your .gitignore. However
47 | # you should judge for yourself, the pros and cons are mentioned at:
48 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
49 | #
50 | Pods/
51 |
52 | # Carthage
53 | #
54 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
55 | Carthage/Checkouts
56 |
57 | Carthage/Build
58 |
59 | # fastlane
60 | #
61 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
62 | # screenshots whenever they are needed.
63 | # For more information about the recommended setup visit:
64 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
65 |
66 | fastlane/report.xml
67 | fastlane/Preview.html
68 | fastlane/screenshots/**/*.png
69 | fastlane/test_output
70 |
71 | .DS_Store
72 |
--------------------------------------------------------------------------------
/macOS/MainWindowController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/macOS/MainWindowController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainWindowController.swift
3 | //
4 | // Created by Tyler Hall on 3/12/20.
5 | // Copyright © 2020 Click On Tyler. All rights reserved.
6 | //
7 |
8 | import Cocoa
9 |
10 | class MainWindowController: NSWindowController {
11 |
12 | static var shared: MainWindowController!
13 |
14 | @IBOutlet weak var titleLabel: NSTextField!
15 |
16 | var lastBrowser: NSRunningApplication?
17 | let browsers = ["com.apple.Safari", "com.google.Chrome", "com.microsoft.edgemac", "org.mozilla.firefox", "com.brave.Browser"]
18 |
19 | lazy var scriptSafari: NSAppleScript = {
20 | let script = """
21 | tell application "Safari" to return name of front document
22 | """
23 | let appleScript = NSAppleScript(source: script)
24 | appleScript?.compileAndReturnError(nil)
25 | return appleScript!
26 | }()
27 |
28 | lazy var scriptChrome: NSAppleScript = {
29 | let script = """
30 | tell application "Google Chrome" to return title of active tab of front window
31 | """
32 | let appleScript = NSAppleScript(source: script)
33 | appleScript?.compileAndReturnError(nil)
34 | return appleScript!
35 | }()
36 |
37 | lazy var scriptEdge: NSAppleScript = {
38 | let script = """
39 | tell application "Microsoft Edge" to return title of active tab of front window
40 | """
41 | let appleScript = NSAppleScript(source: script)
42 | appleScript?.compileAndReturnError(nil)
43 | return appleScript!
44 | }()
45 |
46 | lazy var scriptBrave: NSAppleScript = {
47 | let script = """
48 | tell application "Brave Browser" to return title of active tab of front window
49 | """
50 | let appleScript = NSAppleScript(source: script)
51 | appleScript?.compileAndReturnError(nil)
52 | return appleScript!
53 | }()
54 |
55 | lazy var scriptFirefox: NSAppleScript = {
56 | let script = """
57 | tell application "Firefox" to return name of windows's item 1
58 | """
59 | let appleScript = NSAppleScript(source: script)
60 | appleScript?.compileAndReturnError(nil)
61 | return appleScript!
62 | }()
63 |
64 | override func windowDidLoad() {
65 | super.windowDidLoad()
66 | MainWindowController.shared = self
67 |
68 | window?.isMovableByWindowBackground = true
69 | window?.level = .statusBar
70 |
71 | NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(appDidActivate(_:)), name: NSWorkspace.didActivateApplicationNotification, object: nil)
72 |
73 | Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
74 | self?.getBrowserTitle()
75 | }
76 | }
77 |
78 | @objc func appDidActivate(_ notification: Notification) {
79 | if let runningApp = notification.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication {
80 | guard let bundleID = runningApp.bundleIdentifier else { return }
81 | guard browsers.contains(bundleID) else { return }
82 | lastBrowser = runningApp
83 | }
84 | }
85 |
86 | func getBrowserTitle() {
87 | guard let bundleID = lastBrowser?.bundleIdentifier else { return }
88 |
89 | var title: String?
90 |
91 | if bundleID.contains("Safari") {
92 | title = scriptSafari.executeAndReturnError(nil).stringValue
93 | }
94 |
95 | if bundleID.contains("Chrome") {
96 | title = scriptChrome.executeAndReturnError(nil).stringValue
97 | }
98 |
99 | if bundleID.contains("edgemac") {
100 | title = scriptEdge.executeAndReturnError(nil).stringValue
101 | }
102 |
103 | if bundleID.contains("brave") {
104 | title = scriptBrave.executeAndReturnError(nil).stringValue
105 | }
106 |
107 | if bundleID.contains("firefox") {
108 | title = scriptFirefox.executeAndReturnError(nil).stringValue
109 | }
110 |
111 | if let title = title {
112 | window?.title = title
113 | }
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/TheTitle.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C6FF2581241A866F00C896DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FF2580241A866F00C896DA /* AppDelegate.swift */; };
11 | C6FF2583241A867400C896DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C6FF2582241A867400C896DA /* Assets.xcassets */; };
12 | C6FF2586241A867400C896DA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = C6FF2584241A867400C896DA /* MainMenu.xib */; };
13 | C6FF25AB241A8B8600C896DA /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FF2599241A8B8600C896DA /* MainWindowController.swift */; };
14 | C6FF25B7241A8B8600C896DA /* MainWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C6FF25A8241A8B8600C896DA /* MainWindowController.xib */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXCopyFilesBuildPhase section */
18 | C6FF2590241A899C00C896DA /* Copy Frameworks */ = {
19 | isa = PBXCopyFilesBuildPhase;
20 | buildActionMask = 2147483647;
21 | dstPath = "";
22 | dstSubfolderSpec = 10;
23 | files = (
24 | );
25 | name = "Copy Frameworks";
26 | runOnlyForDeploymentPostprocessing = 0;
27 | };
28 | /* End PBXCopyFilesBuildPhase section */
29 |
30 | /* Begin PBXFileReference section */
31 | C6FF257D241A866F00C896DA /* TheTitle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TheTitle.app; sourceTree = BUILT_PRODUCTS_DIR; };
32 | C6FF2580241A866F00C896DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
33 | C6FF2582241A867400C896DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
34 | C6FF2585241A867400C896DA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
35 | C6FF2587241A867400C896DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
36 | C6FF2588241A867400C896DA /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; };
37 | C6FF2599241A8B8600C896DA /* MainWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainWindowController.swift; sourceTree = ""; };
38 | C6FF25A8241A8B8600C896DA /* MainWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindowController.xib; sourceTree = ""; };
39 | /* End PBXFileReference section */
40 |
41 | /* Begin PBXFrameworksBuildPhase section */
42 | C6FF257A241A866F00C896DA /* Frameworks */ = {
43 | isa = PBXFrameworksBuildPhase;
44 | buildActionMask = 2147483647;
45 | files = (
46 | );
47 | runOnlyForDeploymentPostprocessing = 0;
48 | };
49 | /* End PBXFrameworksBuildPhase section */
50 |
51 | /* Begin PBXGroup section */
52 | C6FF2574241A866F00C896DA = {
53 | isa = PBXGroup;
54 | children = (
55 | C6FF257F241A866F00C896DA /* macOS */,
56 | C6FF257E241A866F00C896DA /* Products */,
57 | );
58 | sourceTree = "";
59 | };
60 | C6FF257E241A866F00C896DA /* Products */ = {
61 | isa = PBXGroup;
62 | children = (
63 | C6FF257D241A866F00C896DA /* TheTitle.app */,
64 | );
65 | name = Products;
66 | sourceTree = "";
67 | };
68 | C6FF257F241A866F00C896DA /* macOS */ = {
69 | isa = PBXGroup;
70 | children = (
71 | C6FF2580241A866F00C896DA /* AppDelegate.swift */,
72 | C6FF2599241A8B8600C896DA /* MainWindowController.swift */,
73 | C6FF2584241A867400C896DA /* MainMenu.xib */,
74 | C6FF25A8241A8B8600C896DA /* MainWindowController.xib */,
75 | C6FF2582241A867400C896DA /* Assets.xcassets */,
76 | C6FF2587241A867400C896DA /* Info.plist */,
77 | C6FF2588241A867400C896DA /* macOS.entitlements */,
78 | );
79 | path = macOS;
80 | sourceTree = "";
81 | };
82 | /* End PBXGroup section */
83 |
84 | /* Begin PBXNativeTarget section */
85 | C6FF257C241A866F00C896DA /* TheTitle */ = {
86 | isa = PBXNativeTarget;
87 | buildConfigurationList = C6FF258B241A867400C896DA /* Build configuration list for PBXNativeTarget "TheTitle" */;
88 | buildPhases = (
89 | C6FF2579241A866F00C896DA /* Sources */,
90 | C6FF257A241A866F00C896DA /* Frameworks */,
91 | C6FF257B241A866F00C896DA /* Resources */,
92 | C6FF2590241A899C00C896DA /* Copy Frameworks */,
93 | );
94 | buildRules = (
95 | );
96 | dependencies = (
97 | );
98 | name = TheTitle;
99 | productName = Spotter;
100 | productReference = C6FF257D241A866F00C896DA /* TheTitle.app */;
101 | productType = "com.apple.product-type.application";
102 | };
103 | /* End PBXNativeTarget section */
104 |
105 | /* Begin PBXProject section */
106 | C6FF2575241A866F00C896DA /* Project object */ = {
107 | isa = PBXProject;
108 | attributes = {
109 | LastSwiftUpdateCheck = 1130;
110 | LastUpgradeCheck = 1250;
111 | ORGANIZATIONNAME = "Your Company";
112 | TargetAttributes = {
113 | C6FF257C241A866F00C896DA = {
114 | CreatedOnToolsVersion = 11.3.1;
115 | };
116 | };
117 | };
118 | buildConfigurationList = C6FF2578241A866F00C896DA /* Build configuration list for PBXProject "TheTitle" */;
119 | compatibilityVersion = "Xcode 9.3";
120 | developmentRegion = en;
121 | hasScannedForEncodings = 0;
122 | knownRegions = (
123 | en,
124 | Base,
125 | );
126 | mainGroup = C6FF2574241A866F00C896DA;
127 | productRefGroup = C6FF257E241A866F00C896DA /* Products */;
128 | projectDirPath = "";
129 | projectRoot = "";
130 | targets = (
131 | C6FF257C241A866F00C896DA /* TheTitle */,
132 | );
133 | };
134 | /* End PBXProject section */
135 |
136 | /* Begin PBXResourcesBuildPhase section */
137 | C6FF257B241A866F00C896DA /* Resources */ = {
138 | isa = PBXResourcesBuildPhase;
139 | buildActionMask = 2147483647;
140 | files = (
141 | C6FF25B7241A8B8600C896DA /* MainWindowController.xib in Resources */,
142 | C6FF2583241A867400C896DA /* Assets.xcassets in Resources */,
143 | C6FF2586241A867400C896DA /* MainMenu.xib in Resources */,
144 | );
145 | runOnlyForDeploymentPostprocessing = 0;
146 | };
147 | /* End PBXResourcesBuildPhase section */
148 |
149 | /* Begin PBXSourcesBuildPhase section */
150 | C6FF2579241A866F00C896DA /* Sources */ = {
151 | isa = PBXSourcesBuildPhase;
152 | buildActionMask = 2147483647;
153 | files = (
154 | C6FF2581241A866F00C896DA /* AppDelegate.swift in Sources */,
155 | C6FF25AB241A8B8600C896DA /* MainWindowController.swift in Sources */,
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | /* End PBXSourcesBuildPhase section */
160 |
161 | /* Begin PBXVariantGroup section */
162 | C6FF2584241A867400C896DA /* MainMenu.xib */ = {
163 | isa = PBXVariantGroup;
164 | children = (
165 | C6FF2585241A867400C896DA /* Base */,
166 | );
167 | name = MainMenu.xib;
168 | sourceTree = "";
169 | };
170 | /* End PBXVariantGroup section */
171 |
172 | /* Begin XCBuildConfiguration section */
173 | C6FF2589241A867400C896DA /* Debug */ = {
174 | isa = XCBuildConfiguration;
175 | buildSettings = {
176 | ALWAYS_SEARCH_USER_PATHS = NO;
177 | CLANG_ANALYZER_NONNULL = YES;
178 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
179 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
180 | CLANG_CXX_LIBRARY = "libc++";
181 | CLANG_ENABLE_MODULES = YES;
182 | CLANG_ENABLE_OBJC_ARC = YES;
183 | CLANG_ENABLE_OBJC_WEAK = YES;
184 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
185 | CLANG_WARN_BOOL_CONVERSION = YES;
186 | CLANG_WARN_COMMA = YES;
187 | CLANG_WARN_CONSTANT_CONVERSION = YES;
188 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
189 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
190 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
191 | CLANG_WARN_EMPTY_BODY = YES;
192 | CLANG_WARN_ENUM_CONVERSION = YES;
193 | CLANG_WARN_INFINITE_RECURSION = YES;
194 | CLANG_WARN_INT_CONVERSION = YES;
195 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
196 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
197 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
198 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
199 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
200 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
201 | CLANG_WARN_STRICT_PROTOTYPES = YES;
202 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
203 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
204 | CLANG_WARN_UNREACHABLE_CODE = YES;
205 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
206 | COPY_PHASE_STRIP = NO;
207 | DEBUG_INFORMATION_FORMAT = dwarf;
208 | ENABLE_STRICT_OBJC_MSGSEND = YES;
209 | ENABLE_TESTABILITY = YES;
210 | GCC_C_LANGUAGE_STANDARD = gnu11;
211 | GCC_DYNAMIC_NO_PIC = NO;
212 | GCC_NO_COMMON_BLOCKS = YES;
213 | GCC_OPTIMIZATION_LEVEL = 0;
214 | GCC_PREPROCESSOR_DEFINITIONS = (
215 | "DEBUG=1",
216 | "$(inherited)",
217 | );
218 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
219 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
220 | GCC_WARN_UNDECLARED_SELECTOR = YES;
221 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
222 | GCC_WARN_UNUSED_FUNCTION = YES;
223 | GCC_WARN_UNUSED_VARIABLE = YES;
224 | MACOSX_DEPLOYMENT_TARGET = 10.15;
225 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
226 | MTL_FAST_MATH = YES;
227 | ONLY_ACTIVE_ARCH = YES;
228 | SDKROOT = macosx;
229 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
230 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
231 | };
232 | name = Debug;
233 | };
234 | C6FF258A241A867400C896DA /* Release */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | CLANG_ANALYZER_NONNULL = YES;
239 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
240 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
241 | CLANG_CXX_LIBRARY = "libc++";
242 | CLANG_ENABLE_MODULES = YES;
243 | CLANG_ENABLE_OBJC_ARC = YES;
244 | CLANG_ENABLE_OBJC_WEAK = YES;
245 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
246 | CLANG_WARN_BOOL_CONVERSION = YES;
247 | CLANG_WARN_COMMA = YES;
248 | CLANG_WARN_CONSTANT_CONVERSION = YES;
249 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
250 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
251 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
252 | CLANG_WARN_EMPTY_BODY = YES;
253 | CLANG_WARN_ENUM_CONVERSION = YES;
254 | CLANG_WARN_INFINITE_RECURSION = YES;
255 | CLANG_WARN_INT_CONVERSION = YES;
256 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
257 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
258 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
260 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
261 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
262 | CLANG_WARN_STRICT_PROTOTYPES = YES;
263 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
264 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
265 | CLANG_WARN_UNREACHABLE_CODE = YES;
266 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
267 | COPY_PHASE_STRIP = NO;
268 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
269 | ENABLE_NS_ASSERTIONS = NO;
270 | ENABLE_STRICT_OBJC_MSGSEND = YES;
271 | GCC_C_LANGUAGE_STANDARD = gnu11;
272 | GCC_NO_COMMON_BLOCKS = YES;
273 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
274 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
275 | GCC_WARN_UNDECLARED_SELECTOR = YES;
276 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
277 | GCC_WARN_UNUSED_FUNCTION = YES;
278 | GCC_WARN_UNUSED_VARIABLE = YES;
279 | MACOSX_DEPLOYMENT_TARGET = 10.15;
280 | MTL_ENABLE_DEBUG_INFO = NO;
281 | MTL_FAST_MATH = YES;
282 | SDKROOT = macosx;
283 | SWIFT_COMPILATION_MODE = wholemodule;
284 | SWIFT_OPTIMIZATION_LEVEL = "-O";
285 | };
286 | name = Release;
287 | };
288 | C6FF258C241A867400C896DA /* Debug */ = {
289 | isa = XCBuildConfiguration;
290 | buildSettings = {
291 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
292 | CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
293 | CODE_SIGN_IDENTITY = "Apple Development";
294 | CODE_SIGN_STYLE = Automatic;
295 | COMBINE_HIDPI_IMAGES = YES;
296 | DEVELOPMENT_TEAM = 3A6K89K388;
297 | ENABLE_HARDENED_RUNTIME = YES;
298 | FRAMEWORK_SEARCH_PATHS = (
299 | "$(inherited)",
300 | "$(PROJECT_DIR)/macOS",
301 | );
302 | GCC_PREPROCESSOR_DEFINITIONS = (
303 | "$(inherited)",
304 | "COCOAPODS=1",
305 | "SPARKLE=1",
306 | );
307 | INFOPLIST_FILE = macOS/Info.plist;
308 | LD_RUNPATH_SEARCH_PATHS = (
309 | "$(inherited)",
310 | "@executable_path/../Frameworks",
311 | );
312 | MACOSX_DEPLOYMENT_TARGET = 10.14;
313 | PRODUCT_BUNDLE_IDENTIFIER = io.tyler.TheTitle;
314 | PRODUCT_NAME = "$(TARGET_NAME)";
315 | SWIFT_VERSION = 5.0;
316 | };
317 | name = Debug;
318 | };
319 | C6FF258D241A867400C896DA /* Release */ = {
320 | isa = XCBuildConfiguration;
321 | buildSettings = {
322 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
323 | CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
324 | CODE_SIGN_IDENTITY = "Apple Development";
325 | CODE_SIGN_STYLE = Automatic;
326 | COMBINE_HIDPI_IMAGES = YES;
327 | DEVELOPMENT_TEAM = 3A6K89K388;
328 | ENABLE_HARDENED_RUNTIME = YES;
329 | FRAMEWORK_SEARCH_PATHS = (
330 | "$(inherited)",
331 | "$(PROJECT_DIR)/macOS",
332 | );
333 | GCC_PREPROCESSOR_DEFINITIONS = (
334 | "$(inherited)",
335 | "COCOAPODS=1",
336 | "SPARKLE=1",
337 | );
338 | INFOPLIST_FILE = macOS/Info.plist;
339 | LD_RUNPATH_SEARCH_PATHS = (
340 | "$(inherited)",
341 | "@executable_path/../Frameworks",
342 | );
343 | MACOSX_DEPLOYMENT_TARGET = 10.14;
344 | PRODUCT_BUNDLE_IDENTIFIER = io.tyler.TheTitle;
345 | PRODUCT_NAME = "$(TARGET_NAME)";
346 | SWIFT_VERSION = 5.0;
347 | };
348 | name = Release;
349 | };
350 | /* End XCBuildConfiguration section */
351 |
352 | /* Begin XCConfigurationList section */
353 | C6FF2578241A866F00C896DA /* Build configuration list for PBXProject "TheTitle" */ = {
354 | isa = XCConfigurationList;
355 | buildConfigurations = (
356 | C6FF2589241A867400C896DA /* Debug */,
357 | C6FF258A241A867400C896DA /* Release */,
358 | );
359 | defaultConfigurationIsVisible = 0;
360 | defaultConfigurationName = Release;
361 | };
362 | C6FF258B241A867400C896DA /* Build configuration list for PBXNativeTarget "TheTitle" */ = {
363 | isa = XCConfigurationList;
364 | buildConfigurations = (
365 | C6FF258C241A867400C896DA /* Debug */,
366 | C6FF258D241A867400C896DA /* Release */,
367 | );
368 | defaultConfigurationIsVisible = 0;
369 | defaultConfigurationName = Release;
370 | };
371 | /* End XCConfigurationList section */
372 | };
373 | rootObject = C6FF2575241A866F00C896DA /* Project object */;
374 | }
375 |
--------------------------------------------------------------------------------
/macOS/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
697 |
698 |
699 |
--------------------------------------------------------------------------------