在 M1 Mac 上运行的 iOS 模拟器上的 Flutter iOS 应用

时间:2021-03-31 11:17:55

标签: ios flutter ios-simulator apple-m1

在装有 Big Sur 11.2.2 和 Flutter 1.22.6 的 M1 Mac 上运行的 iOS 模拟器(iPhone 12 Pro Max)上的 Flutter iOS 应用程序是否存在问题?

你看,我的 Flutter iOS 应用程序(使用多个 Flutter 插件)是在运行 Catalina (10.15.7) 和 Flutter 1.22.5 的基于 Intel 的 Mac 上开发的,它可以工作,但是当我转移到基于 M1 的 Mac 上运行时Big Sur 和 Flutter 1.22.6,我遇到了 Cocoapod 的错误:

[!] Automatically assigning platform `iOS` with version `9.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile.

请注意,在这台 M1 mac 上,“flutter doctor”是成功的,我可以创建 Flutter 测试应用程序并在 iOS 模拟器上运行它,所以我认为它的设置正确。

我也尝试了过去有此症状的帖子所建议的解决方案,但无济于事。我尝试了以下方法:

1- 我在 pods 文件中取消了“platform :ios, '9.0'”行的注释。

2- 我在终端中运行了以下 CLI 命令:

flutter clean
rm -Rf ios/Pods
rm -Rf ios/.symlinks
rm -Rf ios/Flutter/Flutter.framework
rm -Rf ios/Flutter/Flutter.podspec
cd ios
pod install
cd ..
flutter build ios

尝试上述两种建议的结果是相同的“Error running pod install”错误,没有提到其他错误消息。

此时我唯一能想到的就是我在 M1 上的 iOS 模拟器中运行时使用的 Flutter 插件存在问题。同样,这些插件可以在运行 Catalina 的基于 Intel 的 Mac 上运行。如果是这样,不幸的是,错误并没有告诉我是哪一个。我使用的插件是:

dependencies:
  flutter:
    sdk: flutter
  provider: ^4.1.3
  sqflite: ^1.3.2+1
  googleapis: ^0.56.1
  googleapis_auth: ^0.2.12
  http: ^0.12.2
  url_launcher: ^5.7.2
  flutter_secure_storage: ^3.3.5
  tuple: ^1.0.3
  image_picker: ^0.6.7+12
  intl: ^0.16.1
  fraction: ^1.2.1
  archive: ^2.0.13
  path_provider: ^1.6.24
  path: ^1.7.0
  image_cropper: ^1.3.1
  flutter_image_compress: ^0.7.0

非常感谢所有帮助/建议。

2 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。

在 podfile 中将 iOS 版本更新到 10.0。

它对我有用。

答案 1 :(得分:0)

尚不支持(即将推出 this PR

Flutter 已禁用在 ARM 架构上运行的模拟器上运行。他们这样做是因为 Flutter 依赖项(iOS 引擎 Flutter.framework)没有 arm64 切片。有一个在 M1 macs (arm64) 上添加对 iOS 模拟器支持的开放拉取请求:https://github.com/flutter/flutter/pull/85059

我最初尝试让它为自己工作,但问题是 Generated.xcconfig 包含禁用模拟器的 arm64 架构的代码,并且此文件是由 Flutter 内部生成的。一旦您手动更改此设置,它仍然会失败。如果您尝试使用 Xcode 构建,则可能会在链接过程中收到此错误消息:

Undefined symbol: _OBJC_CLASS_$_ClassName

还有更多。如果您没有看到足够的日志或信息来调试构建过程,我建议您使用 Xcode 构建。


Automatically assigning platform 不是错误

Automatically assigning platform iOS 实际上并不是一个错误,它只是告诉你它默认为 iOS 平台。然后它失败了,因此在这种情况下,您应该提供更多错误信息。