Skip to content

Commit e5908b4

Browse files
chrfalchclaude
andcommitted
fix(iOS): opt spm_dependency pod targets out of Swift explicit modules
A pod target consuming an SPM binary target via spm_dependency sees the binary target's module.modulemap twice: Xcode processes the xcframework into both the platform-wide products dir and the pod's TARGET_BUILD_DIR, and the existing SWIFT_INCLUDE_PATHS workaround makes the former visible. Implicit modules tolerate the duplicate definition; the explicit-modules dependency scanner (the default starting with Xcode 26) fails with "redefinition of module". Before the VFS-overlay removal these targets carried -ivfsoverlay, which disqualified them from explicit modules and masked the problem; the overlay's removal made them eligible and the nightly-tests react-native-enriched-markdown (RaTeX) job went red. Set SWIFT_ENABLE_EXPLICIT_MODULES=NO on exactly the targets spm_dependency touches, restoring the previous compile mode for the CocoaPods+SPM interop path only. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent b33de75 commit e5908b4

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

  • packages/react-native/scripts/cocoapods

packages/react-native/scripts/cocoapods/spm.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ def apply_on_post_install(installer)
3737
unless target.build_settings(config.name)['SWIFT_INCLUDE_PATHS'].include?(search_path)
3838
target.build_settings(config.name)['SWIFT_INCLUDE_PATHS'].push(search_path)
3939
end
40+
# The search path above makes the platform-wide products dir visible
41+
# to this target, so an SPM binary target's module.modulemap is seen
42+
# twice: once there and once in the target's own build dir (Xcode
43+
# processes the xcframework into both). Implicit modules tolerate the
44+
# duplicate, but the explicit-modules dependency scanner (the default
45+
# starting with Xcode 26) fails with "redefinition of module". Opt
46+
# SPM-consuming pod targets out of explicit modules.
47+
target.build_settings(config.name)['SWIFT_ENABLE_EXPLICIT_MODULES'] = 'NO'
4048
end
4149
end
4250
end

0 commit comments

Comments
 (0)