RideBooking Concept usando sirikit xcode 8

Como sabemos que xcode 8 ingrates con todas las características nuevas. Comencé a trabajar en las aplicaciones de siri kit. Tomando el concepto de reserva de Ride. Seguí todos los pasos y completé la parte de encoding. Lamentablemente, no puedo ejecutar la aplicación en Siri. Por favor, corrígeme lo que extraño o qué cambio debo hacer para seguir adelante.

Proceso seguido:

  1. Se agregaron nuevos objectives con bashs junto con la opción de interfaz de usuario habilitada.

  2. Se agregó "NSSiriUsageDescription" en la hoja de información del proyecto.

  3. Agregar intenciones de reserva Ride en la list de información del manejador de bashs

  4. Diseños de layout diseñados a medida con botones y map.

Error al ejecutar la aplicación: –

Lo siento, nombre, algo salió mal. ¿Puedes intentarlo de nuevo?

Gracias de antemano por ayudarme. Por favor, publique cualquier ejemplo o cómo trabajar con la reserva de viaje.

También estoy haciendo lo mismo que tú. Pero resolví mis problemas y aquí comparto mi código:

Paso 1: AppDelegate:

INPreferences.requestSiriAuthorization { switch $0 { case .authorized: print("authorized") break case .notDetermined: print("notDetermined") break case .restricted: print("restricted") break case .denied: print("denied") break } } 

Paso 2: Cree un file plist que almacene todas sus intenciones y vocabulario en el proyecto principal (AppIntentVocabulary.plist):

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ParameterVocabularies</key> <array> <dict> <key>ParameterNames</key> <array> <string>INRequestRideIntent.SlideToOpen</string> </array> <key>ParameterVocabulary</key> <array> <dict> <key>VocabularyItemIdentifier</key> <string>slide_to_open</string> <key>VocabularyItemSynonyms</key> <array> <dict> <key>VocabularyItemExamples</key> <array> <string>Book ride in MyApp</string> </array> </dict> </array> </dict> </array> </dict> </array> <key>IntentPhrases</key> <array> <dict> <key>IntentName</key> <string>INRequestRideIntent</string> <key>IntentExamples</key> <array> <string>Book smart parking</string> <string>Get ETA Way</string> <string>Go Online in Way</string> <string>Book ride in Way</string> <string>Book table in way</string> </array> </dict> </array> 

Paso 3: en su class de IntentHandler, extienda su class por INRequestRideIntentHandling, INGetRideStatusIntentHandling, INListRideOptionsIntentHandling delegates.

Stpe 4: Agregue el método de manejar para manejar su request de viaje:

 func handle(requestRide intent: INRequestRideIntent, completion: @escaping (INRequestRideIntentResponse) -> Void) { } func handle(getRideStatus intent: INGetRideStatusIntent, completion: @escaping (INGetRideStatusIntentResponse) -> Void) { } func handle(listRideOptions intent: INListRideOptionsIntent, completion: @escaping (INListRideOptionsIntentResponse) -> Void) { let response = INListRideOptionsIntentResponse(code: .success, userActivity: nil) let smallCarOption = INRideOption(name: "Small Car", estimatedPickupDate: Date(timeIntervalSinceNow: 3 * 60)) // You must provide a name and estimated pickup date. smallCarOption.priceRange = INPriceRange(firstPrice: NSDecimalNumber(string: "5.60") , secondPrice: NSDecimalNumber(string: "10.78"), currencyCode: "USD") // There are different ways to define a price range and depending on which initializer you use, Maps may change the formatting of the price. smallCarOption.disclaimerMessage = "This is a very small car, tall passengers may not fit." // A message that is specific to this ride option. smallCarOption.availablePartySizeOptions = [ INRidePartySizeOption(partySizeRange: NSRange(location: 0, length: 1), sizeDescription: "One person", priceRange: nil), INRidePartySizeOption(partySizeRange: NSRange(location: 0, length: 2), sizeDescription: "Two people", priceRange: INPriceRange(firstPrice: NSDecimalNumber(string: "6.60") , secondPrice: NSDecimalNumber(string: "11.78"), currencyCode: "USD")) ] smallCarOption.availablePartySizeOptionsSelectionPrompt = "Choose a party size" smallCarOption.specialPricing = "High demand. 50% extra will be added to your fare." smallCarOption.specialPricingBadgeImage = INImage(named: "specialPricingBadge") let base = INRideFareLineItem(title: "Base fare", price: NSDecimalNumber(string: "4.76"), currencyCode: "USD" )! let airport = INRideFareLineItem(title: "Airport fee", price: NSDecimalNumber(string: "3.00"), currencyCode: "USD" )! let discount = INRideFareLineItem(title: "Promo code (3fs8sdx)", price: NSDecimalNumber(string: "-4.00"), currencyCode: "USD" )! smallCarOption.fareLineItems = [ base, airport, discount ] smallCarOption.userActivityForBookingInApplication = NSUserActivity(activityType: "bookInApp"); response.rideOptions = [ smallCarOption ] let paymentMethod = INPaymentMethod(type: .cnetworkingit, name: "Visa Platinum", identificationHint: "•••• •••• •••• 1234", icon: INImage(named: "cnetworkingitCardImage")) let applePay = INPaymentMethod.applePay() // If you support Pay and the user has an Pay payment method set in your parent app response.paymentMethods = [ paymentMethod, applePay ] response.expirationDate = Date(timeIntervalSinceNow: 5 * 60) } func confirm(requestRide intent: INRequestRideIntent, completion: @escaping (INRequestRideIntentResponse) -> Void) { let rideOption = INRideOption(name: "Small car", estimatedPickupDate: Date(timeIntervalSinceNow: 5 * 60)) let rideStatus = INRideStatus() rideStatus.rideOption = rideOption rideStatus.estimatedPickupDate = Date(timeIntervalSinceNow: 5 * 60) rideStatus.rideIdentifier = NSUUID().uuidString let response = INRequestRideIntentResponse(code: .success, userActivity: nil) response.rideStatus = rideStatus completion(response) } func startSendingUpdates(forGetRideStatus intent: INGetRideStatusIntent, to observer: INGetRideStatusIntentResponseObserver) { } func stopSendingUpdates(forGetRideStatus intent: INGetRideStatusIntent) { } 

Paso 5: agregue INRequestRideIntent en NSExtension en Info.plist en ambas extensiones de intención.

Paso 6: Primero compile y ejecute la aplicación en su dispositivo y ejecute su extensión en su dispositivo.

Si devuelve un error como el que está describiendo, simplemente agregue CoreLocation.framework en su proyecto y vuelva a ejecutar la aplicación.