Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

What is the correct syntax to continue in app for custom intent?

I have a custom intent. When my app is unable to complete the resolution of a parameter within the app extension, I need to be able to continue within the app. I am unable to figure out what the correct objective C syntax is to enable the execution to continue with the app. Here is what I have tried:

completion([[PickWoodIntentResponse init] initWithCode:PickWoodIntentResponseCodeContinueInApp userActivity:nil]);

This results in the following error:

Implicit conversion from enumeration type 'enum PickWoodIntentResponseCode' to different enumeration type 'INAnswerCallIntentResponseCode' (aka 'enum INAnswerCallIntentResponseCode')

I have no idea why it is referring to the enum type of 'INAnswerCallIntentResponseCode' which is unrelated to my app.

I have also tried:

PickWoodIntentResponse *response = [[PickWoodIntentResponse init] initWithCode:PickWoodIntentResponseCodeContinueInApp userActivity:nil];
completion(response);

but that results in 2 errors:

Implicit conversion from enumeration type 'enum PickWoodIntentResponseCode' to different enumeration type 'INAnswerCallIntentResponseCode' (aka 'enum INAnswerCallIntentResponseCode')

and

Incompatible pointer types passing 'PickWoodIntentResponse *' to parameter of type 'INStringResolutionResult *'

The relevant autogenerated code provided to me with the creation of my intent is as follows:

@class PickWoodIntentResponse;
@protocol PickWoodIntentHandling <NSObject>
- (void)resolveVarietyForPickWood:(PickWoodIntent *)intent withCompletion:(void (^)(INStringResolutionResult *resolutionResult))completion NS_SWIFT_NAME(resolveVariety(for:with:)) API_AVAILABLE(ios(13.0), macos(11.0), watchos(6.0));
@end

typedef NS_ENUM(NSInteger, PickWoodIntentResponseCode) {
  PickWoodIntentResponseCodeUnspecified = 0,
  PickWoodIntentResponseCodeReady,
  PickWoodIntentResponseCodeContinueInApp,
  PickWoodIntentResponseCodeInProgress,
  PickWoodIntentResponseCodeSuccess,
  PickWoodIntentResponseCodeFailure,
  PickWoodIntentResponseCodeFailureRequiringAppLaunch
}

@interface PickWoodIntentResponse : INIntentResponse
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithCode:(PickWoodIntentResponseCode)code userActivity:(nullable NSUserActivity *)userActivity NS_DESIGNATED_INITIALIZER;
@property (readonly, NS_NONATOMIC_IOSONLY) PickWoodIntentResponseCode code;
@end

Am I overlooking something? What would be the proper syntax to have within the completion block to satisfy the compiler?

Either of your first 2 choices is correct. I think there's something else happening here that's not obvious that's beyond the scope of these snippets. Do you get the same results with just the relevant code in a small test project? If so, please share a link to your test project. That'll help us better understand what's going on. If you're not familiar with preparing a test project, take a look at Creating a test project.

— Ed Ford,  DTS Engineer

What is the correct syntax to continue in app for custom intent?
 
 
Q