Using multiple SPM packages with shared local package dependency not supported (in Xcode)?

I'm trying to set up the structure for a set of SPM packages that I'd also like to open / build in Xcode (13.1).

It seems I've run into some fundamental issue here, just want to see if anyone else has encountered this or have any workaround.

Basically, I have library packages A, B and C (and then there are executable D and E that will depend on A/B).
A depends on C
B depends on C

I've set up the dependency for a local package as such in both A and B:

    dependencies: [
....
        .package(path: "../C")
    ],

From a clean startup of Xcode, I can work with A or B and get the package C properly resolved with a fold-down arrow so I can edit the local copy as well as building A or B properly.

But if opening both A and B in Xcode, the secondly opened copy will not get a fold down and can't build as it fails with:

Missing package product 'C'

I've tried cleaning SPM package caches and build folders, but no go. If I open B first instead, A will fail, so it seems clearly related to which order these are opened.

I want to be able to open both A and B in Xcode and work in parallel on them, preferably with the fold down of the local package C such that it can be edited regardless of where my focus is at the time.

I also opened FB9796870 with a reproducer, but hoped there was some way to get this to work.

Command line builds with SPM works fine for both, I guess that is always a workaround, but would have been nice to be able to work from Xcode too.

1 Like

It seems to be a known limitation from SPM day 1 for me.

I guess maybe there are some conflict issue so that Xcode team disabled this feature?

For SPM it seems to work on the surface at least - but haven’t tried the resulting compiled units yet as I’m just setting up the project structure at the moment.

You cannot have a local package open in more than one Xcode workspace/project at a time.

1 Like

Ouch. Thanks - quite unexpected (the UI feedback made it seem like a defect) - seems like a reasonably desirable workflow for just slightly more complex projects, but then I know...

That's what workspaces are for. You can add multiple projects/packages to the same workspace. Then, you can view A, B, and C at the same time.

2 Likes

Many thanks, I'll check it out (but I did like being able to ad-hoc open packages in Xcode and not have any persisted Xcode assets if possible... Especially nice when you start having a more complex project with dozens or hundreds of libraries / services which are edited in different environments.).

Isn't Peter's suggestion the best of both worlds? You can always open the original project from its base directory. You're not losing that ability.