Xcode 27: huge build size jump, spike in "Class X is implemented in both" warnings

The compiled size of my app (DerivedData/*/Build/Products/Debug-iphonesimulator/AppName.app) jumped 200 MB (926 MB-> 1.12 GB) just by compiling with Xcode 27 beta 2 (currently the latest).

I can compile with Xcode 27, but when I run it on a simulator it crashes on launch. I get the same type of crash when running my unit tests.

I'm getting a lot of warnings in the debug console about "Class X is implemented in both".

I asked Claude to analyze the .app files to find the difference. Yes, I have a lot of internal and external packages/frameworks.

Xcode26 ships 128 frameworks including 14 *_PackageProduct.framework dynamic frameworks (Logger_…, APICore_…, SplitManager_…, Apollo_…, PerModel_…, AppGateway_…, etc.). Xcode 27 ships 114 — all 14 of those dynamic package frameworks are gone. Xcode 27 changed the default and now links those SPM package products statically into every framework that consumes them.
  
Counting framework binaries that carry their own copy of a package's Swift type metadata:     ┌──────────────┬────────────┬─────────────┐
  │ Package      │ Xcode 26   │ Xcode 27 b2 │
  ├──────────────┼────────────┼─────────────┤
  │ Logger       │ 12         │ 79          │
  ├──────────────┼────────────┼─────────────┤
  │ APICore      │ 3          │ 45          │
  ├──────────────┼────────────┼─────────────┤
  │ SplitManager │ 1          │ 20          │ 
  ├──────────────┼────────────┼─────────────┤
  │ PerModel     │ 1          │ 24          │
  ├──────────────┼────────────┼─────────────┤
  │ AppGateway   │ 1          │ 20          │
  └──────────────┴────────────┴─────────────┘

79 copies of Logger's types instead of 1. That's the runtime problem: duplicate Swift type metadata / Objective-C class registration → "Class … is implemented in both …, one of the two will be used" and, when type identity or singletons matter, crashes. It hits unit tests hardest because the test bundle re-links the same static package that the host app's frameworks already contain. 

I worked on it a bit trying to switch my packages and frameworks to load dynamically. But that only gets so far as 3rd party packages like Apollo (for GraphQL) don't ship a dynamic version of ApolloTestSupport. I really don't like forking 3rd party packages.

I tried changing my packages to explicitly load dynamically like this. That got me to the point that I could run on a simulator. But I was unable to get to the point that I could run all my unit tests without crashing on launch. And the code that runs on a simulator crashes on a device complaining about missing packages.

     products: [
         .library(
             name: "AppGateway",
+            type: .dynamic,
             targets: ["AppGateway"]),
     ],

Something is really different in Xcode 27 with the way it links packages and creates my app - a linker bug? I don't know if there is an ancient build setting that might be triggering this? Our app is really old. v1 was created in 2010. We just recently moved to a SceneUI delegate setup.

I really don't know what would be a good next step for me to figure this one out. I am happy to use a DTS or create a Feedback if I thought it would help me get forward progress on this?

Help?

Xcode 27: huge build size jump, spike in "Class X is implemented in both" warnings
 
 
Q