├── ScriptingShortcuts
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── ScriptingShortcutsApp.swift
├── ScriptingShortcuts.entitlements
├── Views
│ ├── SidebarView.swift
│ ├── ListShortcutsView.swift
│ └── RunShortcutView.swift
└── ShortcutsScriptingBridge.swift
├── ScriptingShortcuts.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── alexhay.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
└── README.md
/ScriptingShortcuts/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ScriptingShortcuts.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/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 |
--------------------------------------------------------------------------------
/ScriptingShortcuts.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ScriptingShortcuts.xcodeproj/xcuserdata/alexhay.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ScriptingShortcuts.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/ScriptingShortcutsApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScriptingShortcutsApp.swift
3 | // ScriptingShortcuts
4 | //
5 | // Created by Alex Hay on 28/06/2021.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct ScriptingShortcutsApp: App {
12 |
13 | var body: some Scene {
14 | WindowGroup {
15 | SidebarView()
16 | .frame(minWidth: 350, idealWidth: 400, maxWidth: 500, minHeight: 450, idealHeight: nil, maxHeight: nil, alignment: .center)
17 | }
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/ScriptingShortcuts.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.automation.apple-events
6 |
7 | com.apple.security.scripting-targets
8 |
9 | com.apple.shortcuts.events
10 |
11 | com.apple.shortcuts.run
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Scripting Shortcuts Test Project
3 |
4 | This simple project is designed to test the new scripting capabilities introduced in the Shortcuts app in macOS Monterey beta 2 (21A5268h).
5 |
6 | ScriptingBridge demo code was shown in the ['Meet Shortcuts For macOS'][1] WWDC 2021 video along with [the entitlements][2] required to run it.
7 |
8 | An NSAppleEventsUsageDescription string is has to be added to info.plist or it will silently fail.
9 |
10 | 
11 | 
12 |
13 | [1]: https://developer.apple.com/videos/play/wwdc2021/10232/?time=1559
14 | [2]: https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AppSandboxTemporaryExceptionEntitlements.html#//apple_ref/doc/uid/TP40011195-CH5-SW1
15 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/Views/SidebarView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SidebarView.swift
3 | // ScriptingShortcuts
4 | //
5 | // Created by Alex Hay on 29/06/2021.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct SidebarView: View {
11 |
12 | @State var chosenNav: NavigationViewType? = .run
13 |
14 | var body: some View {
15 | NavigationView {
16 | List {
17 | NavigationLink("Run Shortcut", destination: RunShortcutView(), tag: .run, selection: $chosenNav)
18 | NavigationLink("List Shortcuts", destination: ListShortcutsView(), tag: .list, selection: $chosenNav)
19 | }
20 | .listStyle(SidebarListStyle())
21 | }
22 | }
23 |
24 | enum NavigationViewType: Hashable {
25 | case run
26 | case list
27 | }
28 | }
29 |
30 | struct SidebarView_Previews: PreviewProvider {
31 | static var previews: some View {
32 | SidebarView()
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/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 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/ShortcutsScriptingBridge.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RunShortcut.swift
3 | // ScriptingShortcuts
4 | //
5 | // Created by Alex Hay on 28/06/2021.
6 | //
7 |
8 | import ScriptingBridge
9 |
10 | @objc protocol ShortcutsEvents {
11 | @objc optional var shortcuts: SBElementArray { get }
12 | }
13 |
14 | @objc protocol Shortcut {
15 | @objc optional var name: String { get }
16 | @objc optional func run(withInput: Any?) -> Any?
17 | }
18 |
19 | extension SBApplication: ShortcutsEvents {}
20 | extension SBObject: Shortcut {}
21 |
22 | // MARK: RUN A SHORTCUT
23 | func runShortcut(name: String, input: String) -> String? {
24 | print("⚙️ Trying to run shortcut named '\(name)'...")
25 | guard
26 | let app: ShortcutsEvents = SBApplication(bundleIdentifier: "com.apple.shortcuts.events"),
27 | let shortcuts = app.shortcuts else {
28 | print("⛔️ Couldn't access shortcuts")
29 | return nil
30 | }
31 |
32 | guard let shortcut = shortcuts.object(withName: name) as? Shortcut else {
33 | print("⚠️ Shortcut doesn't exist")
34 | return nil
35 | }
36 |
37 | return shortcut.run?(withInput: input) as? String
38 | }
39 |
40 | // MARK: GET A LIST OF ALL SHORTCUTS IN THE LIBRARY
41 | func listShortcuts() -> [String] {
42 | print("⚙️ Trying to fetch the names of all shortcuts...")
43 | guard
44 | let app: ShortcutsEvents = SBApplication(bundleIdentifier: "com.apple.shortcuts.events"),
45 | let shortcuts = app.shortcuts else {
46 | print("⛔️ Couldn't access shortcuts")
47 | return []
48 | }
49 |
50 | let shortcutNames = shortcuts.compactMap({ ($0 as? Shortcut)?.name })
51 | return shortcutNames.sorted()
52 | }
53 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/Views/ListShortcutsView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ListShortcutsView.swift
3 | // ScriptingShortcuts
4 | //
5 | // Created by Alex Hay on 29/06/2021.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct ListShortcutsView: View {
11 |
12 | @State var shortcutNames: [String] = ["Test 1", "Test 2"]
13 |
14 | var body: some View {
15 | VStack(alignment: .leading) {
16 | ListDescriptionView()
17 | if shortcutNames.isEmpty { // Display a message if no shortcuts are listed
18 | HStack {
19 | Spacer()
20 | Text("Couldn't load shortcuts")
21 | .foregroundColor(.secondary)
22 | .font(.caption)
23 | .padding()
24 | .opacity(0.4)
25 | Spacer()
26 | }
27 | } else {
28 | List {
29 | ForEach(shortcutNames, id: \.self) { name in
30 | Button(action: {
31 | _ = runShortcut(name: name, input: "")
32 | }, label: {
33 | HStack {
34 | Image(systemName: "play.circle")
35 | Text(name)
36 | Spacer()
37 | }
38 | })
39 | .buttonStyle(.plain)
40 | }
41 | }
42 | }
43 | }
44 | .padding()
45 | Spacer()
46 | .task {
47 | // Try and load the names of all shortcuts
48 | //shortcutNames = listShortcuts()
49 | }
50 | }
51 | }
52 |
53 | struct ListDescriptionView: View {
54 |
55 | var body: some View {
56 | Text("List Test")
57 | .font(.largeTitle.bold())
58 | .padding(.bottom, 5)
59 | Text("The names of every shortcut in your library should be listed below.")
60 | .foregroundColor(.secondary)
61 | .font(.caption)
62 | }
63 | }
64 |
65 | struct ListShortcutsView_Previews: PreviewProvider {
66 | static var previews: some View {
67 | ListShortcutsView()
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/ScriptingShortcuts/Views/RunShortcutView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // ScriptingShortcuts
4 | //
5 | // Created by Alex Hay on 28/06/2021.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct RunShortcutView: View {
11 |
12 | @State var output = ""
13 |
14 | var body: some View {
15 | VStack(alignment: .leading) {
16 | RunDescriptionView()
17 | TextEntryView(output: $output)
18 | OutputView(output: $output)
19 | Spacer()
20 | }
21 | .padding()
22 | }
23 | }
24 |
25 | struct RunDescriptionView: View {
26 |
27 | var body: some View {
28 | Text("Run Test")
29 | .font(.largeTitle.bold())
30 | .padding(.bottom, 5)
31 | Text("Enter the name of a shortcut in your library below. Hit the button to run it.")
32 | .foregroundColor(.secondary)
33 | .font(.caption)
34 | }
35 | }
36 |
37 | struct TextEntryView: View {
38 |
39 | @State var shortcutName = ""
40 | @Binding var output: String
41 | @State var showingAlert = false
42 |
43 | var body: some View {
44 | VStack {
45 | TextField("Shortcut Name", text: $shortcutName)
46 | HStack {
47 | Spacer()
48 | Button(action: {
49 | if let newOutput = runShortcut(name: shortcutName, input: "") {
50 | output = newOutput
51 | } else {
52 | // Present an alert if there's no output from the shortcut
53 | showingAlert.toggle()
54 | }
55 | }, label: {
56 | Text("Run Shortcut")
57 | })
58 | }
59 | }
60 | .padding(.vertical)
61 | .alert("There was no output from the shortcut '\(shortcutName)'", isPresented: $showingAlert) {
62 | Button("OK", role: .cancel) { }
63 | }
64 | }
65 | }
66 |
67 | struct OutputView: View {
68 |
69 | @Binding var output: String
70 |
71 | var body: some View {
72 |
73 | // Display shortcut output if there is any
74 | if output != "" {
75 | GroupBox(label: Text("Output")) {
76 | Text(output)
77 | }
78 | }
79 | }
80 | }
81 |
82 | struct RunShortcutView_Previews: PreviewProvider {
83 | static var previews: some View {
84 | RunShortcutView()
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/ScriptingShortcuts.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 8C2B52B5268A82DB00C9DCD6 /* ScriptingShortcutsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B52B4268A82DB00C9DCD6 /* ScriptingShortcutsApp.swift */; };
11 | 8C2B52B7268A82DB00C9DCD6 /* RunShortcutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B52B6268A82DB00C9DCD6 /* RunShortcutView.swift */; };
12 | 8C2B52B9268A82DB00C9DCD6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C2B52B8268A82DB00C9DCD6 /* Assets.xcassets */; };
13 | 8C2B52BC268A82DB00C9DCD6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C2B52BB268A82DB00C9DCD6 /* Preview Assets.xcassets */; };
14 | 8C2B52C4268A836500C9DCD6 /* ShortcutsScriptingBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B52C3268A836500C9DCD6 /* ShortcutsScriptingBridge.swift */; };
15 | 8C2B52C6268A8CD600C9DCD6 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 8C2B52C5268A8CD600C9DCD6 /* README.md */; };
16 | 8C2B52C8268A904F00C9DCD6 /* ListShortcutsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B52C7268A904F00C9DCD6 /* ListShortcutsView.swift */; };
17 | 8C2B52CA268A95D500C9DCD6 /* SidebarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B52C9268A95D500C9DCD6 /* SidebarView.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 8C2B52B1268A82DB00C9DCD6 /* ScriptingShortcuts.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScriptingShortcuts.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 8C2B52B4268A82DB00C9DCD6 /* ScriptingShortcutsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptingShortcutsApp.swift; sourceTree = ""; };
23 | 8C2B52B6268A82DB00C9DCD6 /* RunShortcutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunShortcutView.swift; sourceTree = ""; };
24 | 8C2B52B8268A82DB00C9DCD6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
25 | 8C2B52BB268A82DB00C9DCD6 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
26 | 8C2B52C2268A82EB00C9DCD6 /* ScriptingShortcuts.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ScriptingShortcuts.entitlements; sourceTree = ""; };
27 | 8C2B52C3268A836500C9DCD6 /* ShortcutsScriptingBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsScriptingBridge.swift; sourceTree = ""; };
28 | 8C2B52C5268A8CD600C9DCD6 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
29 | 8C2B52C7268A904F00C9DCD6 /* ListShortcutsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListShortcutsView.swift; sourceTree = ""; };
30 | 8C2B52C9268A95D500C9DCD6 /* SidebarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarView.swift; sourceTree = ""; };
31 | /* End PBXFileReference section */
32 |
33 | /* Begin PBXFrameworksBuildPhase section */
34 | 8C2B52AE268A82DB00C9DCD6 /* Frameworks */ = {
35 | isa = PBXFrameworksBuildPhase;
36 | buildActionMask = 2147483647;
37 | files = (
38 | );
39 | runOnlyForDeploymentPostprocessing = 0;
40 | };
41 | /* End PBXFrameworksBuildPhase section */
42 |
43 | /* Begin PBXGroup section */
44 | 8C2B52A8268A82DB00C9DCD6 = {
45 | isa = PBXGroup;
46 | children = (
47 | 8C2B52B3268A82DB00C9DCD6 /* ScriptingShortcuts */,
48 | 8C2B52B2268A82DB00C9DCD6 /* Products */,
49 | );
50 | sourceTree = "";
51 | };
52 | 8C2B52B2268A82DB00C9DCD6 /* Products */ = {
53 | isa = PBXGroup;
54 | children = (
55 | 8C2B52B1268A82DB00C9DCD6 /* ScriptingShortcuts.app */,
56 | );
57 | name = Products;
58 | sourceTree = "";
59 | };
60 | 8C2B52B3268A82DB00C9DCD6 /* ScriptingShortcuts */ = {
61 | isa = PBXGroup;
62 | children = (
63 | 8C2B52C5268A8CD600C9DCD6 /* README.md */,
64 | 8C2B52C2268A82EB00C9DCD6 /* ScriptingShortcuts.entitlements */,
65 | 8C2B52B4268A82DB00C9DCD6 /* ScriptingShortcutsApp.swift */,
66 | 8C2B52CB268A96FE00C9DCD6 /* Views */,
67 | 8C2B52C3268A836500C9DCD6 /* ShortcutsScriptingBridge.swift */,
68 | 8C2B52B8268A82DB00C9DCD6 /* Assets.xcassets */,
69 | 8C2B52BA268A82DB00C9DCD6 /* Preview Content */,
70 | );
71 | path = ScriptingShortcuts;
72 | sourceTree = "";
73 | };
74 | 8C2B52BA268A82DB00C9DCD6 /* Preview Content */ = {
75 | isa = PBXGroup;
76 | children = (
77 | 8C2B52BB268A82DB00C9DCD6 /* Preview Assets.xcassets */,
78 | );
79 | path = "Preview Content";
80 | sourceTree = "";
81 | };
82 | 8C2B52CB268A96FE00C9DCD6 /* Views */ = {
83 | isa = PBXGroup;
84 | children = (
85 | 8C2B52C9268A95D500C9DCD6 /* SidebarView.swift */,
86 | 8C2B52B6268A82DB00C9DCD6 /* RunShortcutView.swift */,
87 | 8C2B52C7268A904F00C9DCD6 /* ListShortcutsView.swift */,
88 | );
89 | path = Views;
90 | sourceTree = "";
91 | };
92 | /* End PBXGroup section */
93 |
94 | /* Begin PBXNativeTarget section */
95 | 8C2B52B0268A82DB00C9DCD6 /* ScriptingShortcuts */ = {
96 | isa = PBXNativeTarget;
97 | buildConfigurationList = 8C2B52BF268A82DB00C9DCD6 /* Build configuration list for PBXNativeTarget "ScriptingShortcuts" */;
98 | buildPhases = (
99 | 8C2B52AD268A82DB00C9DCD6 /* Sources */,
100 | 8C2B52AE268A82DB00C9DCD6 /* Frameworks */,
101 | 8C2B52AF268A82DB00C9DCD6 /* Resources */,
102 | );
103 | buildRules = (
104 | );
105 | dependencies = (
106 | );
107 | name = ScriptingShortcuts;
108 | productName = ScriptingShortcuts;
109 | productReference = 8C2B52B1268A82DB00C9DCD6 /* ScriptingShortcuts.app */;
110 | productType = "com.apple.product-type.application";
111 | };
112 | /* End PBXNativeTarget section */
113 |
114 | /* Begin PBXProject section */
115 | 8C2B52A9268A82DB00C9DCD6 /* Project object */ = {
116 | isa = PBXProject;
117 | attributes = {
118 | BuildIndependentTargetsInParallel = 1;
119 | LastSwiftUpdateCheck = 1300;
120 | LastUpgradeCheck = 1300;
121 | TargetAttributes = {
122 | 8C2B52B0268A82DB00C9DCD6 = {
123 | CreatedOnToolsVersion = 13.0;
124 | };
125 | };
126 | };
127 | buildConfigurationList = 8C2B52AC268A82DB00C9DCD6 /* Build configuration list for PBXProject "ScriptingShortcuts" */;
128 | compatibilityVersion = "Xcode 13.0";
129 | developmentRegion = en;
130 | hasScannedForEncodings = 0;
131 | knownRegions = (
132 | en,
133 | Base,
134 | );
135 | mainGroup = 8C2B52A8268A82DB00C9DCD6;
136 | productRefGroup = 8C2B52B2268A82DB00C9DCD6 /* Products */;
137 | projectDirPath = "";
138 | projectRoot = "";
139 | targets = (
140 | 8C2B52B0268A82DB00C9DCD6 /* ScriptingShortcuts */,
141 | );
142 | };
143 | /* End PBXProject section */
144 |
145 | /* Begin PBXResourcesBuildPhase section */
146 | 8C2B52AF268A82DB00C9DCD6 /* Resources */ = {
147 | isa = PBXResourcesBuildPhase;
148 | buildActionMask = 2147483647;
149 | files = (
150 | 8C2B52C6268A8CD600C9DCD6 /* README.md in Resources */,
151 | 8C2B52BC268A82DB00C9DCD6 /* Preview Assets.xcassets in Resources */,
152 | 8C2B52B9268A82DB00C9DCD6 /* Assets.xcassets in Resources */,
153 | );
154 | runOnlyForDeploymentPostprocessing = 0;
155 | };
156 | /* End PBXResourcesBuildPhase section */
157 |
158 | /* Begin PBXSourcesBuildPhase section */
159 | 8C2B52AD268A82DB00C9DCD6 /* Sources */ = {
160 | isa = PBXSourcesBuildPhase;
161 | buildActionMask = 2147483647;
162 | files = (
163 | 8C2B52C8268A904F00C9DCD6 /* ListShortcutsView.swift in Sources */,
164 | 8C2B52B7268A82DB00C9DCD6 /* RunShortcutView.swift in Sources */,
165 | 8C2B52CA268A95D500C9DCD6 /* SidebarView.swift in Sources */,
166 | 8C2B52B5268A82DB00C9DCD6 /* ScriptingShortcutsApp.swift in Sources */,
167 | 8C2B52C4268A836500C9DCD6 /* ShortcutsScriptingBridge.swift in Sources */,
168 | );
169 | runOnlyForDeploymentPostprocessing = 0;
170 | };
171 | /* End PBXSourcesBuildPhase section */
172 |
173 | /* Begin XCBuildConfiguration section */
174 | 8C2B52BD268A82DB00C9DCD6 /* Debug */ = {
175 | isa = XCBuildConfiguration;
176 | buildSettings = {
177 | ALWAYS_SEARCH_USER_PATHS = NO;
178 | CLANG_ANALYZER_NONNULL = YES;
179 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
180 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
181 | CLANG_CXX_LIBRARY = "libc++";
182 | CLANG_ENABLE_MODULES = YES;
183 | CLANG_ENABLE_OBJC_ARC = YES;
184 | CLANG_ENABLE_OBJC_WEAK = YES;
185 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
186 | CLANG_WARN_BOOL_CONVERSION = YES;
187 | CLANG_WARN_COMMA = YES;
188 | CLANG_WARN_CONSTANT_CONVERSION = YES;
189 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
190 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
191 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
192 | CLANG_WARN_EMPTY_BODY = YES;
193 | CLANG_WARN_ENUM_CONVERSION = YES;
194 | CLANG_WARN_INFINITE_RECURSION = YES;
195 | CLANG_WARN_INT_CONVERSION = YES;
196 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
197 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
198 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
199 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
200 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
201 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
202 | CLANG_WARN_STRICT_PROTOTYPES = YES;
203 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
204 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
205 | CLANG_WARN_UNREACHABLE_CODE = YES;
206 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
207 | COPY_PHASE_STRIP = NO;
208 | DEBUG_INFORMATION_FORMAT = dwarf;
209 | ENABLE_STRICT_OBJC_MSGSEND = YES;
210 | ENABLE_TESTABILITY = YES;
211 | GCC_C_LANGUAGE_STANDARD = gnu11;
212 | GCC_DYNAMIC_NO_PIC = NO;
213 | GCC_NO_COMMON_BLOCKS = YES;
214 | GCC_OPTIMIZATION_LEVEL = 0;
215 | GCC_PREPROCESSOR_DEFINITIONS = (
216 | "DEBUG=1",
217 | "$(inherited)",
218 | );
219 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
220 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
221 | GCC_WARN_UNDECLARED_SELECTOR = YES;
222 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
223 | GCC_WARN_UNUSED_FUNCTION = YES;
224 | GCC_WARN_UNUSED_VARIABLE = YES;
225 | MACOSX_DEPLOYMENT_TARGET = 12.0;
226 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
227 | MTL_FAST_MATH = YES;
228 | ONLY_ACTIVE_ARCH = YES;
229 | SDKROOT = macosx;
230 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
231 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
232 | };
233 | name = Debug;
234 | };
235 | 8C2B52BE268A82DB00C9DCD6 /* Release */ = {
236 | isa = XCBuildConfiguration;
237 | buildSettings = {
238 | ALWAYS_SEARCH_USER_PATHS = NO;
239 | CLANG_ANALYZER_NONNULL = YES;
240 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
241 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
242 | CLANG_CXX_LIBRARY = "libc++";
243 | CLANG_ENABLE_MODULES = YES;
244 | CLANG_ENABLE_OBJC_ARC = YES;
245 | CLANG_ENABLE_OBJC_WEAK = YES;
246 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
247 | CLANG_WARN_BOOL_CONVERSION = YES;
248 | CLANG_WARN_COMMA = YES;
249 | CLANG_WARN_CONSTANT_CONVERSION = YES;
250 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
251 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
252 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
253 | CLANG_WARN_EMPTY_BODY = YES;
254 | CLANG_WARN_ENUM_CONVERSION = YES;
255 | CLANG_WARN_INFINITE_RECURSION = YES;
256 | CLANG_WARN_INT_CONVERSION = YES;
257 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
258 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
259 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
260 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
261 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
262 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
263 | CLANG_WARN_STRICT_PROTOTYPES = YES;
264 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
265 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
266 | CLANG_WARN_UNREACHABLE_CODE = YES;
267 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
268 | COPY_PHASE_STRIP = NO;
269 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
270 | ENABLE_NS_ASSERTIONS = NO;
271 | ENABLE_STRICT_OBJC_MSGSEND = YES;
272 | GCC_C_LANGUAGE_STANDARD = gnu11;
273 | GCC_NO_COMMON_BLOCKS = YES;
274 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
275 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
276 | GCC_WARN_UNDECLARED_SELECTOR = YES;
277 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
278 | GCC_WARN_UNUSED_FUNCTION = YES;
279 | GCC_WARN_UNUSED_VARIABLE = YES;
280 | MACOSX_DEPLOYMENT_TARGET = 12.0;
281 | MTL_ENABLE_DEBUG_INFO = NO;
282 | MTL_FAST_MATH = YES;
283 | SDKROOT = macosx;
284 | SWIFT_COMPILATION_MODE = wholemodule;
285 | SWIFT_OPTIMIZATION_LEVEL = "-O";
286 | };
287 | name = Release;
288 | };
289 | 8C2B52C0268A82DB00C9DCD6 /* Debug */ = {
290 | isa = XCBuildConfiguration;
291 | buildSettings = {
292 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
293 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
294 | CODE_SIGN_ENTITLEMENTS = ScriptingShortcuts/ScriptingShortcuts.entitlements;
295 | CODE_SIGN_STYLE = Automatic;
296 | COMBINE_HIDPI_IMAGES = YES;
297 | CURRENT_PROJECT_VERSION = 1;
298 | DEVELOPMENT_ASSET_PATHS = "\"ScriptingShortcuts/Preview Content\"";
299 | DEVELOPMENT_TEAM = NWHDL7X5B3;
300 | ENABLE_APP_SANDBOX = YES;
301 | ENABLE_HARDENED_RUNTIME = YES;
302 | ENABLE_PREVIEWS = YES;
303 | ENABLE_USER_SELECTED_FILES = readonly;
304 | GENERATE_INFOPLIST_FILE = YES;
305 | INFOPLIST_KEY_CFBundleExecutable = ScriptingShortcuts;
306 | INFOPLIST_KEY_CFBundleName = "Scripting Shortcuts";
307 | INFOPLIST_KEY_CFBundleVersion = 1;
308 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
309 | LD_RUNPATH_SEARCH_PATHS = (
310 | "$(inherited)",
311 | "@executable_path/../Frameworks",
312 | );
313 | MACOSX_DEPLOYMENT_TARGET = 12.0;
314 | MARKETING_VERSION = 1.0;
315 | PRODUCT_BUNDLE_IDENTIFIER = com.alexhay.ScriptingShortcuts;
316 | PRODUCT_NAME = "$(TARGET_NAME)";
317 | SWIFT_EMIT_LOC_STRINGS = YES;
318 | SWIFT_VERSION = 5.0;
319 | };
320 | name = Debug;
321 | };
322 | 8C2B52C1268A82DB00C9DCD6 /* Release */ = {
323 | isa = XCBuildConfiguration;
324 | buildSettings = {
325 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
326 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
327 | CODE_SIGN_ENTITLEMENTS = ScriptingShortcuts/ScriptingShortcuts.entitlements;
328 | CODE_SIGN_STYLE = Automatic;
329 | COMBINE_HIDPI_IMAGES = YES;
330 | CURRENT_PROJECT_VERSION = 1;
331 | DEVELOPMENT_ASSET_PATHS = "\"ScriptingShortcuts/Preview Content\"";
332 | DEVELOPMENT_TEAM = NWHDL7X5B3;
333 | ENABLE_APP_SANDBOX = YES;
334 | ENABLE_HARDENED_RUNTIME = YES;
335 | ENABLE_PREVIEWS = YES;
336 | ENABLE_USER_SELECTED_FILES = readonly;
337 | GENERATE_INFOPLIST_FILE = YES;
338 | INFOPLIST_KEY_CFBundleExecutable = ScriptingShortcuts;
339 | INFOPLIST_KEY_CFBundleName = "Scripting Shortcuts";
340 | INFOPLIST_KEY_CFBundleVersion = 1;
341 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
342 | LD_RUNPATH_SEARCH_PATHS = (
343 | "$(inherited)",
344 | "@executable_path/../Frameworks",
345 | );
346 | MACOSX_DEPLOYMENT_TARGET = 12.0;
347 | MARKETING_VERSION = 1.0;
348 | PRODUCT_BUNDLE_IDENTIFIER = com.alexhay.ScriptingShortcuts;
349 | PRODUCT_NAME = "$(TARGET_NAME)";
350 | SWIFT_EMIT_LOC_STRINGS = YES;
351 | SWIFT_VERSION = 5.0;
352 | };
353 | name = Release;
354 | };
355 | /* End XCBuildConfiguration section */
356 |
357 | /* Begin XCConfigurationList section */
358 | 8C2B52AC268A82DB00C9DCD6 /* Build configuration list for PBXProject "ScriptingShortcuts" */ = {
359 | isa = XCConfigurationList;
360 | buildConfigurations = (
361 | 8C2B52BD268A82DB00C9DCD6 /* Debug */,
362 | 8C2B52BE268A82DB00C9DCD6 /* Release */,
363 | );
364 | defaultConfigurationIsVisible = 0;
365 | defaultConfigurationName = Release;
366 | };
367 | 8C2B52BF268A82DB00C9DCD6 /* Build configuration list for PBXNativeTarget "ScriptingShortcuts" */ = {
368 | isa = XCConfigurationList;
369 | buildConfigurations = (
370 | 8C2B52C0268A82DB00C9DCD6 /* Debug */,
371 | 8C2B52C1268A82DB00C9DCD6 /* Release */,
372 | );
373 | defaultConfigurationIsVisible = 0;
374 | defaultConfigurationName = Release;
375 | };
376 | /* End XCConfigurationList section */
377 | };
378 | rootObject = 8C2B52A9268A82DB00C9DCD6 /* Project object */;
379 | }
380 |
--------------------------------------------------------------------------------