Skip to content

SwiftPM macOS - Allow limiting architecture for release builds #176605

@abdelaziz-mahdy

Description

@abdelaziz-mahdy

Use case

I'm developing a Flutter plugin for ExecuTorch, which only provides arm64 binaries for macOS (no x86_64 support). Debug builds work correctly, but release builds fail because Flutter's build_macos.dart

: XcodeSdk.MacOSX.genericPlatform;
hardcodes the xcodebuild destination to generic/platform=macOS, forcing universal binaries.

Issue:

  • Debug: Uses -destination platform=macOS,arch=arm64 - Works
  • Release: Uses -destination generic/platform=macOS - Forces arm64+x86_64 universal binary

Current code (build_macos.dart:202):

final String destination = buildInfo.isDebug
    ? 'platform=${XcodeSdk.MacOSX.displayName},arch=$arch'
    : XcodeSdk.MacOSX.genericPlatform; // Forces universal

Attempted workarounds (all failed):

  • Xcode settings: ARCHS=arm64, EXCLUDED_ARCHS=x86_64, ONLY_ACTIVE_ARCH=YES
  • Build flags: --dart-define=DarwinArchs=arm64 (only affects AOT compilation, not xcodebuild destination)

Reference: ExecuTorch only supports arm64 on macOS: https://docs.pytorch.org/executorch/stable/using-executorch-ios.html

Proposal

Allow developers to control architecture targeting for macOS release builds via:

Option 1: Respect DarwinArchs define for xcodebuild destination:

final String destination = buildInfo.isDebug || shouldLimitArchitecture
    ? 'platform=${XcodeSdk.MacOSX.displayName},arch=$arch'
    : XcodeSdk.MacOSX.genericPlatform;

Option 2: Add build flag:

flutter build macos --release --arch=arm64

Option 3: Package.swift configuration support to declare supported architectures.

This would enable plugins with architecture-specific dependencies to build successfully without requiring debug builds.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: desktopRunning on desktopc: new featureNothing broken; request for a new capabilityc: proposalA detailed proposal for a change to Flutterplatform-macBuilding on or for macOS specificallyteam-macosOwned by the macOS platform teamtoolAffects the "flutter" command-line tool. See also t: labels.triaged-macosTriaged by the macOS platform team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions