Symlinks became files, containing relative paths, within an app bundle, why? How to fix?

Solution 1:

You might have been using Apple network-transport protocols, but the underlying file-system your server uses is not HFS or APFS, and probably isn't n-fork capable either. Symlinks in both of Apple's file-systems rely on inode referencing, and if the file-system doesn't have some form of compliance capability then items with metadata as fork references and inode lookups doesn't really have much chance of surviving intact.

This is why non-app-store software is often distributed in .dmg format, because they are a wholly self-contained island of Apple compliance stored as a single contiguous data-block, allowing it to pass through hostile servers and deadly file-systems with impugnity.

That's the cause – as for detection, only trying to run the suspect to see what happens. macOS installers are vastly complex, the bigger the app the greater the chance they'll rely on internal symlinking and thus the higher the possibility that they're now little more than useless bytes .... because you can't repair apps that have been damaged in such a manner.

Prevention: Turn apps & installers back into .dmg files (with a handy drop tool like QuickDMG for archival purposes.