Skip to content

Commit 75a936e

Browse files
authored
Merge pull request #15 from tryboxx/SNLB-14/feature/statusBar
[SNLB-14] Create status bar app extension
2 parents e9582e4 + 495e14b commit 75a936e

18 files changed

+631
-12
lines changed

SnippetsLibrary.xcodeproj/project.pbxproj

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
/* Begin PBXBuildFile section */
1010
B8190DF826FA388500E3994C /* SnippetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8190DF726FA388500E3994C /* SnippetType.swift */; };
11+
B81B0877270232B600E59F86 /* NSNotification+Name.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81B0876270232B600E59F86 /* NSNotification+Name.swift */; };
12+
B81B0879270245CE00E59F86 /* AppMenu+HideWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81B0878270245CE00E59F86 /* AppMenu+HideWindow.swift */; };
13+
B81B087B2702468C00E59F86 /* FileStatusCardType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81B087A2702468C00E59F86 /* FileStatusCardType.swift */; };
1114
B82561B426E81D570040A67E /* SnippetsLibraryApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82561B326E81D570040A67E /* SnippetsLibraryApp.swift */; };
1215
B82561B826E81D580040A67E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B82561B726E81D580040A67E /* Assets.xcassets */; };
1316
B82561BB26E81D580040A67E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B82561BA26E81D580040A67E /* Preview Assets.xcassets */; };
@@ -44,6 +47,12 @@
4447
B84BFEA926F57018007E5109 /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84BFEA826F57018007E5109 /* System.swift */; };
4548
B84BFEAB26F570CE007E5109 /* CrashlyticsError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84BFEAA26F570CE007E5109 /* CrashlyticsError.swift */; };
4649
B856D65526F2A29600F60D09 /* DatabaseService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B856D65426F2A29600F60D09 /* DatabaseService.swift */; };
50+
B85AC92E2702153E00A008A6 /* AppMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC92D2702153E00A008A6 /* AppMenu.swift */; };
51+
B85AC9302702158300A008A6 /* AppDelegate+NSMenuDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC92F2702158300A008A6 /* AppDelegate+NSMenuDelegate.swift */; };
52+
B85AC934270215ED00A008A6 /* StatusViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC933270215DB00A008A6 /* StatusViewModel.swift */; };
53+
B85AC935270215EF00A008A6 /* StatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC932270215DB00A008A6 /* StatusView.swift */; };
54+
B85AC9392702160B00A008A6 /* FileStatusCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC9372702160000A008A6 /* FileStatusCard.swift */; };
55+
B85AC93A2702160B00A008A6 /* FileStatusCardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85AC9382702160000A008A6 /* FileStatusCardViewModel.swift */; };
4756
B85D1A9D26FA8EA50053FF3C /* SnippetsLibraryListSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85D1A9C26FA8EA50053FF3C /* SnippetsLibraryListSectionView.swift */; };
4857
B88BB45626F55DDB00747631 /* LogsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88D4A3926F55BEE00164BF5 /* LogsService.swift */; };
4958
B88BB45826F564C200747631 /* UserActivityLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88BB45726F564C200747631 /* UserActivityLevel.swift */; };
@@ -110,12 +119,14 @@
110119

111120
/* Begin PBXFileReference section */
112121
B8190DF726FA388500E3994C /* SnippetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnippetType.swift; sourceTree = "<group>"; };
122+
B81B0876270232B600E59F86 /* NSNotification+Name.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotification+Name.swift"; sourceTree = "<group>"; };
123+
B81B0878270245CE00E59F86 /* AppMenu+HideWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppMenu+HideWindow.swift"; sourceTree = "<group>"; };
124+
B81B087A2702468C00E59F86 /* FileStatusCardType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileStatusCardType.swift; sourceTree = "<group>"; };
113125
B82561B026E81D570040A67E /* Snippets Library.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Snippets Library.app"; sourceTree = BUILT_PRODUCTS_DIR; };
114126
B82561B326E81D570040A67E /* SnippetsLibraryApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnippetsLibraryApp.swift; sourceTree = "<group>"; };
115127
B82561B726E81D580040A67E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
116128
B82561BA26E81D580040A67E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
117129
B82561BC26E81D580040A67E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
118-
B82561BD26E81D580040A67E /* SnippetsLibrary.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SnippetsLibrary.entitlements; sourceTree = "<group>"; };
119130
B82561C826E820D50040A67E /* StartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartView.swift; sourceTree = "<group>"; };
120131
B82561CA26E820EE0040A67E /* StartViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartViewModel.swift; sourceTree = "<group>"; };
121132
B82561CD26E821350040A67E /* Snippet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Snippet.swift; sourceTree = "<group>"; };
@@ -147,6 +158,12 @@
147158
B84BFEA826F57018007E5109 /* System.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = System.swift; sourceTree = "<group>"; };
148159
B84BFEAA26F570CE007E5109 /* CrashlyticsError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashlyticsError.swift; sourceTree = "<group>"; };
149160
B856D65426F2A29600F60D09 /* DatabaseService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseService.swift; sourceTree = "<group>"; };
161+
B85AC92D2702153E00A008A6 /* AppMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMenu.swift; sourceTree = "<group>"; };
162+
B85AC92F2702158300A008A6 /* AppDelegate+NSMenuDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+NSMenuDelegate.swift"; sourceTree = "<group>"; };
163+
B85AC932270215DB00A008A6 /* StatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusView.swift; sourceTree = "<group>"; };
164+
B85AC933270215DB00A008A6 /* StatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusViewModel.swift; sourceTree = "<group>"; };
165+
B85AC9372702160000A008A6 /* FileStatusCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileStatusCard.swift; sourceTree = "<group>"; };
166+
B85AC9382702160000A008A6 /* FileStatusCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileStatusCardViewModel.swift; sourceTree = "<group>"; };
150167
B85D1A9C26FA8EA50053FF3C /* SnippetsLibraryListSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnippetsLibraryListSectionView.swift; sourceTree = "<group>"; };
151168
B88BB45726F564C200747631 /* UserActivityLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserActivityLevel.swift; sourceTree = "<group>"; };
152169
B88BB45926F564D100747631 /* UserActivityLogType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserActivityLogType.swift; sourceTree = "<group>"; };
@@ -259,7 +276,6 @@
259276
B82561B726E81D580040A67E /* Assets.xcassets */,
260277
B82561BC26E81D580040A67E /* Info.plist */,
261278
B88D4A3526F4E34900164BF5 /* GoogleService-Info.plist */,
262-
B82561BD26E81D580040A67E /* SnippetsLibrary.entitlements */,
263279
B82561B926E81D580040A67E /* Preview Content */,
264280
);
265281
path = SnippetsLibrary;
@@ -276,6 +292,7 @@
276292
B82561C626E820BD0040A67E /* Modules */ = {
277293
isa = PBXGroup;
278294
children = (
295+
B85AC931270215DB00A008A6 /* Status */,
279296
B8CFD8B52700D6EA002A66FF /* SnippetsUpload */,
280297
B8F95B0326EEADCE00335D77 /* SnippetImport */,
281298
B825621126E968280040A67E /* SnippetDetails */,
@@ -333,6 +350,7 @@
333350
B82561D726E822250040A67E /* Views */ = {
334351
isa = PBXGroup;
335352
children = (
353+
B85AC9362702160000A008A6 /* FileStatusCard */,
336354
B8F95B0226EEA34A00335D77 /* SnippetListItem */,
337355
B82561F826E8C9FF0040A67E /* SnippetFileCard */,
338356
B82561D826E8223B0040A67E /* VisualEffectView.swift */,
@@ -343,6 +361,7 @@
343361
B8C549BB26FFA71300720E62 /* AppView.swift */,
344362
B8BEF5A826FFBF7E0098A778 /* ToastView.swift */,
345363
B8BEF5AC26FFEB600098A778 /* EmptySnippetsListView.swift */,
364+
B85AC92D2702153E00A008A6 /* AppMenu.swift */,
346365
);
347366
path = Views;
348367
sourceTree = "<group>";
@@ -360,6 +379,9 @@
360379
B82B557F2700011000DE4766 /* SnippetsLibraryView+Equatable.swift */,
361380
B82B55812700014600DE4766 /* StartView+Equatable.swift */,
362381
B82B5585270007C500DE4766 /* DatabaseReference+Timeout.swift */,
382+
B85AC92F2702158300A008A6 /* AppDelegate+NSMenuDelegate.swift */,
383+
B81B0876270232B600E59F86 /* NSNotification+Name.swift */,
384+
B81B0878270245CE00E59F86 /* AppMenu+HideWindow.swift */,
363385
);
364386
path = Extensions;
365387
sourceTree = "<group>";
@@ -435,6 +457,24 @@
435457
path = DatabaseService;
436458
sourceTree = "<group>";
437459
};
460+
B85AC931270215DB00A008A6 /* Status */ = {
461+
isa = PBXGroup;
462+
children = (
463+
B85AC932270215DB00A008A6 /* StatusView.swift */,
464+
B85AC933270215DB00A008A6 /* StatusViewModel.swift */,
465+
);
466+
path = Status;
467+
sourceTree = "<group>";
468+
};
469+
B85AC9362702160000A008A6 /* FileStatusCard */ = {
470+
isa = PBXGroup;
471+
children = (
472+
B85AC9372702160000A008A6 /* FileStatusCard.swift */,
473+
B85AC9382702160000A008A6 /* FileStatusCardViewModel.swift */,
474+
);
475+
path = FileStatusCard;
476+
sourceTree = "<group>";
477+
};
438478
B88D4A3826F55BDE00164BF5 /* Logs */ = {
439479
isa = PBXGroup;
440480
children = (
@@ -540,6 +580,7 @@
540580
B8CE1CAF26FD43B5004AD5D5 /* URLType.swift */,
541581
B8F9CA972700F7F40041CE3E /* DisabledCommandGroupButtonType.swift */,
542582
B8F9CA992700F80E0041CE3E /* UploadingStatus.swift */,
583+
B81B087A2702468C00E59F86 /* FileStatusCardType.swift */,
543584
);
544585
path = Enums;
545586
sourceTree = "<group>";
@@ -761,7 +802,10 @@
761802
B8F95B0926EEAF4D00335D77 /* SnippetImportViewModel.swift in Sources */,
762803
B8EB5AE626F00B2100BE3EF6 /* StartViewMenuItemType.swift in Sources */,
763804
B84BFEAB26F570CE007E5109 /* CrashlyticsError.swift in Sources */,
805+
B85AC9392702160B00A008A6 /* FileStatusCard.swift in Sources */,
806+
B81B0877270232B600E59F86 /* NSNotification+Name.swift in Sources */,
764807
B825621326E968380040A67E /* SnippetDetailsView.swift in Sources */,
808+
B85AC935270215EF00A008A6 /* StatusView.swift in Sources */,
765809
B8C549BC26FFA71300720E62 /* AppView.swift in Sources */,
766810
B8F9CA9A2700F80E0041CE3E /* UploadingStatus.swift in Sources */,
767811
B8EB5ADB26F0076C00BE3EF6 /* PlistCodingKeys.swift in Sources */,
@@ -773,6 +817,7 @@
773817
B82561E226E824A20040A67E /* NSApplication+AppVersion.swift in Sources */,
774818
B82561DE26E822A80040A67E /* RecentSnippetCardView.swift in Sources */,
775819
B82561E426E825A40040A67E /* AppDelegate.swift in Sources */,
820+
B81B087B2702468C00E59F86 /* FileStatusCardType.swift in Sources */,
776821
B88BB45C26F564E600747631 /* DatabaseError.swift in Sources */,
777822
B82561D926E8223B0040A67E /* VisualEffectView.swift in Sources */,
778823
B82561ED26E8C89A0040A67E /* AppSheet.swift in Sources */,
@@ -796,17 +841,22 @@
796841
B82561F726E8C9840040A67E /* SearchBar.swift in Sources */,
797842
B8C549C426FFBA8600720E62 /* View+Skeletonable.swift in Sources */,
798843
B8F9CA982700F7F40041CE3E /* DisabledCommandGroupButtonType.swift in Sources */,
844+
B85AC92E2702153E00A008A6 /* AppMenu.swift in Sources */,
799845
B82561E926E8C7D60040A67E /* SnippetsLibraryView.swift in Sources */,
846+
B85AC934270215ED00A008A6 /* StatusViewModel.swift in Sources */,
847+
B85AC9302702158300A008A6 /* AppDelegate+NSMenuDelegate.swift in Sources */,
800848
B8EB5ADF26F00A4A00BE3EF6 /* SnippetDetailsViewType.swift in Sources */,
801849
B84BFEA926F57018007E5109 /* System.swift in Sources */,
802850
B8B6DE7B26ED9A3300E49C57 /* SnippetDetailsViewModel.swift in Sources */,
851+
B81B0879270245CE00E59F86 /* AppMenu+HideWindow.swift in Sources */,
803852
B8CE1CB826FF965D004AD5D5 /* NetworkService.swift in Sources */,
804853
B8BEF5A926FFBF7E0098A778 /* ToastView.swift in Sources */,
805854
B8CFD8B42700D6A7002A66FF /* SnippetsUploadView.swift in Sources */,
806855
B84BFEA626F56A6A007E5109 /* CrashlyticsService.swift in Sources */,
807856
B8CE1CB026FD43B5004AD5D5 /* URLType.swift in Sources */,
808857
B82561D626E821F20040A67E /* StartViewRecentSnippetsView.swift in Sources */,
809858
B82561D126E821770040A67E /* ActiveAppView.swift in Sources */,
859+
B85AC93A2702160B00A008A6 /* FileStatusCardViewModel.swift in Sources */,
810860
B88BB45A26F564D100747631 /* UserActivityLogType.swift in Sources */,
811861
B82561DC26E822840040A67E /* View+Visibility.swift in Sources */,
812862
B856D65526F2A29600F60D09 /* DatabaseService.swift in Sources */,
@@ -979,11 +1029,11 @@
9791029
buildSettings = {
9801030
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
9811031
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
982-
CODE_SIGN_ENTITLEMENTS = SnippetsLibrary/SnippetsLibrary.entitlements;
1032+
CODE_SIGN_ENTITLEMENTS = SnippetsLibrary/SnippetsLibraryDebug.entitlements;
9831033
CODE_SIGN_IDENTITY = "Apple Development";
9841034
CODE_SIGN_STYLE = Automatic;
9851035
COMBINE_HIDPI_IMAGES = YES;
986-
CURRENT_PROJECT_VERSION = 10;
1036+
CURRENT_PROJECT_VERSION = 11;
9871037
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
9881038
DEVELOPMENT_ASSET_PATHS = "\"SnippetsLibrary/Preview Content\"";
9891039
DEVELOPMENT_TEAM = 7WLUFJRJ56;
@@ -1012,7 +1062,7 @@
10121062
CODE_SIGN_IDENTITY = "Apple Development";
10131063
CODE_SIGN_STYLE = Automatic;
10141064
COMBINE_HIDPI_IMAGES = YES;
1015-
CURRENT_PROJECT_VERSION = 10;
1065+
CURRENT_PROJECT_VERSION = 11;
10161066
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
10171067
DEVELOPMENT_ASSET_PATHS = "\"SnippetsLibrary/Preview Content\"";
10181068
DEVELOPMENT_TEAM = 7WLUFJRJ56;

SnippetsLibrary/Application/AppDelegate.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,20 @@ import Firebase
1010

1111
final class AppDelegate: NSObject, NSApplicationDelegate {
1212

13+
// MARK: - Stored Properties
14+
15+
@Environment(\.openURL) var openURL
16+
17+
internal var statusBarItem: NSStatusItem?
18+
internal var statusView: NSView?
19+
internal var menu: AppMenu?
20+
21+
// MARK: - Methods
22+
1323
func applicationDidFinishLaunching(_ notification: Notification) {
1424
FirebaseApp.configure()
25+
setupMenuItems()
1526
return
1627
}
1728

18-
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
19-
return true
20-
}
21-
2229
}

SnippetsLibrary/Application/SnippetsLibraryApp.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ struct SnippetsLibraryApp: App {
2929
activeAppSheet: $activeAppSheet,
3030
shouldBeDisabled: $shouldBeDisabled
3131
)
32+
.onReceive(NotificationCenter.default.publisher(for: NSNotification.statusBarSnippetTapped)) {
33+
openSnippet(from: $0)
34+
}
3235
}
3336
.windowStyle(HiddenTitleBarWindowStyle())
3437
.onChange(of: activeAppView) {
@@ -109,4 +112,13 @@ struct SnippetsLibraryApp: App {
109112
openURL(safeURL)
110113
}
111114

115+
private func openSnippet(from output: NotificationCenter.Publisher.Output) {
116+
if let userInfo = output.userInfo, let snippetId = userInfo["snippetId"] as? String {
117+
NSApplication.shared.windows.first?.center()
118+
NSApplication.shared.windows.first?.makeKeyAndOrderFront(nil)
119+
NSApp.activate(ignoringOtherApps: true)
120+
activeAppView = .snippetsLibrary(snippetId)
121+
}
122+
}
123+
112124
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "icLogoStatusBar.svg",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
}
12+
}
Lines changed: 6 additions & 0 deletions
Loading
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//
2+
// AppDelegate+NSMenuDelegate.swift
3+
// SnippetsLibrary
4+
//
5+
// Created by Krzysztof Łowiec on 27/09/2021.
6+
//
7+
8+
import SwiftUI
9+
10+
extension AppDelegate: NSMenuDelegate {
11+
12+
func menuWillOpen(_ menu: NSMenu) {
13+
setupStatusView(for: menu)
14+
}
15+
16+
func menuDidClose(_ menu: NSMenu) {}
17+
18+
internal func setupMenuItems() {
19+
menu = AppMenu()
20+
21+
self.statusBarItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
22+
self.statusBarItem?.menu = menu
23+
menu?.delegate = self
24+
25+
if let item = menu?.items.first(where: { $0.title == "Developer Documentation..." }) {
26+
item.action = #selector(openDocsURL(_:))
27+
}
28+
29+
if let button = self.statusBarItem?.button {
30+
button.image = NSImage(named: "icLogoStatusBar")
31+
}
32+
}
33+
34+
private func setupStatusView(for menu: NSMenu) {
35+
if let item = menu.items.first {
36+
statusView = NSHostingView(rootView: StatusView())
37+
setupItemView(
38+
menu: menu,
39+
item: item
40+
)
41+
}
42+
}
43+
44+
private func setupItemView(
45+
menu: NSMenu,
46+
item: NSMenuItem
47+
) {
48+
statusView?.frame = CGRect(
49+
x: .zero,
50+
y: .zero,
51+
width: 250.0,
52+
height: 170.0
53+
)
54+
item.view = statusView
55+
}
56+
57+
@objc private func openDocsURL(_ sender: Any) {
58+
let urlFactory = DIContainer.urlFactory
59+
let docsURL = urlFactory.getURL(withType: .docs)
60+
guard let safeURL = docsURL else { return }
61+
openURL(safeURL)
62+
}
63+
64+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// AppMenu+HideWindow.swift
3+
// SnippetsLibrary
4+
//
5+
// Created by Krzysztof Łowiec on 27/09/2021.
6+
//
7+
8+
import SwiftUI
9+
10+
extension AppMenu: NSWindowDelegate {
11+
12+
func windowShouldClose(_ sender: NSWindow) -> Bool {
13+
NSApp.hide(nil)
14+
return false
15+
}
16+
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// NSNotification+Name.swift
3+
// SnippetsLibrary
4+
//
5+
// Created by Krzysztof Łowiec on 27/09/2021.
6+
//
7+
8+
import Foundation
9+
10+
extension NSNotification {
11+
12+
static let statusBarSnippetTapped = Notification.Name("statusBarSnippetTapped")
13+
14+
}

SnippetsLibrary/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5-
<key>NSHumanReadableCopyright</key>
6-
<string>Apache 2.0 License. All trademarks are protected.</string>
75
<key>CFBundleDevelopmentRegion</key>
86
<string>$(DEVELOPMENT_LANGUAGE)</string>
97
<key>CFBundleExecutable</key>
@@ -24,5 +22,7 @@
2422
<string>public.app-category.developer-tools</string>
2523
<key>LSMinimumSystemVersion</key>
2624
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
25+
<key>NSHumanReadableCopyright</key>
26+
<string>Apache 2.0 License. All trademarks are protected.</string>
2727
</dict>
2828
</plist>

0 commit comments

Comments
 (0)