Tuist no longer copies a package-wide PRODUCT_BUNDLE_IDENTIFIER onto every generated SwiftPM target. Each target’s sanitized bundleId is now the authoritative identifier, while a project’s own PRODUCT_BUNDLE_IDENTIFIER template still works as the fallback at the project level. All other package base settings (such as EXCLUDED_ARCHS) continue to propagate to targets as before.
This fixes a regression in 4.202.0-canary.23 where generated frameworks from underscores-prefixed modules (for example _RopeModule and _CollectionsUtilities from swift-collections, _NumericsShims from swift-numerics, or project-local _LottieStub) ended up with invalid CFBundleIdentifier values like com.example._RopeModule, causing Xcode to reject the embedded frameworks during build-for-testing.