Search code examples
xcodeswift-package-manager

Xcode 13.2.1 unable to resolve Swift Package Manager


In my app I use several of SPM, I inserted them to my project. Yesterday I updated my Xcode to the last version (13.2.1), but I'm having lot of issues with SPM. Usually when I switch a branch or change a version of Xcode I clean all by using command+shift+k. I did the same with the new release of Xcode, but I'm having lots of issue by resolving SPM, as you can see in this image

enter image description here

all of my package are fetched but not resolved. This is a very big problem because in this condition I can't compile my app. There's a way to fix this issue? There's someone who has the same problem like me? I'm getting crazy about this. Thank you


Solution

  • I just spent two days on this same issue, and finally got my rather long list of packages to resolve and build. I just can't believe Apple can't fix this. If we could just update one package at a time we could slowly get everything to work. In any case, I just made notes to my team of what I did to finally get all packages to resolve:


    If Xcode struggles to resolve them, the solution is complicated and must often be done multiple times (Xcode 13.2.1):

    • close the project
    • quit Xcode
    • delete every folder in the Derived folders, then in Finder delete Trash
    • cd to the folder containing the MyProject.xcodeproj and run: xcodebuild -resolvePackageDependencies -project MyProject.xcodeproj -scheme MyScheme -platform="iOS, name:'Any iOS Device'"
    • open Xcode
    • open the project

    Some projects may not resolve or have errors (little red "x"s on the right side). Not good but may be solvable:

    • use Xcode "File" -> "Packages" -> "Resolve Packages"
    • alternately, close the project, then reopen it.

    You will probably get some warnings when running xcode build, I get:

    --- xcodebuild: WARNING: Using the first of multiple matching destinations:
    { platform:macOS, arch:arm64, variant:Designed for [iPad,iPhone], id:xxx-xxx }
    { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device }
    { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device }
    ...
    

    Once you get to a stable position, with no errors and all packages showing version numbers, you should be good for the long haul.

    IMPORTANT: occasionally you need to update the minimum version shown in the Project -> Package Dependencies, to reflect the existing Package release (which you may see from the left Xcode panel, or by visiting the Packages github site. If they are too old you may have problems resolving after you wipe the Derived Folder (for some other reason, maybe Package Format changed?)