Skip to content

Commit 75faf74

Browse files
committed
Set Xcode workspace file opener
1 parent c060e6b commit 75faf74

23 files changed

+486
-229
lines changed

XcodeOpener/XcodeOpener.xcodeproj/project.pbxproj

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
740340C7225F277E00193BC1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 740340C6225F277E00193BC1 /* Assets.xcassets */; };
1414
740340CA225F277E00193BC1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 740340C8225F277E00193BC1 /* Main.storyboard */; };
1515
740340D1225F289F00193BC1 /* XcodeOpenerLauncher.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 740340C0225F277C00193BC1 /* XcodeOpenerLauncher.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
16+
740340D3225F2EE600193BC1 /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 740340D2225F2EE600193BC1 /* MainWindowController.swift */; };
17+
740340D7225F391D00193BC1 /* DefaultsSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 740340D6225F391D00193BC1 /* DefaultsSettingViewController.swift */; };
1618
741AE957225DC4B800DDE7EA /* ApplicationOpener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741AE956225DC4B800DDE7EA /* ApplicationOpener.swift */; };
1719
741AE95C225DDD7A00DDE7EA /* XcodesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 741AE95A225DDD7A00DDE7EA /* XcodesListViewController.swift */; };
1820
741AE95F225DDF0100DDE7EA /* Xcodes.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 741AE95E225DDF0100DDE7EA /* Xcodes.storyboard */; };
@@ -27,7 +29,7 @@
2729
74A5B802225E01D600293442 /* KeyValueStoreType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74A5B801225E01D600293442 /* KeyValueStoreType.swift */; };
2830
74A5B804225E01EB00293442 /* NSButton+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74A5B803225E01EB00293442 /* NSButton+.swift */; };
2931
74EC1572225DC31D001A6439 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74EC1571225DC31D001A6439 /* AppDelegate.swift */; };
30-
74EC1574225DC31D001A6439 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74EC1573225DC31D001A6439 /* ViewController.swift */; };
32+
74EC1574225DC31D001A6439 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74EC1573225DC31D001A6439 /* MainViewController.swift */; };
3133
74EC1576225DC31F001A6439 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 74EC1575225DC31F001A6439 /* Assets.xcassets */; };
3234
74EC1579225DC31F001A6439 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74EC1577225DC31F001A6439 /* Main.storyboard */; };
3335
/* End PBXBuildFile section */
@@ -55,6 +57,8 @@
5557
740340C9225F277E00193BC1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
5658
740340CB225F277E00193BC1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5759
740340CC225F277E00193BC1 /* XcodeOpenerLauncher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = XcodeOpenerLauncher.entitlements; sourceTree = "<group>"; };
60+
740340D2225F2EE600193BC1 /* MainWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainWindowController.swift; sourceTree = "<group>"; };
61+
740340D6225F391D00193BC1 /* DefaultsSettingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultsSettingViewController.swift; sourceTree = "<group>"; };
5862
741AE956225DC4B800DDE7EA /* ApplicationOpener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationOpener.swift; sourceTree = "<group>"; };
5963
741AE95A225DDD7A00DDE7EA /* XcodesListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XcodesListViewController.swift; sourceTree = "<group>"; };
6064
741AE95E225DDF0100DDE7EA /* Xcodes.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Xcodes.storyboard; sourceTree = "<group>"; };
@@ -70,7 +74,7 @@
7074
74A5B803225E01EB00293442 /* NSButton+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSButton+.swift"; sourceTree = "<group>"; };
7175
74EC156E225DC31D001A6439 /* XcodeOpener.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XcodeOpener.app; sourceTree = BUILT_PRODUCTS_DIR; };
7276
74EC1571225DC31D001A6439 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
73-
74EC1573225DC31D001A6439 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
77+
74EC1573225DC31D001A6439 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
7478
74EC1575225DC31F001A6439 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
7579
74EC1578225DC31F001A6439 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
7680
74EC157A225DC31F001A6439 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -108,14 +112,37 @@
108112
path = XcodeOpenerLauncher;
109113
sourceTree = "<group>";
110114
};
111-
741AE962225DDF9E00DDE7EA /* Xcode List */ = {
115+
740340D4225F345000193BC1 /* Utility */ = {
116+
isa = PBXGroup;
117+
children = (
118+
741AE956225DC4B800DDE7EA /* ApplicationOpener.swift */,
119+
740340B8225F1F2800193BC1 /* LaunchAtLogin.swift */,
120+
740340BA225F254E00193BC1 /* AppModeSwitcher.swift */,
121+
);
122+
path = Utility;
123+
sourceTree = "<group>";
124+
};
125+
740340D5225F346300193BC1 /* Controllers */ = {
126+
isa = PBXGroup;
127+
children = (
128+
740340D6225F391D00193BC1 /* DefaultsSettingViewController.swift */,
129+
74EC1577225DC31F001A6439 /* Main.storyboard */,
130+
74EC1573225DC31D001A6439 /* MainViewController.swift */,
131+
740340D2225F2EE600193BC1 /* MainWindowController.swift */,
132+
741AE962225DDF9E00DDE7EA /* Xcodes */,
133+
741AE963225DDFAD00DDE7EA /* Rules */,
134+
);
135+
path = Controllers;
136+
sourceTree = "<group>";
137+
};
138+
741AE962225DDF9E00DDE7EA /* Xcodes */ = {
112139
isa = PBXGroup;
113140
children = (
114141
741AE95A225DDD7A00DDE7EA /* XcodesListViewController.swift */,
115142
741AE95E225DDF0100DDE7EA /* Xcodes.storyboard */,
116143
741AE96A225DE02C00DDE7EA /* AddXcodeViewController.swift */,
117144
);
118-
path = "Xcode List";
145+
path = Xcodes;
119146
sourceTree = "<group>";
120147
};
121148
741AE963225DDFAD00DDE7EA /* Rules */ = {
@@ -142,8 +169,6 @@
142169
children = (
143170
74A5B7FF225DFF5D00293442 /* AppDefaults.swift */,
144171
74A5B801225E01D600293442 /* KeyValueStoreType.swift */,
145-
740340B8225F1F2800193BC1 /* LaunchAtLogin.swift */,
146-
740340BA225F254E00193BC1 /* AppModeSwitcher.swift */,
147172
);
148173
path = Defaults;
149174
sourceTree = "<group>";
@@ -179,18 +204,15 @@
179204
74EC1570225DC31D001A6439 /* XcodeOpener */ = {
180205
isa = PBXGroup;
181206
children = (
207+
740340D4225F345000193BC1 /* Utility */,
208+
740340D5225F346300193BC1 /* Controllers */,
209+
74A5B805225E020900293442 /* Extension */,
210+
74A5B806225E021B00293442 /* Defaults */,
182211
74A5B807225E029E00293442 /* Model */,
183212
74EC1571225DC31D001A6439 /* AppDelegate.swift */,
184-
74EC1573225DC31D001A6439 /* ViewController.swift */,
185213
74EC1575225DC31F001A6439 /* Assets.xcassets */,
186-
74EC1577225DC31F001A6439 /* Main.storyboard */,
187214
74EC157A225DC31F001A6439 /* Info.plist */,
188215
74EC157B225DC31F001A6439 /* XcodeOpener.entitlements */,
189-
741AE956225DC4B800DDE7EA /* ApplicationOpener.swift */,
190-
741AE962225DDF9E00DDE7EA /* Xcode List */,
191-
741AE963225DDFAD00DDE7EA /* Rules */,
192-
74A5B805225E020900293442 /* Extension */,
193-
74A5B806225E021B00293442 /* Defaults */,
194216
);
195217
path = XcodeOpener;
196218
sourceTree = "<group>";
@@ -313,10 +335,12 @@
313335
files = (
314336
740340BB225F254E00193BC1 /* AppModeSwitcher.swift in Sources */,
315337
74A5B7F3225DE7E600293442 /* XcodeAlias.swift in Sources */,
338+
740340D7225F391D00193BC1 /* DefaultsSettingViewController.swift in Sources */,
316339
740340B9225F1F2800193BC1 /* LaunchAtLogin.swift in Sources */,
317340
741AE957225DC4B800DDE7EA /* ApplicationOpener.swift in Sources */,
318-
74EC1574225DC31D001A6439 /* ViewController.swift in Sources */,
341+
74EC1574225DC31D001A6439 /* MainViewController.swift in Sources */,
319342
74A5B802225E01D600293442 /* KeyValueStoreType.swift in Sources */,
343+
740340D3225F2EE600193BC1 /* MainWindowController.swift in Sources */,
320344
74A5B7F5225DE81800293442 /* Rule.swift in Sources */,
321345
741AE965225DDFF600DDE7EA /* OpenRulesListViewController.swift in Sources */,
322346
74A5B7FE225DF55600293442 /* NSStoryboard+.swift in Sources */,

XcodeOpener/XcodeOpener/AppDelegate.swift

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@
88

99
import Cocoa
1010

11+
12+
extension Notification.Name {
13+
static let killLauncher = Notification.Name("app.chen.xcodeopener.killLauncher")
14+
}
15+
1116
@NSApplicationMain
1217
class AppDelegate: NSObject, NSApplicationDelegate {
18+
let statusItem = NSStatusBar.system.statusItem(withLength:NSStatusItem.squareLength)
1319

1420
func applicationDidFinishLaunching(_ aNotification: Notification) {
1521
// Insert code here to initialize your application
@@ -21,6 +27,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
2127
DistributedNotificationCenter.default().post(name: .killLauncher,
2228
object: Bundle.main.bundleIdentifier!)
2329
}
30+
31+
if let button = statusItem.button {
32+
button.image = NSImage(named:NSImage.Name("open"))
33+
constructMenu()
34+
}
35+
AppModeSwitcher.mode = AppDefaults.shared.appMode
2436
}
2537

2638
func applicationWillTerminate(_ aNotification: Notification) {
@@ -29,13 +41,36 @@ class AppDelegate: NSObject, NSApplicationDelegate {
2941

3042
func application(_ application: NSApplication, open urls: [URL]) {
3143
guard urls.count > 0 else { return }
32-
3344
urls.forEach {
3445
ApplicationOpener.shared.open($0)
3546
}
3647
}
3748
}
3849

39-
extension Notification.Name {
40-
static let killLauncher = Notification.Name("app.chen.xcodeopener.killLauncher")
50+
extension AppDelegate {
51+
private func constructMenu() {
52+
let menu = NSMenu()
53+
54+
menu.addItem(NSMenuItem(title: "Show Main Window", action: #selector(showMainWindow(_:)), keyEquivalent: "m"))
55+
menu.addItem(NSMenuItem.separator())
56+
menu.addItem(NSMenuItem(title: "Back to Xcode", action: #selector(recoverToApple(_:)), keyEquivalent: "r"))
57+
menu.addItem(NSMenuItem.separator())
58+
menu.addItem(NSMenuItem(title: "Quit", action: #selector(terminate(_:)), keyEquivalent: "q"))
59+
60+
statusItem.menu = menu
61+
}
62+
63+
@objc func showMainWindow(_ sender: Any) {
64+
MainWindowController.shared.window?.makeKeyAndOrderFront(nil)
65+
NSApp.activate(ignoringOtherApps: true)
66+
}
67+
68+
@objc func terminate(_ sender: Any) {
69+
NSApp.terminate(sender)
70+
}
71+
72+
@objc func recoverToApple(_ sender: Any) {
73+
_ = ApplicationOpener.shared.setDefaultApplication(.apple, for: .project)
74+
_ = ApplicationOpener.shared.setDefaultApplication(.apple, for: .workspace)
75+
}
4176
}

XcodeOpener/XcodeOpener/ApplicationOpener.swift

Lines changed: 0 additions & 89 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"images" : [
3+
{
4+
"idiom" : "universal",
5+
"filename" : "open.png",
6+
"scale" : "1x"
7+
},
8+
{
9+
"idiom" : "universal",
10+
"scale" : "2x"
11+
},
12+
{
13+
"idiom" : "universal",
14+
"scale" : "3x"
15+
}
16+
],
17+
"info" : {
18+
"version" : 1,
19+
"author" : "xcode"
20+
},
21+
"properties" : {
22+
"template-rendering-intent" : "template"
23+
}
24+
}
Loading

0 commit comments

Comments
 (0)