An unknown error occured. reference 'refs/remotes/origin/master' not found (-1)

If any of the fine Apple folks are listening, I have today filed a feedback FB13428167.

In short, what I have found is that when Xcode initially resolves package dependencies, and clones everything into DerivedData it will include refs/remotes for each git@github.com dependency. Not sure why it does that and how, but refs/remotes is never present for any public https:// backed dependency. Only for git@ ones.

This refs/remotes directory will then somehow confuse Xcode and "Update to Latest Package Versions" will always fail with the error mentioned above.

Removing the refs/remotes directory will make Xcode happy indefinitely, until you delete the DerivedData folder, when the mess starts again.

I am currently using the following script to make the Xcode happy even while it is running (Note that I am also cleaning the ~/Library/org.swift.swiftpm repository clones, but this proved to not be necessary for Xcode to work. The DerivedData bit is what is important).

€ cat ~/fix_spm_cache.sh 
#!/bin/zsh

echo "Looking for problematic dirs..."

find ~/Library/Caches/org.swift.swiftpm/ -name remotes -type d
find ~/Library/Developer/Xcode/DerivedData/ -name remotes -type d | grep -vw checkouts

echo "Getting rid of them..."

find ~/Library/Caches/org.swift.swiftpm/ -name remotes -type d | xargs rm -r
find ~/Library/Developer/Xcode/DerivedData/ -name remotes -type d | grep -vw checkouts | xargs rm -r

This issue has been present in Xcode since initial SPM support was introduced and according to my experience it strictly affects only git@github.com based dependencies. The git@ dependencies work great in Swift Package Manager itself nicely, only Xcode is affected.

11 Likes