blob: 1c0cb8e6d0db23962a80d86058e54c1ff5cf2d39 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../artifacts.dart';
import '../base/version.dart';
import '../build_info.dart';
import '../ios/xcodeproj.dart';
import '../macos/swift_packages.dart';
import '../project.dart';
/// Encapsulates platform-specific values for Darwin targets ([ios] and [macos]).
///
/// This includes details like binary names, artifact locations, and deployment versions.
enum FlutterDarwinPlatform {
ios(
name: 'ios',
binaryName: 'Flutter',
targetPlatform: TargetPlatform.ios,
swiftPackagePlatform: SwiftPackagePlatform.ios,
artifactName: 'ios',
artifactZip: 'artifacts.zip',
xcframeworkArtifact: Artifact.flutterXcframework,
sdks: <XcodeSdk>[XcodeSdk.IPhoneOS, XcodeSdk.IPhoneSimulator],
),
macos(
name: 'macos',
binaryName: 'FlutterMacOS',
targetPlatform: TargetPlatform.darwin,
swiftPackagePlatform: SwiftPackagePlatform.macos,
artifactName: 'darwin-x64',
artifactZip: 'framework.zip',
xcframeworkArtifact: Artifact.flutterMacOSXcframework,
sdks: <XcodeSdk>[XcodeSdk.MacOSX],
);
const FlutterDarwinPlatform({
required this.name,
required this.binaryName,
required this.targetPlatform,
required this.swiftPackagePlatform,
required String artifactName,
required this.artifactZip,
required this.xcframeworkArtifact,
required this.sdks,
}) : _artifactName = artifactName;
/// The name of the platform in all lowercase. Matches the corresponding [TargetPlatform].
final String name;
/// The name of the binary file within the [xcframeworkArtifact].
final String binaryName;
/// The corresponding [TargetPlatform] for the [FlutterDarwinPlatform].
final TargetPlatform targetPlatform;
/// The corresponding [SwiftPackagePlatform] for the [FlutterDarwinPlatform].
final SwiftPackagePlatform swiftPackagePlatform;
/// The name of the directory for the artifacts for the platform in the cache.
final String _artifactName;
/// The name of the zip file the xcframework artifacts are located in.
final String artifactZip;
/// The [Artifact] for the xcframework for the platform.
final Artifact xcframeworkArtifact;
/// A list of supported [XcodeSdk].
final List<XcodeSdk> sdks;
/// Minimum supported version for the platform.
Version deploymentTarget() {
switch (this) {
case FlutterDarwinPlatform.ios:
return Version(13, 0, null);
case FlutterDarwinPlatform.macos:
return Version(10, 15, null);
}
}
/// Artifact name for the platform and [mode].
///
/// e.g. (`ios`, `ios-profile`, `ios-release`, `darwin-x64`, `darwin-x64-profile`,
/// `darwin-x64-release`).
String artifactName(BuildMode mode) {
return mode == BuildMode.debug ? _artifactName : '$_artifactName-${mode.cliName}';
}
/// Minimum supported Swift package version for the platform.
SwiftPackageSupportedPlatform get supportedPackagePlatform {
return SwiftPackageSupportedPlatform(
platform: swiftPackagePlatform,
version: deploymentTarget(),
);
}
/// Framework name with the `.framework` extension.
///
/// e.g. (`Flutter.framework`, `FlutterMacOS.framework`).
String get frameworkName => '$binaryName.framework';
/// Framework name with the `.xcframework` extension.
///
/// e.g. (`Flutter.xcframework`, `FlutterMacOS.xcframework`).
String get xcframeworkName => '$binaryName.xcframework';
/// Returns corresponding [FlutterDarwinPlatform] for the [targetPlatform].
static FlutterDarwinPlatform? fromTargetPlatform(TargetPlatform targetPlatform) {
for (final FlutterDarwinPlatform darwinPlatform in FlutterDarwinPlatform.values) {
if (targetPlatform == darwinPlatform.targetPlatform) {
return darwinPlatform;
}
}
return null;
}
/// Returns corresponding [XcodeBasedProject] for the platform.
XcodeBasedProject xcodeProject(FlutterProject project) {
switch (this) {
case FlutterDarwinPlatform.ios:
return project.ios;
case FlutterDarwinPlatform.macos:
return project.macos;
}
}
}