Unable to install iOS & watchOS app to iPhone, because of intents change

I've been happily building and deploying my app to my iPhone and Watch S8, and the app was ready to submit to App Store Connect last night. However, when archiving it I got an error saying that my DynamicEventSelectionIntent was in multiple extensions. It was, kind of. When I started working on the complications I copied the Widgets intents into the complications, and left the name the same, but they were not in multiple targets.

It looks like the info plist only had one item in the IntentsSupported (because they're the same name), so I decided to rename them so I had a widget one and a complications one.

The problem I have now is that I can't deploy to my iPhone and Watch anymore because I'm getting this error:

This app contains a WatchKit app with one or more Siri Intents app extensions that declare IntentsSupported that are not declared in any of the companion app's Siri Intents app extensions. WatchKit Siri Intents extensions' IntentsSupported values must be a subset of the companion app's Siri Intents extensions' IntentsSupported values.

All I've done is rename one intent, and locate every instance of it in the info plist files, and add the appropriate new one into the right places.

Here's what I've got. Main App contains Widget and WidgetIntentHandler, plus Watch App, which contains Complications and ComplicationsIntentHandler.

Target: Main app: (I've removed everything that has no bearing on extensions.)

Target: Widget:

Target: WidgetIntentHandler:

Target: Watch App:

Target: Complications:

Target: ComplicationsIntentHandler:

Please, can someone tell me what should and should not be in the various parts, as I've tried for 12 hours now and I cannot get this to deploy to my iPhone anymore :( Thanks.

This is what I have in the various "Supported Intents" sections of the targets...

Main App:

Okay, so the Main App supports the two intents.

WidgetIntentHandler:

The WidgetIntentHandler supports only the WidgetEventIntent.

Watch App:

The Watch App (which contains the Complications and ComplicationsIntentHandler targets) supports just the ComplicationEventIntent.

ComplicationsIntentHandler:

And the ComplicationsIntentHandler only supports the ComplicationEventIntent.

What am I doing wrong? I've told the Main App that there are two intents. I've told the WidgetIntentHandler to support only the widget intent, and the ComplicationsIntentHandler to only support the complications intent. There are no other places to set up "Supported Intents".

If only Xcode could be a help rather than a hinderance... Anyone at Apple reading our pleas for help?

More info:

When trying to deploy to an iPhone I get: This app contains a WatchKit app with one or more Siri Intents app extensions that declare IntentsSupported that are not declared in any of the companion app's Siri Intents app extensions. WatchKit Siri Intents extensions' IntentsSupported values must be a subset of the companion app's Siri Intents extensions' IntentsSupported values.

And to the iPhone Simulator: Failure Reason: Please try again later.

Recovery Suggestion: Siri Intents in the WatchKit app com.abc.xyz.watchkitapp are not a subset of the Siri Intents in the companion app com.abc.xyz.

But they absolutely, 100% definitely are! The watchkitapp has the ComplicationEventIntent, and the main app has the ComplicationEventIntent and the WidgetEventIntent, so ComplicationEventIntent is a subset of ComplicationEventIntent & WidgetEventIntent.

Seriously, Xcode is a piece of trash.

Further info:

I can deploy the Watch app to both the Watch Simulator and my physical device, so the Watch app itself is fine.

I understand the error that says the Watch intents are not a subset of the iOS app's intents is because it's trying to deploy both the iOS app and the Watch app, but the intents are set up correctly, AFAICS. The only places where I can set "Supported Intents" are in the Main app target, the WidgetIntentHandler target, the Watch app target, and the ComplicationsIntentHandler. There's nowhere else to set them, and they're correct (see previous images).

What's the solution here?! Can someone please help? Where's the Eskimo guy?

I've tried absolutely everything I can think of. Can't get it to work.

I actually think there's a bug here in Xcode because the two extensions inside the iOS app have the correct intents, and the iOS app itself has both of them but Xcode errors every time. It's like Xcode doesn't allow more than one intent in the entire project, which is just bonkers. So, I've re-jigged the app and I'm now using only one intent that's shared between the intents, but although I can deploy to the Simulator and physical devices again, it still fails when validating an archive: Intents Extension Issue. The intent "DynamicEventSelectionIntent" is in multiple intents extensions, but it can only be in one.

I've raised a bug.

And I've given up.

It would be extremely helpful if even ONE person who has used intents would respond and try and work through this with me. Maybe one of Apple's developers would like to jump in?

Right now, I cannot submit this app to App Store Connect - despite the iOS app, Home Screen widgets, Lock Screen widgets, Watch app and complications all working - because Xcode shows me an error that cannot be fixed. If I have to wait for Apple to get around to looking at my bug report I'll likely have expired.

There has to be a very simple solution to this, but it has escaped me for days now, and it's driving me to depression. Thanks a bunch, Xcode.

What is the Feedback number of your big report?

FB11738182 and FB11741770.

Just to clarify the current situation...

In the General tab of the project view:

  • Main iOS app has both supported intents listed (WidgetEventIntent and ComplicationEventIntent).
  • Widget target does not have any supported intents because there is no section to add them.
  • WidgetIntentHandler has both intents listed.
  • Watch App has only the ComplicationEventIntent.
  • Complications target does not have any supported intents because there is no section to add them.
  • ComplicationsIntentHandler has only the ComplicationEventIntent.

In target membership:

  • ComplicationsEntry.swift which uses the ComplicationEventIntent is only in Complications.
  • ComplicationEventIntent is in Watch App, Complications and ComplicationEventIntent.
  • ComplicationsIntentHandler.swift is in Complications and ComplicationsIntentHandler.
  • WidgetEntry.swift which uses the WidgetEventIntent is only in Widget.
  • WidgetEventIntent is in Widget and WidgetIntentHandler.
  • WidgetIntentHandler.swift is in Widget and WidgetIntentHandler.

With this setup I can successfully deploy to the iOS Simulator (iOS 16.1), the watchOS Simulator (watchOS 9.1) and also to a physical iPhone 14 Pro Max (iOS 16.1) and Watch S8 (watchOS 9.1). This works.

However, when I attempt to archive the app for sending to App Store Connect I get these errors:

Asset validation failed - Intents Extension Issue. The intent "ComplicationEventIntent" is in multiple intents extensions, but it can only be in one. (ID: 83c75017-0631-4903-90c7-8486a0f39285)

and

Asset validation failed - Intents Extension Issue. The intent "WidgetEventIntent" is in multiple intents extensions, but it can only be in one. (ID: 3860ed6f-41cc-47fd-ab49-28d4fbe6136c)

So, even though Xcode lets me deploy to both the Simulator and physical devices, the archive fails App Store Connect validation.

It says they can't be in multiple intents extensions, but if I remove ComplicationEventIntent from the WidgetIntentHandler target (in the General tab of the project view) I can't deploy to the Simulator because:

Please try again later. Siri Intents in the WatchKit app com.company.appname.watchkitapp are not a subset of the Siri Intents in the companion app com.company.appname

And neither can I deploy to physical devices because:

This app contains a WatchKit app with one or more Siri Intents app extensions that declare IntentsSupported that are not declared in any of the companion app's Siri Intents app extensions. WatchKit Siri Intents extensions' IntentsSupported values must be a subset of the companion app's Siri Intents extensions' IntentsSupported values.

So one of these things is wrong.

I've also tried removing the Complications target to simplify things (even though that's just a com.apple.widgetkit-extension and not a com.apple.intents-service) and putting the code files in the main Watch App target, but the complications wouldn't appear on the Watch because you can't have two @mains, and removing the complications one just stopped them working at all.

I'd appreciate any help you can give because I've spent months working on this massive upgrade to the app and Watch app and I can't actually release it because of conflicting errors in Xcode (Version 14.1 (14B47b)).

I've just tried removing the Complications extension target and the ComplicationsIntentHandler target, and putting the complications views inside the Widget target. I have a ton of #if os(watchOS) everywhere, and I now don't get complications on the Watch.

Going back to the version before I removed the Complications targets, look at this page: https://developer.apple.com/documentation/widgetkit/creating-lock-screen-widgets-and-watch-complications?language=objc

It says:

"Add Lock Screen Widgets to Your Existing iOS App

If your iOS app supports widgets that appear on the Home Screen or in Today View, support Lock Screen widgets by adding the appropriate accessory widget family to the list of supported widgets you declare."

I added my Lock Screen widgets to the Widget target, and they worked fine. The Widget target successfully showed Home Screen widgets and used the WidgetIntentHandler.

That page also says:

"Add WidgetKit Complications to Your Existing watchOS App

In case your existing watchOS app doesn’t offer complications, add a watchOS widget extension to your project in Xcode, and create complications with WidgetKit."

This suggests to me that both Widgets and Complications should be in their own extension targets, not in the same one.

Well, mine did use complications before, but I decided to drop support for the older ClockKit stuff and just go with the new watchOS 9 stuff. That page suggests you add a new target - that's what I did, I added the Complications target. But if I try to use the same intent handler with both the Widget extension and the Complications extension Xcode says I can't use the same intent in more than one extension. So I created a duplicate of the widget intent handler for the Complications, and Xcode doesn't like that either.

Basically, I can't use:

  • A Widget extension with its own intent handler, and a Complications extension with its own intent handler.
  • A Widget extension and a Complications extension that share the same intent handler.
  • A Widget extension with its own intent handler and no complications (because complications apparently have to be in their own widget extension).

It's a trash bin. Xcode should be better than this. Your documentation should be better than this. Xcode is giving me conflicting errors, and there's no clear way of supporting widgets and complications with the same or indeed different intents. Xcode lets me deploy to the Simulator and physical devices with one configuration, then says it's not valid to go to the App Store. I change it according to what the error messages suggest, and then I can't deploy to the Simulator or devices anymore. How am I supposed to work with this?!

After a million changes, I think I've got it working.

The fix appears to be to not have a second intents handler target and not try to share the initial one. The code that would've gone inside the second intent definition (the .intentdefinition file and its handler) should instead go inside the Complications target:

In the General tab of the project view:

  • Main iOS App target has no supported intents listed. There is a Supported Intents section for them but it's empty. If I put the WidgetEventIntent in here, it fails validation.
  • Widget target does not have any supported intents because there is no section to add them.
  • WidgetIntentHandler has only the WidgetEventIntent listed.
  • Watch App target has only the ComplicationEventIntent.
  • Complications target does not have any supported intents because there is no section to add them.

In target membership:

  • ComplicationsEntry.swift which uses the ComplicationEventIntent is only in Complications.
  • ComplicationEventIntent is in Watch App and Complications.
  • WidgetEntry.swift which uses the WidgetEventIntent is only in Widget.
  • WidgetEventIntent is in the Main iOS App, Widget and WidgetIntentHandler.
  • WidgetIntentHandler.swift is only in WidgetIntentHandler.

Since Xcode doesn't seem to like it when you have more than one dynamic intent, regardless of how they're set up or which targets they're in, removing the ComplicationsIntentHandler target and moving its code into the Complications target itself removed the complexity of that extra target.

With this setup I can deploy to the iPhone Simulator and the Watch Simulator, and also to a physical iPhone and Watch (Series 8), and it validates for sending to App Store Connect. (Though, when it gets to App Review, I'm sure it will be rejected because it's different there, too.)


This really shouldn't have taken so long to figure out, but Xcode provides zero help. As you can see from previous error messages Xcode has given me, it tells you there's a problem and its suggested resolution causes another error that cannot be fixed.

At the very least - and the easiest thing for Apple to do here - would be to have a project set up correctly when you choose to create a new project > Watch App with iOS companion app. If this had some sample code in it that had the complications and widgets already present and in the right place, and with the right targets and intents, I could've created a new project and compared it.

Right now, creating such a project merely gives you the Watch App and iOS app targets. There's nothing in there for widgets or complications. Maybe when you add a new widget or complications target it should put them in the right place?

I've been developing for years with Xcode and this has to be the most frustrating thing I've ever experienced with it.

Aaaaaaand, we're back to it not working. No intents in the Complications when installed to a brand new Watch.

I seriously give up with this cr*p.

Unable to install iOS & watchOS app to iPhone, because of intents change
 
 
Q