Hive Hive
Sign in

fix(cli): SwifterPM 0.8.12 (skip __MACOSX, stream resolve output)

GitHub issue ยท Closed

Metadata
Source
tuist/tuist #11308
Updated
Jun 24, 2026
Domains
CLI Generated projects
Details

Summary

Bumps the pinned SwifterPM dependency from 0.8.10 to 0.8.12. Two fixes ship with the bump, both reaching tuist install / tuist generate through our SwifterPM-backed SwiftPM integration:

๐Ÿ› Strip __MACOSX shadow bundles from extracted archives (swifterpm#41)

A user reported on Slack that, on a clean checkout, tuist generate aborted with:

.../swifterpm/artifacts/plaid-link-ios-spm/LinkKit/__MACOSX/LinkKit.xcframework/Info.plist doesn't contain an Info.plist

Plaid ships LinkKit as a Finder-zipped binary artifact. Those zips carry a __MACOSX/ AppleDouble sidecar with a shadow copy of every bundle inside. unzip happily wrote both the real LinkKit.xcframework/ and __MACOSX/LinkKit.xcframework/ into the cache, and two compounding things made the shadow win in our scanner:

  1. binaryArtifacts(in:) descended into any directory without an artifact extension, so __MACOSX/ was walked and its shadow LinkKit.xcframework was added to the results.
  2. binaryArtifact(in:) returned artifacts.last after sorting by path. _ (0x5F) sorts after L (0x4C), so the shadow won.

The fix:

  • Strips top-level __MACOSX/ directories right after unzip, before the existing flatten-single-toplevel logic.
  • Skips __MACOSX entries while recursing in binaryArtifacts(in:) so any path the scanner is pointed at (fresh extract, local artifact path, pre-populated cache) is defensive.

๐Ÿ› Forward delegated SwiftPM output during resolution (swifterpm#39)

Stream stdout and stderr from delegated swift package resolve runs so normal resolution surfaces SwiftPM progress to the user instead of appearing stalled. Captured output is still preserved for callers that need it, and quiet resolution stays quiet by forwarding only when progress output is enabled.

Verification

  • swift package resolve --replace-scm-with-registry against this checkout resolves cleanly and writes the new revision (d48e02d2991e4020764fc93bd5d7189549f34767, 0.8.12) to Package.resolved.
  • Upstream PRs include their own regression tests: swifterpm#41 adds restorePackageIgnoresMacOSResourceForkShadowFramework (zips a real Foo.xcframework plus a __MACOSX/Foo.xcframework/._Info.plist shadow, runs restorePackage + writeWorkspaceState, asserts that the workspace state and on-disk artifact resolve to the real framework with no __MACOSX left behind) and confirms the test fails against pre-fix main exactly the way the Slack user saw it.
Comments
T
tuist[bot] Jun 16, 2026

๐Ÿ› ๏ธ Tuist Run Report ๐Ÿ› ๏ธ

Tests ๐Ÿงช
Scheme Status Cache hit rate Tests Skipped Ran Commit
TuistAcceptanceTests โœ… 0 % 0 0 0 8cf80b104
TuistUnitTests โœ… 83 % 2990 4 2986 8cf80b104
Flaky Tests โš ๏ธ
  • TuistUnitTests: 3 flaky tests (View all)
Test case Module Suite
parseTestStatuses_returnsPassingModuleNames() TuistXCResultServiceTests XCResultServiceTests
parseTestStatuses_extractsModuleAndSuiteNames() TuistXCResultServiceTests XCResultServiceTests
parseTestXCResult() TuistXCResultServiceTests XCResultServiceTests
Builds ๐Ÿ”จ
Scheme Status Duration Commit
TuistAcceptanceTests โœ… 1m 44s 8cf80b104
TuistUnitTests โœ… 3m 8s 8cf80b104
T
ThePragmaticArt Jun 16, 2026

Thanks for this, we were just dealing with this issue ourselves

TA
tuist-atlas[bot] Jun 17, 2026

This fix is now available in 4.201.0-canary.5. Update to this version to get SwifterPM 0.8.12 with __MACOSX shadow bundle fixes and streamed resolve output.

TA
tuist-atlas[bot] Jun 17, 2026

This fix is now available in 4.201.0-canary.4. Update to this version to get the SwifterPM 0.8.12 update with __MACOSX skipping and streamed resolve output.

TA
tuist-atlas[bot] Jun 17, 2026

The SwifterPM 0.8.12 update with fixes for __MACOSX shadow bundle handling and streamed resolve output is now available in 4.201.0-canary.3. Update to this version to benefit from these fixes.

TA
tuist-atlas[bot] Jun 18, 2026

The SwifterPM 0.8.12 update (skipping __MACOSX shadow bundles and streaming resolve output) is now available in 4.201.0-canary.8. Update to this version to pick up these fixes for artifact extraction and SwiftPM resolution output.

TA
tuist-atlas[bot] Jun 18, 2026

The SwifterPM 0.8.12 update is now available in 4.201.0-canary.7. This includes two fixes: stripping __MACOSX shadow bundles from extracted archives (resolving generation failures with Plaid LinkKit) and streaming SwiftPM resolve output so progress is visible instead of appearing stalled.

Update to 4.201.0-canary.7 to get these fixes.

TA
tuist-atlas[bot] Jun 18, 2026

The SwifterPM 0.8.12 update is now available in version 4.201.0-canary.6. Update to this version to get the fixes for __MACOSX shadow bundle handling and streamed SwiftPM resolve output.

TA
tuist-atlas[bot] Jun 19, 2026

The SwifterPM 0.8.12 update is now available in 4.201.0-canary.9. This version strips __MACOSX shadow bundles from extracted archives and streams SwiftPM resolve output so progress is visible to users. Update to 4.201.0-canary.9 to get these fixes.

TA
tuist-atlas[bot] Jun 19, 2026

The SwifterPM 0.8.12 update (with __MACOSX shadow bundle stripping and streamed resolve output) is now available in version 4.201.0-canary.13. Update to that version to get these fixes.

TA
tuist-atlas[bot] Jun 19, 2026

The SwifterPM 0.8.12 update (which includes fixes for skipping __MACOSX shadow bundles and streaming resolve output) is now available in 4.201.0-canary.12. This prevents issues with Finder-zipped binary artifacts that carry AppleDouble sidecars, and surfaces SwiftPM progress during resolution. Update to this version to get these fixes.

TA
tuist-atlas[bot] Jun 19, 2026

The SwifterPM 0.8.12 update (skipping __MACOSX shadow bundles and streaming resolve output) is now available in 4.201.0-canary.11. This fixes issues where Finder-zipped binary artifacts with AppleDouble sidecar directories caused errors, and ensures SwiftPM progress is visible during resolution.

Update to 4.201.0-canary.11 to use this fix.

TA
tuist-atlas[bot] Jun 19, 2026

This is now available in 4.201.0-canary.10. Update to pick up SwifterPM 0.8.12 with the __MACOSX and streaming resolve output fixes.

TA
tuist-atlas[bot] Jun 20, 2026

The SwifterPM 0.8.12 update is now available in 4.201.0-canary.18. This includes fixes to skip __MACOSX directories and stream resolve output. Update to this version to get these fixes.

TA
tuist-atlas[bot] Jun 20, 2026

The SwifterPM 0.8.12 update, which skips __MACOSX directories and streams resolve output, is now available in 4.201.0-canary.17. Update to this version for these fixes.

TA
tuist-atlas[bot] Jun 20, 2026

The SwifterPM 0.8.12 update is now available in 4.201.0-canary.16. This strips __MACOSX shadow bundles from extracted archives and streams SwiftPM resolve output. Update to this version.

TA
tuist-atlas[bot] Jun 20, 2026

SwifterPM 0.8.12 is now available in 4.201.0-canary.15. This includes fixes to strip __MACOSX shadow bundles from extracted archives and forward delegated SwiftPM output during resolution. Update to this version to use these fixes.

TA
tuist-atlas[bot] Jun 20, 2026

The SwifterPM 0.8.12 update (skipping __MACOSX shadow bundles and streaming resolve output) is now available in version 4.201.0-canary.14. Update to this version to get these artifact handling and output streaming improvements.

TA
tuist-atlas[bot] Jun 21, 2026

SwifterPM 0.8.12 (skipping __MACOSX shadow bundles and streaming resolve output) is now available in 4.201.0-canary.19. This fixes issues with Finder-zipped binary artifacts containing AppleDouble sidecars and shows SwiftPM progress during resolution. Update to 4.201.0-canary.19 to get this fix.