This canary adds library product caching and stabilizes large graph generation, test runs, and SwiftPM integration.
Module cache
- Static and dynamic library products can now be cached as binary XCFrameworks, alongside frameworks.
- External resource bundles are no longer embedded into internal frameworks when restoring from cache, matching source generation behavior.
- Generated module maps keep their modification times when their contents are unchanged, so incremental
tuist test --build-onlybuilds no longer recompile Swift sources unnecessarily. - Cache warming no longer parses Xcode activity logs for unused per-target build duration metadata.
Testing
tuist testnow falls back to per-project test schemes when the autogenerated workspace scheme mixes app-hosted and host-less test bundles, preventing xctest bootstrap crashes.- Build runs uploaded by
tuist testnow display the scheme test configuration instead of “Unknown”. - Suite sharding now resolves the correct destination from test plans and actually selects Swift Testing suites by passing
-only-testingidentifiers to xcodebuild.
Generated projects and dependencies
.protofiles are treated as sources, so Xcode build tool plugins like gRPC Swift receive them as target inputs.tuist inspect dependenciesnow recognizes implicit imports from SwiftPM XCFramework binary targets.- Generated projects support SwiftPM warning-control settings (
treatAllWarnings,treatWarning,enableWarning). - DocC builds work better for packages whose public headers import another module from the same package.
- Framework search path response files are quoted, so targets with spaces in their names build correctly.
- Recursive graph processing has been replaced with iterative traversals, preventing stack-overflow crashes on large dependency graphs.
CLI
- Tuist CLI releases are now published through canary, release-candidate, and stable channels.
--verbosenow appears intuist inspect --help.- The Bazel credential helper proactively refreshes access tokens within 60 seconds of expiry to avoid mid-build UNAUTHENTICATED errors.
SwiftPM integration
- Restored SwiftPM artifacts now use SwiftPM’s artifact scratch path.
- Updated SwifterPM to skip
__MACOSXshadow bundles and streamswift package resolveoutput.