-
Notifications
You must be signed in to change notification settings - Fork 29.3k
Description
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; |
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.