Sorry, I must have confused something in my testing. This actually only works with Release configuration on device, not in Debug configuration. (on simulator it always works)
I have looked into the generated app bundle for different builds and compared the value returned by Bundle(for: SomeClass.self) where SomeClass is part of the merged framework:
Simulator/Debug
Bundle Path: /DerivedData/.../Build/Products/Debug-iphonesimulator/FrameworkWithResources.framework/
✅ Resources can be found
Device/Debug
Bundle Path: /var/containers/Bundle/Application/.../MergeableResources.app/ReexportedBinaries/FrameworkWithResources.framework/
Actual Contents of App Bundle:
Frameworks/FrameworkWithResources.framework/
FrameworkWithResources (stub, 35kB)
Assets.car
...
ReexportedBinaries/FrameworkWithResources.framework/
FrameworkWithResources (real, 104kB)
No Resources
...
❌ Resources can not be found because Bundle URL does not match contents of app bundle
Device/Release
Bundle Path: /var/containers/Bundle/Application/.../MergeableResources.app/Frameworks/FrameworkWithResources.framework/
Actual Contents of App Bundle:
Frameworks/FrameworkWithResources.framework/
FrameworkWithResources (stub, 35kB)
Assets.car
...
No ReexportedBinaries folder (as expected)
✅ Resources can be found