Macos Catalina上的新扑面版本的解决方法
#macos #flutter #ios

Flutter SDK是一个开发框架,允许开发人员编写代码并在多个平台上运行,例如移动,Web和台式机。

为了进行iOS开发,必须在MacOS上使用XCode安装运行颤音。由于颤动3.0,因此需要Xcode 13。在2021年9月和2022年5月的Xcode 13和Flutter 3.0发布时,Macos Catalina得到了Apple Security Update的支持(此后于2022年7月结束)。 Xcode 13不再得到MacOS Catalina的支持(12.4是Macos Catalina上的最后一个Xcode)。

使用Macos Catalina,一个人不再能够通过Xcode为iOS的最新版本构建或使用最新版本的Flutter。对于有限数量的Dev仍然带有旧的(不支持)Mac,这令人沮丧。

主机Mac版本 最高Xcode 目标macOS版本 目标iOS版本 flutter版本 Dart SDK版本
10.15 12.4 11.1 14.4 2.10 2.16
11 13.2.1 12.1 15.2 3.0 2.17

我发现了一个解决方法,可以使Flutter 3继续在Macos Catalina上构建,但请记住,这是Flutter团队不支持的,可能会引起意外的问题。

Xcode版本检查是在Flutter SDK根文件夹中的packages/flutter_tools/lib/src/macos/xcode.dart中完成的。要扭转检查,我们需要做与https://github.com/flutter/flutter/pull/97746所做的相反的事情。

flutter 3.0.5:

--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -18,11 +18,11 @@ import '../base/version.dart';
 import '../build_info.dart';
 import '../ios/xcodeproj.dart';

-Version get xcodeRequiredVersion => Version(13, null, null);
+Version get xcodeRequiredVersion => Version(12, 3, null, text: '12.3');

 /// Diverging this number from the minimum required version will provide a doctor
 /// warning, not error, that users should upgrade Xcode.
-Version get xcodeRecommendedVersion => xcodeRequiredVersion;
+Version get xcodeRecommendedVersion => Version(13, null, null, text: '13');

 /// SDK name passed to `xcrun --sdk`. Corresponds to undocumented Xcode
 /// SUPPORTED_PLATFORMS values.

flutter 3.3.10

--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -18,7 +18,7 @@ import '../base/version.dart';
 import '../build_info.dart';
 import '../ios/xcodeproj.dart';

-Version get xcodeRequiredVersion => Version(13, null, null);
+Version get xcodeRequiredVersion => Version(12, 3, null, text: '12.3');

 /// Diverging this number from the minimum required version will provide a doctor
 /// warning, not error, that users should upgrade Xcode.

dart在需要时即时汇总源,但是如果可用缓存,它将使用编译的缓存,该缓存将不包含我们的版本检查hack。进行上述更改后,您需要删除以下文件:

rm bin/cache/flutter_tools.snapshot

之后,您可以正常运行颤动。第一次运行将使用我们的版本检查hack重新编译flutter工具包。

此解决方法只是禁用版本检查。据我所知,至少对于Flutter 3.0〜3.0.5,Flutter团队没有添加依赖于较新的Xcode版本的功能。我也能够在更简单的项目上使用Flutter 3.3.10,但是我仍在进行测试。但是,请注意,如果添加了依靠较新的Xcode版本的功能,则您的构建将破坏。

我只建议使用此解决方法进行开发。如果您需要生产制作构建,我建议使用带有Catalina主机上运行的较新的MacOS版本的虚拟机(设置和使用很痛苦,但仍可以运行最新的Xcode和“ nentily”)。

随着苹果的所有事物,永久修复总是“只需购买新的Mac”。

目前,您可以使用过时的Mac继续使用更长的时间。

ps:另一个解决方法是使用OCLP升级您的无支撑Mac/Monterey。但是至少对于具有NVIDIA GPU的iMac,该配置需要额外的努力来注入NVIDIA驱动程序,并且不稳定。因此,相比之下,flutter SDK的几行更改更简单。