Flutter - 为 iOS 构建,但链接和嵌入式框架“App.framework”是为 iOS 模拟器构建的

gor*_*mwe 33 xcode dart android-studio flutter

在使用 Xcode 13.4 beta 更新到 Catalina 10.15.4 beta 之后,它也将 Simulator 更新到 13.4 (921.4)。

应用程序在物理连接的设备上编译并正确运行,但没有任何设备的模拟器可以通过这个阶段。

我得到了错误

为 iOS 构建,但链接和嵌入式框架“App.framework”是为 iOS 模拟器构建的。

或者

为 iOS 模拟器构建,但链接和嵌入式框架“App.framework”是为 iOS 构建的。

在此处输入图片说明

我怎样才能解决这个问题?

Loï*_*kam 63

Xcode 11.4 改变了框架的链接和嵌入方式,您可能会在 iOS 设备和模拟器之间切换时遇到问题。Flutter v1.15.3 及更高版本将自动迁移您的 Xcode 项目。

要摆脱困境,请按照以下说明进行操作;

  • 快速修复(让你的模拟器工作)

rm -rf ios/Flutter/App.framework

  • 官方推荐的手动迁移步骤

    1. 在 Flutter 应用程序目录中,在 Xcode 中打开 ios/Runner.xcworkspace。
    2. 在 Navigator 窗格中,找到 Flutter 组并删除 App.framework 和 Flutter.framework。 在此处输入图片说明
    3. 在 Runner 目标构建设置 Build Phases > Link Binary With Libraries 中确认 App.framework 和 Flutter.framework 不再存在。还要在 Build Phases > Embed Frameworks 中确认。

在此处输入图片说明

  1. 更改 Runner 目标构建设置 Build Phases > Thin Binary script 如下:

    /bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" 嵌入

    /bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" 瘦

在此处输入图片说明

  1. 在 Runner 目标Build Settings > Other Linker Flags

    (OTHER_LDFLAGS) 添加 $(inherited) -framework Flutter

在此处输入图片说明

希望能帮助到你!


小智 10

  1. 从“目标”中选择您的目标
  2. 选择“构建设置”
  3. 在“构建选项”下 -> 将“验证工作区”设置为“是”
  4. 成功构建后,将其设置回“NO”

原因:“在Xcode 12+中,Validate Workspace的默认选项在内部没有设置。我们需要手动设置以避免这种错误。设置回默认的'NO'选项没有问题。


gor*_*mwe 3

经过几天尝试寻找在 iOS 设备上测试 Flutter 应用程序的解决方案,我终于找到了这个:

flutter clean
flutter build ios
Run Code Online (Sandbox Code Playgroud)

- 打开 xCode 并在您的设备上运行应用程序。

  • 请点击此链接:https://flutter.dev/docs/development/ios-project-migration (5认同)