diff --git a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart index a98948436c..9de67b41c6 100644 --- a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart +++ b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @@ -147,7 +147,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals outputPath, 'Debug', 'App.xcframework', - 'ios-arm64_x86_64-simulator', + 'ios-x86_64-simulator', 'App.framework', 'flutter_assets', 'vm_snapshot_data', @@ -210,7 +210,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals outputPath, mode, 'App.xcframework', - 'ios-arm64_x86_64-simulator', + 'ios-x86_64-simulator', 'App.framework', 'App', )); @@ -312,7 +312,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals outputPath, mode, 'device_info.xcframework', - 'ios-arm64_x86_64-simulator', + 'ios-x86_64-simulator', 'device_info.framework', 'device_info', ); @@ -321,7 +321,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals outputPath, mode, 'device_info.xcframework', - 'ios-arm64_x86_64-simulator', + 'ios-x86_64-simulator', 'device_info.framework', 'Headers', 'DeviceInfoPlugin.h', @@ -368,7 +368,7 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals outputPath, mode, 'FlutterPluginRegistrant.xcframework', - 'ios-arm64_x86_64-simulator', + 'ios-x86_64-simulator', 'FlutterPluginRegistrant.framework', 'Headers', 'GeneratedPluginRegistrant.h', diff --git a/dev/integration_tests/ios_host_app/Host.xcodeproj/project.pbxproj b/dev/integration_tests/ios_host_app/Host.xcodeproj/project.pbxproj index 1c91f1d64d..586f3b015d 100644 --- a/dev/integration_tests/ios_host_app/Host.xcodeproj/project.pbxproj +++ b/dev/integration_tests/ios_host_app/Host.xcodeproj/project.pbxproj @@ -447,6 +447,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; diff --git a/dev/integration_tests/ios_host_app_swift/Host.xcodeproj/project.pbxproj b/dev/integration_tests/ios_host_app_swift/Host.xcodeproj/project.pbxproj index 7599f28453..c30ae601c9 100644 --- a/dev/integration_tests/ios_host_app_swift/Host.xcodeproj/project.pbxproj +++ b/dev/integration_tests/ios_host_app_swift/Host.xcodeproj/project.pbxproj @@ -390,6 +390,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; INFOPLIST_FILE = Host/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/packages/flutter_tools/bin/podhelper.rb b/packages/flutter_tools/bin/podhelper.rb index 07bcfc2081..9006fb22c3 100644 --- a/packages/flutter_tools/bin/podhelper.rb +++ b/packages/flutter_tools/bin/podhelper.rb @@ -55,7 +55,7 @@ def flutter_additional_ios_build_settings(target) # Profile can't be derived from the CocoaPods build configuration. Use release framework (for linking only). configuration_engine_dir = build_configuration.type == :debug ? debug_framework_dir : release_framework_dir Dir.new(configuration_engine_dir).each_child do |xcframework_file| - if xcframework_file.end_with?("-simulator") # ios-arm64_x86_64-simulator + if xcframework_file.end_with?("-simulator") # ios-x86_64-simulator build_configuration.build_settings['FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]'] = "\"#{configuration_engine_dir}/#{xcframework_file}\" $(inherited)" elsif xcframework_file.start_with?("ios-") # ios-armv7_arm64 build_configuration.build_settings['FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]'] = "\"#{configuration_engine_dir}/#{xcframework_file}\" $(inherited)" @@ -72,9 +72,8 @@ def flutter_additional_ios_build_settings(target) # If the pod only supports a higher version, do not delete to correctly produce an error. build_configuration.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' if inherit_deployment_target - # Override legacy Xcode 11 style VALID_ARCHS[sdk=iphonesimulator*]=x86_64 and prefer Xcode 12 EXCLUDED_ARCHS. - build_configuration.build_settings['VALID_ARCHS[sdk=iphonesimulator*]'] = '$(ARCHS_STANDARD)' - build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'i386' + # Apple Silicon ARM simulators not yet supported. + build_configuration.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 i386' end end diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 34aa1cb2fb..e4ae0080e2 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -672,8 +672,9 @@ String _getIosEngineArtifactPath(String engineDirectory, if (!platformDirectory.basename.startsWith('ios-')) { continue; } - // ios-x86_64-simulator, ios-arm64_x86_64-simulator, ios-armv7_arm64 (Xcode 11), or ios-arm64_armv7 (Xcode 12). - final bool simulatorDirectory = platformDirectory.basename.endsWith('-simulator'); + // ios-x86_64-simulator, ios-armv7_arm64 (Xcode 11), or ios-arm64_armv7 (Xcode 12). + final bool simulatorDirectory = + platformDirectory.basename.endsWith('-simulator'); if ((environmentType == EnvironmentType.simulator && simulatorDirectory) || (environmentType == EnvironmentType.physical && !simulatorDirectory)) { flutterFrameworkSource = platformDirectory; diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart index dc4b85f769..ebd7e9ad3d 100644 --- a/packages/flutter_tools/lib/src/build_info.dart +++ b/packages/flutter_tools/lib/src/build_info.dart @@ -547,8 +547,8 @@ List defaultIOSArchsForEnvironment( EnvironmentType environmentType) { if (environmentType == EnvironmentType.simulator) { return [ + // Apple Silicon ARM simulators not yet supported. DarwinArch.x86_64, - DarwinArch.arm64, ]; } return [ @@ -876,7 +876,7 @@ const String kIosArchs = 'IosArchs'; /// The define to control what macOS architectures are built for. /// /// This is expected to be a space-delimited list of architectures. If not -/// provided, defaults to x86_64. +/// provided, defautls to x86_64. /// /// Supported values are x86_64 and arm64. const String kDarwinArchs = 'DarwinArchs'; diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart index 10c2da8339..bc7e9bb11f 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart @@ -454,6 +454,7 @@ end simulatorConfiguration, 'SYMROOT=${simulatorBuildOutput.path}', 'ENABLE_BITCODE=YES', // Support host apps with bitcode enabled. + 'ARCHS=x86_64', 'ONLY_ACTIVE_ARCH=NO', // No device targeted, so build all valid architectures. 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES', ]; diff --git a/packages/flutter_tools/lib/src/ios/xcode_build_settings.dart b/packages/flutter_tools/lib/src/ios/xcode_build_settings.dart index c8b99b381b..28b0ccc1d0 100644 --- a/packages/flutter_tools/lib/src/ios/xcode_build_settings.dart +++ b/packages/flutter_tools/lib/src/ios/xcode_build_settings.dart @@ -190,9 +190,8 @@ List _xcodeBuildSettingsLines({ String arch; if (localEngineName.endsWith('_arm')) { arch = 'armv7'; - } else if (localEngineName.contains('_arm64')) { - arch = 'arm64'; } else if (localEngineName.contains('_sim')) { + // Apple Silicon ARM simulators not yet supported. arch = 'x86_64'; } else { arch = 'arm64'; @@ -204,7 +203,8 @@ List _xcodeBuildSettingsLines({ // ARM not yet supported https://github.com/flutter/flutter/issues/69221 xcodeBuildSettings.add('EXCLUDED_ARCHS=arm64'); } else { - xcodeBuildSettings.add('EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386'); + // Apple Silicon ARM simulators not yet supported. + xcodeBuildSettings.add('EXCLUDED_ARCHS[sdk=iphonesimulator*]=arm64 i386'); } for (final MapEntry config in buildInfo.toEnvironmentConfig().entries) { diff --git a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart index 07ae83d605..42aca26404 100644 --- a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart @@ -698,7 +698,7 @@ Information about project "Runner": final String contents = config.readAsStringSync(); expect(contents.contains('ARCHS=armv7'), isTrue); - expect(contents.contains('EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386'), isTrue); + expect(contents.contains('EXCLUDED_ARCHS[sdk=iphonesimulator*]=arm64 i386'), isTrue); final File buildPhaseScript = fs.file('path/to/project/ios/Flutter/flutter_export_environment.sh'); expect(buildPhaseScript.existsSync(), isTrue); @@ -751,7 +751,13 @@ Information about project "Runner": }); group('sim local engine', () { - testUsingContext('sets ARCHS=x86_64 when x86 sim local engine is set', () async { + Artifacts localArtifacts; + + setUp(() { + localArtifacts = Artifacts.test(localEngine: 'out/ios_debug_sim_unopt'); + }); + + testUsingContext('sets ARCHS=x86_64 when sim local engine is set', () async { const BuildInfo buildInfo = BuildInfo.debug; final FlutterProject project = FlutterProject.fromDirectoryTest(fs.directory('path/to/project')); await updateGeneratedXcodeProperties( @@ -771,33 +777,7 @@ Information about project "Runner": final String buildPhaseScriptContents = buildPhaseScript.readAsStringSync(); expect(buildPhaseScriptContents.contains('ARCHS=x86_64'), isTrue); }, overrides: { - Artifacts: () => Artifacts.test(localEngine: 'out/ios_debug_sim_unopt'), - Platform: () => macOS, - FileSystem: () => fs, - ProcessManager: () => FakeProcessManager.any(), - }); - - testUsingContext('sets ARCHS=arm64 when arm64 sim local engine is set', () async { - const BuildInfo buildInfo = BuildInfo.debug; - final FlutterProject project = FlutterProject.fromDirectoryTest(fs.directory('path/to/project')); - await updateGeneratedXcodeProperties( - project: project, - buildInfo: buildInfo, - ); - - final File config = fs.file('path/to/project/ios/Flutter/Generated.xcconfig'); - expect(config.existsSync(), isTrue); - - final String contents = config.readAsStringSync(); - expect(contents.contains('ARCHS=arm64'), isTrue); - - final File buildPhaseScript = fs.file('path/to/project/ios/Flutter/flutter_export_environment.sh'); - expect(buildPhaseScript.existsSync(), isTrue); - - final String buildPhaseScriptContents = buildPhaseScript.readAsStringSync(); - expect(buildPhaseScriptContents.contains('ARCHS=arm64'), isTrue); - }, overrides: { - Artifacts: () => Artifacts.test(localEngine: 'out/ios_debug_sim_arm64'), + Artifacts: () => localArtifacts, Platform: () => macOS, FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(),