Hive Hive
Sign in

fix(server): update XCLogParser for Xcode 27 logs

GitHub issue · Closed

Metadata
Source
tuist/tuist #11176
Updated
Jun 24, 2026
Domains
Kura
Details

What changed

  • Bump MobileNativeFoundation.XCLogParser to 0.2.48 in the root package and the xcactivitylog_nif Swift package.
  • Add an Xcode 27 failed-build .xcactivitylog fixture.
  • Add a regression test that proves Tuist can parse the fixture successfully.
  • Pass --force-resolved-versions on GitHub Actions tuist install steps so CI bootstrap uses the committed Package.resolved pins while local installs keep the default project behavior.
  • Run CI dependency install/resolve steps even after .build cache restores so stale registry downloads are verified before lint/build/test commands use them.

Why

Xcode 27 activity log sections can include an extra integer token before section text. With XCLogParser 0.2.47, Tuist build processing interpreted that integer as the text token and failed with Unexpected token parsing String: [type: int, value: 0].

XCLogParser 0.2.48 contains the upstream parser tolerance for that token. The fixture keeps Tuist covered against the Sentry failure mode.

After the dependency bump, macOS CI jobs also failed in tuist install because the released Tuist 4.197.0 bootstrap path uses swifterpm 0.7.0, which was floating package versions instead of honoring the committed lockfile. That selected newer gRPC/OpenAPI dependencies and then reported empty version sets for the locked protobuf/collections constraints. In CI we want deterministic installs from Package.resolved, so the workflow commands pass --force-resolved-versions directly.

A follow-up CI run exposed a second bootstrap edge case: when .build restored from cache, the install step was skipped and later commands failed on a missing registry download for 1024jp/gzipswift. Running dependency setup after restore lets CI keep the cache speed-up while still repairing or validating the restored package registry state.

Impact

Build Insights processing can parse Xcode 27 activity logs instead of failing the build-processing job. GitHub Actions installs keep using the dependency versions reviewed in Package.resolved, while local tuist install is not forced into lockfile-only mode.

Validation

  • Synced MobileNativeFoundation/XCLogParser@v0.2.48 into Tuist Swift package registry.
  • Confirmed TUIST_USE_SWIFTERPM=1 tuist install fails without --force-resolved-versions on swifterpm 0.7.0 with no versions found for apple.swift-protobuf matching constraints.
  • TUIST_USE_SWIFTERPM=1 tuist install --force-resolved-versions
  • cd server/native/xcactivitylog_nif && swift test --replace-scm-with-registry --security-path /private/tmp/swiftpm-security-xclogparser-ci-fix
  • git diff --check
Comments
T
tuist[bot] Jun 9, 2026

🛠️ Tuist Run Report 🛠️

Previews 📦
App Commit Open on device
Tuist f983b49a7
Tests 🧪
Scheme Status Cache hit rate Tests Skipped Ran Commit
TuistAcceptanceTests 0 % 0 0 0 f983b49a7
TuistApp 13 % 28 0 28 f983b49a7
TuistUnitTests 9 % 2940 4 2936 f983b49a7
Flaky Tests ⚠️
  • TuistUnitTests: 3 flaky tests (View all)
Test case Module Suite
parseTestStatuses_returnsPassingModuleNames() TuistXCResultServiceTests XCResultServiceTests
parseTestStatuses_returnsCorrectStatuses() TuistXCResultServiceTests XCResultServiceTests
parseTestStatuses_extractsModuleAndSuiteNames() TuistXCResultServiceTests XCResultServiceTests
Builds 🔨
Scheme Status Duration Commit
TuistAcceptanceTests 5m 10s f983b49a7
TuistApp 1.4s f983b49a7
TuistUnitTests 5m 57s f983b49a7
Bundles 🧰
Bundle Commit Install size Download size
Tuist f983b49a7 19.6 MBΔ +60.4 KB (+0.31%) 14.7 MBΔ +35.5 KB (+0.24%)
TA
tuist-atlas[bot] Jun 10, 2026

This fix is now available in server@1.207.6. Update to this version to resolve Xcode 27 activity log parsing issues.

TA
tuist-atlas[bot] Jun 10, 2026

This fix is now available in Runner Image 0.3.3. Update your runner image to ghcr.io/tuist/tuist-runner:macos-26-5-0.3.3 or ghcr.io/tuist/tuist-runner:macos-26-4-1-0.3.3 to get the XCLogParser update for Xcode 27 logs.