That's interesting. I'll keep an eye out for that in the future, to avoid problems with iOS.
Also, I guess I was wrong about GetHashCode needing to be unique. But I got the implementation from Tuple.cs anyway.
I pushed a commit github a few hours ago. You can replace your code with this now: https://github.com/EsotericSoftware/spine-runtimes/commit/2a244bbbe0163d23562b0984b104a3b4031dbee0
The implementation also includes the prevention of boxing, based on knowledge from Dictionary.cs here. It seems like IEquatable is used when the Dictionary tries to get EqualityComparer<TKey>.Default and that creates a new comparer based on TKey's type. This indirection is bypassed by implementing our own EqualityComparer<TKey>
The same implementation was also already in Skin.cs.
I'm not sure if this implementation will cause the exception on iOS(Mono). The it doesn't have a generic method, but it does have a method identified by the qualified generic interface it's implementing.