├── 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 | --------------------------------------------------------------------------------