We use some iOS plugins which contain .frameworks, which are actually folders with a specific file structure which includes some symlinks.
Versions/Current -> Versions/A
Headers -> Versions/Current/Headers
The way that Unity handles these .frameworks is complete madness. Every single time you give the editor focus, it detects multiple files with the same GUID. These are not actually multiple files, but rather the same file as viewed through two different symlinks. It detects a nonexistent GUID collision and changes the GUID, which doesn’t fix the collision (since the GUID for one file cannot be made different from itself). But it does invalidate all of the .meta files inside the working directory and fills the editor log with spurious warnings:
Multiple assets are overridden to use the same GUID: 4ab001fa6e23344a7be0c02ae1e017d1
Assets/Plugins/iOS/AdColony.framework/Headers/AdColonyUserMetadata.h
Assets/Plugins/iOS/AdColony.framework/Versions/A/Headers/AdColonyUserMetadata.h
Note that those are not two files, the bottom one is the real path and the top one is just the same file again, as viewed through a symlink.
The consequences of this is:
- you can never have a clean working directory (Unity will crap up your working directory the moment you start to do anything)
- if you make a commit, you have to choose between not committing the dummy guid changes (which is risky; you should always commit .meta files) or committing them and risking an unresolvable merge conflict
- you have to disable warnings view in the editor log in order to see anything important
A bug was filed, Unity Issue Tracker - Infinite Guid Changes because of Symlinks, but it was closed as Won’t Fix without explanation. What’s the right way to handle this?