├── ShortcutsExampleiOS14
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── Data
│ └── People.swift
├── Views
│ └── PeopleViews.swift
├── ShortcutsExampleiOS14App.swift
├── Shortcuts
│ ├── Intent Handlers
│ │ ├── GetPeopleIntentHandler.swift
│ │ └── ViewPersonIntentHandler.swift
│ └── Intents.intentdefinition
└── Info.plist
├── ShortcutsExampleiOS14.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── alexhay.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── ReadME.md
└── LICENSE
/ShortcutsExampleiOS14/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/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 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14.xcodeproj/xcuserdata/alexhay.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ShortcutsExampleiOS14.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Data/People.swift:
--------------------------------------------------------------------------------
1 | //
2 | // People.swift
3 | // ShortcutsExampleiOS14
4 | //
5 | // Created by Alex Hay on 21/10/2020.
6 | //
7 |
8 | import SwiftUI
9 | import UIKit
10 |
11 | struct Person: Identifiable {
12 | var id: Int
13 | var name: String
14 | var job: String
15 | var iconName: String
16 | }
17 |
18 | let peopleArray: [Person] = [
19 | Person(id: 1, name: "Joe Bloggs", job: "Artist", iconName: "paintpalette"),
20 | Person(id: 2, name: "Peter Roberts", job: "Taxi Driver", iconName: "car"),
21 | Person(id: 3, name: "Sarah Love", job: "Author", iconName: "text.book.closed")
22 | ]
23 |
--------------------------------------------------------------------------------
/ReadME.md:
--------------------------------------------------------------------------------
1 | # Shortcuts Example Project
2 |
3 | A simple project demonstrating how to add new actions to Apple's Shortcuts app.
4 |
5 | ## Tutorial
6 |
7 | Step-by-step tutorials accompany this project:
8 |
9 | [Part 3](https://toolboxpro.app/blog/adding-shortcuts-to-an-app-part-three): *In-app intent handling, custom output types, visual list API and using the SwiftUI app protocol*
10 |
11 | [Part 4](https://toolboxpro.app/blog/adding-shortcuts-to-an-app-part-four): *Visual Lists in parameters and pushing data from Shortcuts into a SwiftUI view*
12 |
13 | The previous posts relate to [this project](https://github.com/mralexhay/ShortcutsExample) (iOS 13)
14 |
15 | [Part 1:](https://toolboxpro.app/blog/adding-shortcuts-to-an-app-1) *Creating a project and adding the first action*
16 |
17 | [Part 2:](https://toolboxpro.app/blog/adding-shortcuts-to-an-app-2) *Exploring parameters: arrays, enums, calculated lists and files*
18 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Alex Hay
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Views/PeopleViews.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PeopleViews.swift
3 | // ShortcutsExampleiOS14
4 | //
5 | // Created by Alex Hay on 21/10/2020.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct PeopleListView: View {
11 |
12 | var people = peopleArray
13 |
14 | var body: some View {
15 | NavigationView {
16 | List(people, id: \.id) { person in
17 | NavigationLink(
18 | destination: PersonDetailView(person: person, note: .constant("")), // Adding in a constant empty string here
19 | label: {
20 | Label(title: {
21 | VStack(alignment: .leading) {
22 | Text(person.name)
23 | Text(person.job)
24 | .foregroundColor(.secondary)
25 | .font(.caption)
26 | }
27 | }, icon: {
28 | Image(systemName: person.iconName)
29 | })
30 | })
31 | }
32 | .navigationBarTitle("People")
33 | }
34 |
35 | }
36 | }
37 |
38 | struct PersonDetailView: View {
39 |
40 | var person: Person
41 | @Binding var note: String
42 |
43 | var body: some View {
44 | List {
45 | HStack {
46 | Text("Job")
47 | .foregroundColor(.secondary)
48 | Spacer()
49 | Text(person.job)
50 | }
51 | HStack {
52 | Text("Icon")
53 | .foregroundColor(.secondary)
54 | Spacer()
55 | Image(systemName: person.iconName)
56 | }
57 | if note != "" {
58 | HStack {
59 | Text("Note")
60 | .foregroundColor(.secondary)
61 | Spacer()
62 | Text(note)
63 | }
64 | }
65 | }
66 | .navigationBarTitle(person.name)
67 | }
68 | }
69 |
70 | struct PeopleViews_Previews: PreviewProvider {
71 | static var previews: some View {
72 | PeopleListView()
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/ShortcutsExampleiOS14App.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ShortcutsExampleiOS14App.swift
3 | // ShortcutsExampleiOS14
4 | //
5 | // Created by Alex Hay on 21/10/2020.
6 | //
7 |
8 | import SwiftUI
9 | import Intents
10 |
11 | @main
12 | struct ShortcutsExampleiOS14App: App {
13 | @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
14 | @State var personToShow: Person? = nil // The person we'll pass in to our detail view
15 | @State var note: String = "" // The note we'll pass into our detail view
16 |
17 | var body: some Scene {
18 | WindowGroup {
19 | PeopleListView()
20 | .sheet(item: $personToShow) { person in
21 | NavigationView {
22 | PersonDetailView(person: person, note: $note)
23 | }
24 | }
25 | .onContinueUserActivity("com.alexhay.example.viewPerson") { userActivity in
26 | if let intent = userActivity.interaction?.intent as? ViewPersonIntent,
27 | let person = peopleArray.filter({ $0.name == intent.person?.displayString ?? "" }).first {
28 | note = intent.note ?? ""
29 | personToShow = person
30 | }
31 | }
32 | }
33 | }
34 |
35 | // This class lets us respond to intents in an iOS14 SwiftUI app
36 | class AppDelegate: UIResponder, UIApplicationDelegate {
37 | func application(_ application: UIApplication, handlerFor intent: INIntent) -> Any? {
38 |
39 | switch intent {
40 | // Call the appropriate intent handler
41 | case is GetPeopleIntent:
42 | return GetPeopleIntentHandler()
43 | case is ViewPersonIntent:
44 | return ViewPersonIntentHandler()
45 |
46 | default:
47 | return nil
48 | }
49 | }
50 | }
51 |
52 | }
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Shortcuts/Intent Handlers/GetPeopleIntentHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GetAllPeopleIntentHandler.swift
3 | // ShortcutsExampleiOS14
4 | //
5 | // Created by Alex Hay on 21/10/2020.
6 | //
7 |
8 | import Intents
9 | import UIKit
10 |
11 | class GetPeopleIntentHandler: NSObject, GetPeopleIntentHandling {
12 | func handle(intent: GetPeopleIntent, completion: @escaping (GetPeopleIntentResponse) -> Void) {
13 | // Define an empty array of our custom ShortcutsPerson type
14 | var resultArray = [ShortcutsPerson]()
15 | // Loop through our people array and add create new ShortcutsPerson objects which are added to our result array
16 | for person in peopleArray {
17 | // The new 'Visual List' API accepts an optional INImage thumbnail to display next to the display name in Shortcuts lists. Here, we're creating one from the SFSymbol names stored in our people array
18 | let thumbnail = INImage.systemImageNamed(person.iconName)
19 | let resultPerson = ShortcutsPerson(identifier: nil, display: person.name, subtitle: person.job, image: thumbnail)
20 | // Populate our ShortcutsPerson's properties
21 | resultPerson.job = person.job
22 | if let imageData = UIImage(systemName: person.iconName)?.jpegData(compressionQuality: 1.0) {
23 | resultPerson.image = INFile(data: imageData, filename: "\(person.name).jpg", typeIdentifier: "public.jpeg")
24 | } else {
25 | // We'll display an error if we can't create a UIImage from the person's iconName
26 | let errorResponse = GetPeopleIntentResponse.failure(error: "Couldn't create the user image for \(person.name). \"\(person.iconName)\" may not be a valid SFSymbol Name")
27 | completion(errorResponse)
28 | return
29 | }
30 | resultArray.append(resultPerson)
31 | }
32 | // We define a response marked as successful with the success code and add our result array to it
33 | let response = GetPeopleIntentResponse.init(code: .success, userActivity: nil)
34 | response.result = resultArray
35 | completion(response)
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Shortcuts Example
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
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 | CFBundleVersion
22 | 1
23 | INIntentsSupported
24 |
25 | GetPeopleIntent
26 | ViewPersonIntent
27 |
28 | LSRequiresIPhoneOS
29 |
30 | NSUserActivityTypes
31 |
32 | GetPeopleIntent
33 | ViewPersonIntent
34 |
35 | UIApplicationSceneManifest
36 |
37 | UIApplicationSupportsMultipleScenes
38 |
39 |
40 | UIApplicationSupportsIndirectInputEvents
41 |
42 | UILaunchScreen
43 |
44 | UIRequiredDeviceCapabilities
45 |
46 | armv7
47 |
48 | UISupportedInterfaceOrientations
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationLandscapeLeft
52 | UIInterfaceOrientationLandscapeRight
53 |
54 | UISupportedInterfaceOrientations~ipad
55 |
56 | UIInterfaceOrientationPortrait
57 | UIInterfaceOrientationPortraitUpsideDown
58 | UIInterfaceOrientationLandscapeLeft
59 | UIInterfaceOrientationLandscapeRight
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Shortcuts/Intent Handlers/ViewPersonIntentHandler.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewPersonIntentHandler.swift
3 | // ShortcutsExampleiOS14
4 | //
5 | // Created by Alex Hay on 21/10/2020.
6 | //
7 |
8 | import Intents
9 |
10 | class ViewPersonIntentHandler: NSObject, ViewPersonIntentHandling {
11 | func resolvePerson(for intent: ViewPersonIntent, with completion: @escaping (ViewPersonPersonResolutionResult) -> Void) {
12 | // Show an error if the user hasn't selected a person
13 | guard let person = intent.person else {
14 | completion(ViewPersonPersonResolutionResult.unsupported(forReason: .noPerson))
15 | return
16 | }
17 | completion(ViewPersonPersonResolutionResult.success(with: person))
18 | }
19 |
20 | func handle(intent: ViewPersonIntent, completion: @escaping (ViewPersonIntentResponse) -> Void) {
21 | let userActivity = NSUserActivity(activityType: "com.alexhay.example.viewPerson")
22 | completion(ViewPersonIntentResponse.init(code: .continueInApp, userActivity: userActivity))
23 | }
24 |
25 | func resolveNote(for intent: ViewPersonIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
26 | let noteString = intent.note ?? ""
27 | completion(INStringResolutionResult.success(with: noteString))
28 | }
29 |
30 | func providePersonOptionsCollection(for intent: ViewPersonIntent, with completion: @escaping (INObjectCollection?, Error?) -> Void) {
31 |
32 | // We'll convert our list of Person in the peopleArray to ShortcutsPeople along with subtitles and images which will be displayed in the shortcuts action's parameter list
33 | let shortcutsPeople: [ShortcutsPerson] = peopleArray.map { person in
34 | let shortcutsPerson = ShortcutsPerson(identifier: nil,
35 | display: person.name,
36 | pronunciationHint: nil,
37 | subtitle: person.job,
38 | image: INImage.systemImageNamed(person.iconName))
39 | return shortcutsPerson
40 | }
41 |
42 | // Create a collection with the array of ShortcutsPeople.
43 | let collection = INObjectCollection(items: shortcutsPeople)
44 |
45 | // Call the completion handler, passing the collection.
46 | completion(collection, nil)
47 | }
48 |
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14/Shortcuts/Intents.intentdefinition:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | INEnums
6 |
7 | INIntentDefinitionModelVersion
8 | 1.2
9 | INIntentDefinitionNamespace
10 | yhB35Z
11 | INIntentDefinitionSystemVersion
12 | 19H2
13 | INIntentDefinitionToolsBuildVersion
14 | 12A7300
15 | INIntentDefinitionToolsVersion
16 | 12.0.1
17 | INIntents
18 |
19 |
20 | INIntentCategory
21 | generic
22 | INIntentConfigurable
23 |
24 | INIntentDescription
25 | Get all people stored in the app
26 | INIntentDescriptionID
27 | kxTIvo
28 | INIntentIneligibleForSuggestions
29 |
30 | INIntentManagedParameterCombinations
31 |
32 |
33 |
34 | INIntentParameterCombinationSupportsBackgroundExecution
35 |
36 | INIntentParameterCombinationTitle
37 | Get all people
38 | INIntentParameterCombinationTitleID
39 | GyVhV2
40 | INIntentParameterCombinationUpdatesLinked
41 |
42 |
43 |
44 | INIntentName
45 | GetPeople
46 | INIntentResponse
47 |
48 | INIntentResponseCodes
49 |
50 |
51 | INIntentResponseCodeName
52 | success
53 | INIntentResponseCodeSuccess
54 |
55 |
56 |
57 | INIntentResponseCodeConciseFormatString
58 | An error occurred: ${error}
59 | INIntentResponseCodeConciseFormatStringID
60 | SNuI6x
61 | INIntentResponseCodeFormatString
62 | An error occurred: ${error}
63 | INIntentResponseCodeFormatStringID
64 | IjAOA7
65 | INIntentResponseCodeName
66 | failure
67 |
68 |
69 | INIntentResponseLastParameterTag
70 | 4
71 | INIntentResponseOutput
72 | result
73 | INIntentResponseParameters
74 |
75 |
76 | INIntentResponseParameterDisplayName
77 | People
78 | INIntentResponseParameterDisplayNameID
79 | lYCAR3
80 | INIntentResponseParameterDisplayPriority
81 | 1
82 | INIntentResponseParameterName
83 | result
84 | INIntentResponseParameterObjectType
85 | ShortcutsPerson
86 | INIntentResponseParameterObjectTypeNamespace
87 | yhB35Z
88 | INIntentResponseParameterSupportsMultipleValues
89 |
90 | INIntentResponseParameterTag
91 | 3
92 | INIntentResponseParameterType
93 | Object
94 |
95 |
96 | INIntentResponseParameterDisplayName
97 | Error
98 | INIntentResponseParameterDisplayNameID
99 | p67qaN
100 | INIntentResponseParameterDisplayPriority
101 | 2
102 | INIntentResponseParameterName
103 | error
104 | INIntentResponseParameterTag
105 | 4
106 | INIntentResponseParameterType
107 | String
108 |
109 |
110 |
111 | INIntentTitle
112 | Get People
113 | INIntentTitleID
114 | CwAkqp
115 | INIntentType
116 | Custom
117 | INIntentVerb
118 | Do
119 |
120 |
121 | INIntentCategory
122 | generic
123 | INIntentConfigurable
124 |
125 | INIntentDescription
126 | Show the person in the app
127 | INIntentDescriptionID
128 | oTUyle
129 | INIntentIneligibleForSuggestions
130 |
131 | INIntentLastParameterTag
132 | 3
133 | INIntentManagedParameterCombinations
134 |
135 | person,note
136 |
137 | INIntentParameterCombinationSupportsBackgroundExecution
138 |
139 | INIntentParameterCombinationTitle
140 | View ${person} in app and add ${note}
141 | INIntentParameterCombinationTitleID
142 | Ahab2S
143 | INIntentParameterCombinationUpdatesLinked
144 |
145 |
146 |
147 | INIntentName
148 | ViewPerson
149 | INIntentParameters
150 |
151 |
152 | INIntentParameterConfigurable
153 |
154 | INIntentParameterCustomDisambiguation
155 |
156 | INIntentParameterDisplayName
157 | Person
158 | INIntentParameterDisplayNameID
159 | bVvfsX
160 | INIntentParameterDisplayPriority
161 | 1
162 | INIntentParameterName
163 | person
164 | INIntentParameterObjectType
165 | ShortcutsPerson
166 | INIntentParameterObjectTypeNamespace
167 | yhB35Z
168 | INIntentParameterPromptDialogs
169 |
170 |
171 | INIntentParameterPromptDialogCustom
172 |
173 | INIntentParameterPromptDialogType
174 | Configuration
175 |
176 |
177 | INIntentParameterPromptDialogCustom
178 |
179 | INIntentParameterPromptDialogType
180 | Primary
181 |
182 |
183 | INIntentParameterPromptDialogCustom
184 |
185 | INIntentParameterPromptDialogFormatString
186 | There are ${count} options matching ‘${person}’.
187 | INIntentParameterPromptDialogFormatStringID
188 | qtdWcm
189 | INIntentParameterPromptDialogType
190 | DisambiguationIntroduction
191 |
192 |
193 | INIntentParameterPromptDialogCustom
194 |
195 | INIntentParameterPromptDialogFormatString
196 | Just to confirm, you wanted ‘${person}’?
197 | INIntentParameterPromptDialogFormatStringID
198 | dQfjMh
199 | INIntentParameterPromptDialogType
200 | Confirmation
201 |
202 |
203 | INIntentParameterSupportsDynamicEnumeration
204 |
205 | INIntentParameterSupportsResolution
206 |
207 | INIntentParameterTag
208 | 2
209 | INIntentParameterType
210 | Object
211 | INIntentParameterUnsupportedReasons
212 |
213 |
214 | INIntentParameterUnsupportedReasonCode
215 | noPerson
216 | INIntentParameterUnsupportedReasonCustom
217 |
218 | INIntentParameterUnsupportedReasonFormatString
219 | Please select a person to view
220 | INIntentParameterUnsupportedReasonFormatStringID
221 | fzIAJl
222 |
223 |
224 |
225 |
226 | INIntentParameterConfigurable
227 |
228 | INIntentParameterDisplayName
229 | Note
230 | INIntentParameterDisplayNameID
231 | NA91Sa
232 | INIntentParameterDisplayPriority
233 | 2
234 | INIntentParameterMetadata
235 |
236 | INIntentParameterMetadataCapitalization
237 | Sentences
238 | INIntentParameterMetadataDefaultValueID
239 | 2HBV8f
240 |
241 | INIntentParameterName
242 | note
243 | INIntentParameterPromptDialogs
244 |
245 |
246 | INIntentParameterPromptDialogCustom
247 |
248 | INIntentParameterPromptDialogType
249 | Configuration
250 |
251 |
252 | INIntentParameterPromptDialogCustom
253 |
254 | INIntentParameterPromptDialogFormatString
255 | Would you like to add a note to the view?
256 | INIntentParameterPromptDialogFormatStringID
257 | uVgmKa
258 | INIntentParameterPromptDialogType
259 | Primary
260 |
261 |
262 | INIntentParameterSupportsResolution
263 |
264 | INIntentParameterTag
265 | 3
266 | INIntentParameterType
267 | String
268 |
269 |
270 | INIntentResponse
271 |
272 | INIntentResponseCodes
273 |
274 |
275 | INIntentResponseCodeName
276 | success
277 | INIntentResponseCodeSuccess
278 |
279 |
280 |
281 | INIntentResponseCodeConciseFormatString
282 | An error occurred: ${error}
283 | INIntentResponseCodeConciseFormatStringID
284 | 0El81B
285 | INIntentResponseCodeFormatString
286 | An error occurred: ${error}
287 | INIntentResponseCodeFormatStringID
288 | ozR0GX
289 | INIntentResponseCodeName
290 | failure
291 |
292 |
293 | INIntentResponseLastParameterTag
294 | 1
295 | INIntentResponseParameters
296 |
297 |
298 | INIntentResponseParameterDisplayName
299 | Error
300 | INIntentResponseParameterDisplayNameID
301 | expbiU
302 | INIntentResponseParameterDisplayPriority
303 | 1
304 | INIntentResponseParameterName
305 | error
306 | INIntentResponseParameterTag
307 | 1
308 | INIntentResponseParameterType
309 | String
310 |
311 |
312 |
313 | INIntentTitle
314 | View Person
315 | INIntentTitleID
316 | kHbKQD
317 | INIntentType
318 | Custom
319 | INIntentVerb
320 | Do
321 |
322 |
323 | INTypes
324 |
325 |
326 | INTypeDisplayName
327 | Person
328 | INTypeDisplayNameID
329 | tpArRX
330 | INTypeLastPropertyTag
331 | 103
332 | INTypeName
333 | ShortcutsPerson
334 | INTypeProperties
335 |
336 |
337 | INTypePropertyDefault
338 |
339 | INTypePropertyDisplayPriority
340 | 1
341 | INTypePropertyName
342 | identifier
343 | INTypePropertyTag
344 | 1
345 | INTypePropertyType
346 | String
347 |
348 |
349 | INTypePropertyDefault
350 |
351 | INTypePropertyDisplayPriority
352 | 2
353 | INTypePropertyName
354 | displayString
355 | INTypePropertyTag
356 | 2
357 | INTypePropertyType
358 | String
359 |
360 |
361 | INTypePropertyDefault
362 |
363 | INTypePropertyDisplayPriority
364 | 3
365 | INTypePropertyName
366 | pronunciationHint
367 | INTypePropertyTag
368 | 3
369 | INTypePropertyType
370 | String
371 |
372 |
373 | INTypePropertyDefault
374 |
375 | INTypePropertyDisplayPriority
376 | 4
377 | INTypePropertyName
378 | alternativeSpeakableMatches
379 | INTypePropertySupportsMultipleValues
380 |
381 | INTypePropertyTag
382 | 4
383 | INTypePropertyType
384 | SpeakableString
385 |
386 |
387 | INTypePropertyDisplayName
388 | Job
389 | INTypePropertyDisplayNameID
390 | m3pQrd
391 | INTypePropertyDisplayPriority
392 | 5
393 | INTypePropertyName
394 | job
395 | INTypePropertyTag
396 | 101
397 | INTypePropertyType
398 | String
399 |
400 |
401 | INTypePropertyDisplayName
402 | Image
403 | INTypePropertyDisplayNameID
404 | As4Mju
405 | INTypePropertyDisplayPriority
406 | 6
407 | INTypePropertyName
408 | image
409 | INTypePropertyTag
410 | 103
411 | INTypePropertyType
412 | File
413 |
414 |
415 |
416 |
417 |
418 |
419 |
--------------------------------------------------------------------------------
/ShortcutsExampleiOS14.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 8C39B7082540269E00DE2F1F /* ShortcutsExampleiOS14App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B7072540269E00DE2F1F /* ShortcutsExampleiOS14App.swift */; };
11 | 8C39B70C254026A100DE2F1F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C39B70B254026A100DE2F1F /* Assets.xcassets */; };
12 | 8C39B70F254026A100DE2F1F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8C39B70E254026A100DE2F1F /* Preview Assets.xcassets */; };
13 | 8C39B7182540295400DE2F1F /* People.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B7172540295400DE2F1F /* People.swift */; };
14 | 8C39B71B254032F900DE2F1F /* PeopleViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B71A254032F900DE2F1F /* PeopleViews.swift */; };
15 | 8C39B71F2540394900DE2F1F /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B71E2540394900DE2F1F /* Intents.intentdefinition */; };
16 | 8C39B7282540437300DE2F1F /* GetPeopleIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B7272540437300DE2F1F /* GetPeopleIntentHandler.swift */; };
17 | 8C39B73B2540A6F900DE2F1F /* ViewPersonIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C39B73A2540A6F900DE2F1F /* ViewPersonIntentHandler.swift */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 8C39B7042540269E00DE2F1F /* ShortcutsExampleiOS14.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShortcutsExampleiOS14.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 8C39B7072540269E00DE2F1F /* ShortcutsExampleiOS14App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsExampleiOS14App.swift; sourceTree = ""; };
23 | 8C39B70B254026A100DE2F1F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
24 | 8C39B70E254026A100DE2F1F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
25 | 8C39B710254026A100DE2F1F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
26 | 8C39B7172540295400DE2F1F /* People.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = People.swift; sourceTree = ""; };
27 | 8C39B71A254032F900DE2F1F /* PeopleViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeopleViews.swift; sourceTree = ""; };
28 | 8C39B71E2540394900DE2F1F /* Intents.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = Intents.intentdefinition; sourceTree = ""; };
29 | 8C39B7272540437300DE2F1F /* GetPeopleIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetPeopleIntentHandler.swift; sourceTree = ""; };
30 | 8C39B73A2540A6F900DE2F1F /* ViewPersonIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewPersonIntentHandler.swift; sourceTree = ""; };
31 | /* End PBXFileReference section */
32 |
33 | /* Begin PBXFrameworksBuildPhase section */
34 | 8C39B7012540269E00DE2F1F /* Frameworks */ = {
35 | isa = PBXFrameworksBuildPhase;
36 | buildActionMask = 2147483647;
37 | files = (
38 | );
39 | runOnlyForDeploymentPostprocessing = 0;
40 | };
41 | /* End PBXFrameworksBuildPhase section */
42 |
43 | /* Begin PBXGroup section */
44 | 8C39B6FB2540269E00DE2F1F = {
45 | isa = PBXGroup;
46 | children = (
47 | 8C39B7062540269E00DE2F1F /* ShortcutsExampleiOS14 */,
48 | 8C39B7052540269E00DE2F1F /* Products */,
49 | );
50 | sourceTree = "";
51 | };
52 | 8C39B7052540269E00DE2F1F /* Products */ = {
53 | isa = PBXGroup;
54 | children = (
55 | 8C39B7042540269E00DE2F1F /* ShortcutsExampleiOS14.app */,
56 | );
57 | name = Products;
58 | sourceTree = "";
59 | };
60 | 8C39B7062540269E00DE2F1F /* ShortcutsExampleiOS14 */ = {
61 | isa = PBXGroup;
62 | children = (
63 | 8C39B7072540269E00DE2F1F /* ShortcutsExampleiOS14App.swift */,
64 | 8C39B72E254043B000DE2F1F /* Shortcuts */,
65 | 8C39B72D2540439500DE2F1F /* Views */,
66 | 8C39B72C2540438800DE2F1F /* Data */,
67 | 8C39B70B254026A100DE2F1F /* Assets.xcassets */,
68 | 8C39B710254026A100DE2F1F /* Info.plist */,
69 | 8C39B70D254026A100DE2F1F /* Preview Content */,
70 | );
71 | path = ShortcutsExampleiOS14;
72 | sourceTree = "";
73 | };
74 | 8C39B70D254026A100DE2F1F /* Preview Content */ = {
75 | isa = PBXGroup;
76 | children = (
77 | 8C39B70E254026A100DE2F1F /* Preview Assets.xcassets */,
78 | );
79 | path = "Preview Content";
80 | sourceTree = "";
81 | };
82 | 8C39B72B2540437A00DE2F1F /* Intent Handlers */ = {
83 | isa = PBXGroup;
84 | children = (
85 | 8C39B7272540437300DE2F1F /* GetPeopleIntentHandler.swift */,
86 | 8C39B73A2540A6F900DE2F1F /* ViewPersonIntentHandler.swift */,
87 | );
88 | path = "Intent Handlers";
89 | sourceTree = "";
90 | };
91 | 8C39B72C2540438800DE2F1F /* Data */ = {
92 | isa = PBXGroup;
93 | children = (
94 | 8C39B7172540295400DE2F1F /* People.swift */,
95 | );
96 | path = Data;
97 | sourceTree = "";
98 | };
99 | 8C39B72D2540439500DE2F1F /* Views */ = {
100 | isa = PBXGroup;
101 | children = (
102 | 8C39B71A254032F900DE2F1F /* PeopleViews.swift */,
103 | );
104 | path = Views;
105 | sourceTree = "";
106 | };
107 | 8C39B72E254043B000DE2F1F /* Shortcuts */ = {
108 | isa = PBXGroup;
109 | children = (
110 | 8C39B71E2540394900DE2F1F /* Intents.intentdefinition */,
111 | 8C39B72B2540437A00DE2F1F /* Intent Handlers */,
112 | );
113 | path = Shortcuts;
114 | sourceTree = "";
115 | };
116 | /* End PBXGroup section */
117 |
118 | /* Begin PBXNativeTarget section */
119 | 8C39B7032540269E00DE2F1F /* ShortcutsExampleiOS14 */ = {
120 | isa = PBXNativeTarget;
121 | buildConfigurationList = 8C39B713254026A100DE2F1F /* Build configuration list for PBXNativeTarget "ShortcutsExampleiOS14" */;
122 | buildPhases = (
123 | 8C39B7002540269E00DE2F1F /* Sources */,
124 | 8C39B7012540269E00DE2F1F /* Frameworks */,
125 | 8C39B7022540269E00DE2F1F /* Resources */,
126 | );
127 | buildRules = (
128 | );
129 | dependencies = (
130 | );
131 | name = ShortcutsExampleiOS14;
132 | productName = ShortcutsExampleiOS14;
133 | productReference = 8C39B7042540269E00DE2F1F /* ShortcutsExampleiOS14.app */;
134 | productType = "com.apple.product-type.application";
135 | };
136 | /* End PBXNativeTarget section */
137 |
138 | /* Begin PBXProject section */
139 | 8C39B6FC2540269E00DE2F1F /* Project object */ = {
140 | isa = PBXProject;
141 | attributes = {
142 | LastSwiftUpdateCheck = 1200;
143 | LastUpgradeCheck = 1200;
144 | TargetAttributes = {
145 | 8C39B7032540269E00DE2F1F = {
146 | CreatedOnToolsVersion = 12.0.1;
147 | };
148 | };
149 | };
150 | buildConfigurationList = 8C39B6FF2540269E00DE2F1F /* Build configuration list for PBXProject "ShortcutsExampleiOS14" */;
151 | compatibilityVersion = "Xcode 9.3";
152 | developmentRegion = en;
153 | hasScannedForEncodings = 0;
154 | knownRegions = (
155 | en,
156 | Base,
157 | );
158 | mainGroup = 8C39B6FB2540269E00DE2F1F;
159 | productRefGroup = 8C39B7052540269E00DE2F1F /* Products */;
160 | projectDirPath = "";
161 | projectRoot = "";
162 | targets = (
163 | 8C39B7032540269E00DE2F1F /* ShortcutsExampleiOS14 */,
164 | );
165 | };
166 | /* End PBXProject section */
167 |
168 | /* Begin PBXResourcesBuildPhase section */
169 | 8C39B7022540269E00DE2F1F /* Resources */ = {
170 | isa = PBXResourcesBuildPhase;
171 | buildActionMask = 2147483647;
172 | files = (
173 | 8C39B70F254026A100DE2F1F /* Preview Assets.xcassets in Resources */,
174 | 8C39B70C254026A100DE2F1F /* Assets.xcassets in Resources */,
175 | );
176 | runOnlyForDeploymentPostprocessing = 0;
177 | };
178 | /* End PBXResourcesBuildPhase section */
179 |
180 | /* Begin PBXSourcesBuildPhase section */
181 | 8C39B7002540269E00DE2F1F /* Sources */ = {
182 | isa = PBXSourcesBuildPhase;
183 | buildActionMask = 2147483647;
184 | files = (
185 | 8C39B7182540295400DE2F1F /* People.swift in Sources */,
186 | 8C39B7082540269E00DE2F1F /* ShortcutsExampleiOS14App.swift in Sources */,
187 | 8C39B73B2540A6F900DE2F1F /* ViewPersonIntentHandler.swift in Sources */,
188 | 8C39B71F2540394900DE2F1F /* Intents.intentdefinition in Sources */,
189 | 8C39B7282540437300DE2F1F /* GetPeopleIntentHandler.swift in Sources */,
190 | 8C39B71B254032F900DE2F1F /* PeopleViews.swift in Sources */,
191 | );
192 | runOnlyForDeploymentPostprocessing = 0;
193 | };
194 | /* End PBXSourcesBuildPhase section */
195 |
196 | /* Begin XCBuildConfiguration section */
197 | 8C39B711254026A100DE2F1F /* Debug */ = {
198 | isa = XCBuildConfiguration;
199 | buildSettings = {
200 | ALWAYS_SEARCH_USER_PATHS = NO;
201 | CLANG_ANALYZER_NONNULL = YES;
202 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
203 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
204 | CLANG_CXX_LIBRARY = "libc++";
205 | CLANG_ENABLE_MODULES = YES;
206 | CLANG_ENABLE_OBJC_ARC = YES;
207 | CLANG_ENABLE_OBJC_WEAK = YES;
208 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
209 | CLANG_WARN_BOOL_CONVERSION = YES;
210 | CLANG_WARN_COMMA = YES;
211 | CLANG_WARN_CONSTANT_CONVERSION = YES;
212 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
213 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
214 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
215 | CLANG_WARN_EMPTY_BODY = YES;
216 | CLANG_WARN_ENUM_CONVERSION = YES;
217 | CLANG_WARN_INFINITE_RECURSION = YES;
218 | CLANG_WARN_INT_CONVERSION = YES;
219 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
220 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
221 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
222 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
223 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
224 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
225 | CLANG_WARN_STRICT_PROTOTYPES = YES;
226 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
227 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
228 | CLANG_WARN_UNREACHABLE_CODE = YES;
229 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
230 | COPY_PHASE_STRIP = NO;
231 | DEBUG_INFORMATION_FORMAT = dwarf;
232 | ENABLE_STRICT_OBJC_MSGSEND = YES;
233 | ENABLE_TESTABILITY = YES;
234 | GCC_C_LANGUAGE_STANDARD = gnu11;
235 | GCC_DYNAMIC_NO_PIC = NO;
236 | GCC_NO_COMMON_BLOCKS = YES;
237 | GCC_OPTIMIZATION_LEVEL = 0;
238 | GCC_PREPROCESSOR_DEFINITIONS = (
239 | "DEBUG=1",
240 | "$(inherited)",
241 | );
242 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
243 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
244 | GCC_WARN_UNDECLARED_SELECTOR = YES;
245 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
246 | GCC_WARN_UNUSED_FUNCTION = YES;
247 | GCC_WARN_UNUSED_VARIABLE = YES;
248 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
249 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
250 | MTL_FAST_MATH = YES;
251 | ONLY_ACTIVE_ARCH = YES;
252 | SDKROOT = iphoneos;
253 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
254 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
255 | };
256 | name = Debug;
257 | };
258 | 8C39B712254026A100DE2F1F /* Release */ = {
259 | isa = XCBuildConfiguration;
260 | buildSettings = {
261 | ALWAYS_SEARCH_USER_PATHS = NO;
262 | CLANG_ANALYZER_NONNULL = YES;
263 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
264 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
265 | CLANG_CXX_LIBRARY = "libc++";
266 | CLANG_ENABLE_MODULES = YES;
267 | CLANG_ENABLE_OBJC_ARC = YES;
268 | CLANG_ENABLE_OBJC_WEAK = YES;
269 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
270 | CLANG_WARN_BOOL_CONVERSION = YES;
271 | CLANG_WARN_COMMA = YES;
272 | CLANG_WARN_CONSTANT_CONVERSION = YES;
273 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
274 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
275 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
276 | CLANG_WARN_EMPTY_BODY = YES;
277 | CLANG_WARN_ENUM_CONVERSION = YES;
278 | CLANG_WARN_INFINITE_RECURSION = YES;
279 | CLANG_WARN_INT_CONVERSION = YES;
280 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
281 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
282 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
283 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
284 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
285 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
286 | CLANG_WARN_STRICT_PROTOTYPES = YES;
287 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
288 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
289 | CLANG_WARN_UNREACHABLE_CODE = YES;
290 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
291 | COPY_PHASE_STRIP = NO;
292 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
293 | ENABLE_NS_ASSERTIONS = NO;
294 | ENABLE_STRICT_OBJC_MSGSEND = YES;
295 | GCC_C_LANGUAGE_STANDARD = gnu11;
296 | GCC_NO_COMMON_BLOCKS = YES;
297 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
298 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
299 | GCC_WARN_UNDECLARED_SELECTOR = YES;
300 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
301 | GCC_WARN_UNUSED_FUNCTION = YES;
302 | GCC_WARN_UNUSED_VARIABLE = YES;
303 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
304 | MTL_ENABLE_DEBUG_INFO = NO;
305 | MTL_FAST_MATH = YES;
306 | SDKROOT = iphoneos;
307 | SWIFT_COMPILATION_MODE = wholemodule;
308 | SWIFT_OPTIMIZATION_LEVEL = "-O";
309 | VALIDATE_PRODUCT = YES;
310 | };
311 | name = Release;
312 | };
313 | 8C39B714254026A100DE2F1F /* Debug */ = {
314 | isa = XCBuildConfiguration;
315 | buildSettings = {
316 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
317 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
318 | CODE_SIGN_STYLE = Automatic;
319 | DEVELOPMENT_ASSET_PATHS = "\"ShortcutsExampleiOS14/Preview Content\"";
320 | DEVELOPMENT_TEAM = NWHDL7X5B3;
321 | ENABLE_PREVIEWS = YES;
322 | INFOPLIST_FILE = ShortcutsExampleiOS14/Info.plist;
323 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
324 | LD_RUNPATH_SEARCH_PATHS = (
325 | "$(inherited)",
326 | "@executable_path/Frameworks",
327 | );
328 | PRODUCT_BUNDLE_IDENTIFIER = com.alexhay.ShortcutsExampleiOS14;
329 | PRODUCT_NAME = "$(TARGET_NAME)";
330 | SWIFT_VERSION = 5.0;
331 | TARGETED_DEVICE_FAMILY = "1,2";
332 | };
333 | name = Debug;
334 | };
335 | 8C39B715254026A100DE2F1F /* Release */ = {
336 | isa = XCBuildConfiguration;
337 | buildSettings = {
338 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
339 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
340 | CODE_SIGN_STYLE = Automatic;
341 | DEVELOPMENT_ASSET_PATHS = "\"ShortcutsExampleiOS14/Preview Content\"";
342 | DEVELOPMENT_TEAM = NWHDL7X5B3;
343 | ENABLE_PREVIEWS = YES;
344 | INFOPLIST_FILE = ShortcutsExampleiOS14/Info.plist;
345 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
346 | LD_RUNPATH_SEARCH_PATHS = (
347 | "$(inherited)",
348 | "@executable_path/Frameworks",
349 | );
350 | PRODUCT_BUNDLE_IDENTIFIER = com.alexhay.ShortcutsExampleiOS14;
351 | PRODUCT_NAME = "$(TARGET_NAME)";
352 | SWIFT_VERSION = 5.0;
353 | TARGETED_DEVICE_FAMILY = "1,2";
354 | };
355 | name = Release;
356 | };
357 | /* End XCBuildConfiguration section */
358 |
359 | /* Begin XCConfigurationList section */
360 | 8C39B6FF2540269E00DE2F1F /* Build configuration list for PBXProject "ShortcutsExampleiOS14" */ = {
361 | isa = XCConfigurationList;
362 | buildConfigurations = (
363 | 8C39B711254026A100DE2F1F /* Debug */,
364 | 8C39B712254026A100DE2F1F /* Release */,
365 | );
366 | defaultConfigurationIsVisible = 0;
367 | defaultConfigurationName = Release;
368 | };
369 | 8C39B713254026A100DE2F1F /* Build configuration list for PBXNativeTarget "ShortcutsExampleiOS14" */ = {
370 | isa = XCConfigurationList;
371 | buildConfigurations = (
372 | 8C39B714254026A100DE2F1F /* Debug */,
373 | 8C39B715254026A100DE2F1F /* Release */,
374 | );
375 | defaultConfigurationIsVisible = 0;
376 | defaultConfigurationName = Release;
377 | };
378 | /* End XCConfigurationList section */
379 | };
380 | rootObject = 8C39B6FC2540269E00DE2F1F /* Project object */;
381 | }
382 |
--------------------------------------------------------------------------------