Skip to content

ci: set Mac universal RIDs in the app csproj, not on the publish CLI - #374

Merged
SteveTeece merged 2 commits into
devfrom
fix/mac-prerelease-universal-rids
Sep 2, 2026
Merged

SteveTeece merged 2 commits into
devfrom
fix/mac-prerelease-universal-rids

Conversation

@SteveTeece

Copy link
Copy Markdown
Owner

Problem

After #372 (which switched the macOS debug-pre-release.yml publish step to the plural -p:RuntimeIdentifiers=), the job still fails — now with NETSDK1083 on the five class-library ProjectReferences (Core, Plugins.Contracts, Reports, UI, Data) instead of the app project:

error NETSDK1083: The specified RuntimeIdentifier 'maccatalyst-x64;maccatalyst-arm64' is not recognized.

Root cause: -p:RuntimeIdentifiers= on the command line is an MSBuild global property, so the raw maccatalyst-x64;maccatalyst-arm64 string propagates verbatim into every referenced project. The plain net10.0 class libraries can't resolve that as a RID.

Fix

  • src/StageFright.App/StageFright.App.csproj — add a conditional <PropertyGroup> that sets the plural <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> only when -p:PublishMacUniversal=true is passed for a maccatalyst TFM. As a project (non-global) property, MAUI's Mac Catalyst targets fan out per-RID inner builds that hand a single concrete RID to the referenced libraries. Mirrors dotnet/maui's own Controls.TestCases.HostApp.csproj CI pattern. Inert for every normal local/CI build — single-arch Debug builds and dotnet run are unaffected.
  • .github/workflows/debug-pre-release.yml — publish step passes -p:PublishMacUniversal=true instead of the CLI RID list; comment rewritten.
  • CLAUDE.md — updated the RID note; the app csproj now carries two inert-by-default conditional PropertyGroups (RuntimeIdentifierOverride for Windows, PublishMacUniversal for Mac).

Verification

dotnet build src/StageFright.App/StageFright.App.csproj -c Debug (net10.0-windows) succeeds with 0 warnings / 0 errors; the new group stays dormant off-target. The universal maccatalyst build itself can only be exercised by re-running the workflow on a macOS runner.

🤖 Generated with Claude Code

SteveTeece and others added 2 commits September 3, 2026 08:51
Passing -p:RuntimeIdentifiers=maccatalyst-x64%3Bmaccatalyst-arm64 on the
command line made it a global property that propagated verbatim to every
ProjectReference. The plain net10.0 class libraries (Core, Data, UI,
Plugins.Contracts, Reports) then failed with NETSDK1083 on the joined
';'-list.

Instead, add a conditional PropertyGroup to StageFright.App.csproj that
sets the plural <RuntimeIdentifiers> only when -p:PublishMacUniversal=true
is passed for a maccatalyst TFM, and have the workflow pass that flag. As
a project property it is evaluated locally and MAUI's Mac Catalyst targets
fan out per-RID inner builds that hand a single concrete RID to the
referenced libraries. This mirrors dotnet/maui's own
Controls.TestCases.HostApp.csproj CI pattern. The group is inert for every
normal local/CI build, so single-arch Debug builds and `dotnet run` are
unaffected.

Verified: dotnet build src/StageFright.App (Debug, net10.0-windows) still
succeeds with 0 warnings/errors - the new group stays dormant off-target.
The universal maccatalyst build itself can only be exercised by re-running
the workflow on a macOS runner.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
MoneyFormatter.FormatCore delegated the negative-amount representation
entirely to CultureInfo.CurrentCulture, so a stored AUD figure rendered
"-$42.10" on an en-AU/en-US host but "($42.10)" under the invariant
culture that CI hosts default to. That broke the spec 028 FR-006 / SC-004
zero-drift regression (AudZeroDriftTests) on CI while passing locally.

FormatCore now sets NumberFormatInfo.CurrencyNegativePattern to the
leading/trailing-minus form matching the active culture's symbol
placement (never accounting-style parentheses). Positive formatting,
grouping, separators and symbol placement are unchanged; fr-FR still
trails the symbol ("-42,10 $"). AUD output is now byte-identical to the
pre-028 string on every host.

Adds MoneyFormatterTests coverage pinning en-AU / en-US / invariant /
fr-FR. Updates CLAUDE.md and specs/028 plan.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@SteveTeece
SteveTeece merged commit b3baf86 into dev Sep 2, 2026
1 check passed
@SteveTeece
SteveTeece deleted the fix/mac-prerelease-universal-rids branch September 2, 2026 23:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant