Flutter-为iOS构建,但是链接和嵌入式框架'App.framework'是为iOS Simulator构建的

时间:2020-03-27 07:42:59

标签: xcode android-studio flutter dart

在使用Xcode 13.4 beta更新到Catalina 10.15.4 beta之后,该模拟器还将Simulator更新为13.4(921.4)。

该应用程序可以在物理连接的设备上编译并正确运行,但是任何设备的仿真器都无法通过此阶段。

我收到了错误

为iOS构建,但为iOS Simulator构建了链接和嵌入式框架'App.framework'。

是为iOS Simulator构建的,但是链接和嵌入式框架'App.framework'是为iOS构建的。

enter image description here

我该如何解决?

10 个答案:

答案 0 :(得分:62)

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

要解除卡住,请遵循以下说明;

  • 快速修复(使模拟器正常工作)

rm -rf ios/Flutter/App.framework

  • Official推荐的手动迁移步骤

    1. 从Flutter应用程序目录中,打开ios / Runner.xcworkspace Xcode。
    2. 在“导航器”窗格中,找到Flutter组,然后删除App.framework和Flutter.framework。 enter image description here
    3. 在Runner目标构建设置中,“构建阶段”>“使用库链接二进制文件”确认App.framework和Flutter.framework不再存在。还要在“构建阶段”>“嵌入框架”中进行确认。

enter image description here

  1. 按如下所示更改Runner目标构建设置Build Phases> Thin Binary脚本:

    / bin / sh“ $ FLUTTER_ROOT / packages / flutter_tools / bin / xcode_backend.sh” 嵌入

    / bin / sh“ $ FLUTTER_ROOT / packages / flutter_tools / bin / xcode_backend.sh” 薄

enter image description here

  1. 在Runner目标中 Build Settings>其他链接器标记

    (OTHER_LDFLAGS)添加$(继承)-frameflutter

enter image description here

希望有帮助!

答案 1 :(得分:9)

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

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

答案 2 :(得分:4)

Xcode 11.4更改了框架的链接和嵌入式方式,这导致在iOS设备和模拟器之间切换的问题。

请遵循official guide,了解如何迁移项目。

答案 3 :(得分:3)

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

flutter clean
flutter build ios

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

答案 4 :(得分:3)

已更新为Xcode 11.4。 iOS 13.4,IphoneX。应用程序仅使用API​​提取数据。 应用在白屏上启动,然后最终在模拟器和设备上崩溃。

我遵循了官方指南(我也是rm -rf ios/Flutter/App.frameworkflutter.dev/docs/development/ios-project-migration。 我跑了几次flutter clean

我还尝试删除Pods /文件夹和Podfile.lock,然后使用ios文件夹中的pod install重新安装。

由于我使用的是异步数据,因此我也在main()中添加为第一行

WidgetsFlutterBinding.ensureInitialized();

没有帮助,应用程序没有启动任何一个模拟器。

然后,我删除了ios/android/文件夹。之后,我在项目文件夹中运行了命令flutter create .,该命令重新生成了提到的文件夹。

此后,我的应用在模拟器和设备上均正常运行。 我希望这会对其他人有所帮助。注意!!如果您手动修改了这些文件夹,请事先进行备份或提交。

答案 5 :(得分:0)

我已经在flutter的官方网站上尝试了该解决方案,但是它对我不起作用,因此我找到了一个对我有用的临时解决方案,但是这使我付出了一些辛苦的工作: 这是我的stick_framework项目示例,这是一个全新的项目(首次在模拟器上运行)

  1. 我在flutter项目中创建了2个名为
    的文件夹 “ ios_simulator”和“ ios_real_device”。 enter image description here

  2. 现在我的第一个构建是针对模拟器的,然后我想切换到真实设备,将Flutter项目中的ios文件夹移至“ ios_simulator”

  3. 我使用Visual Studio代码打开该项目,然后运行“ flutter create”。现在,我将选择一个真实的设备来重建项目(如果您的模拟器在线,请退出)。 enter image description here
  4. 现在,我等待构建完成并在真实设备上运行,没有任何错误。现在,我有2个ios项目1用于模拟器,一个用于真实设备。
  5. 下次,当我想再次在模拟器上运行时,只需删除当前的ios文件夹,然后将放置在“ ios_simulator”上的ios文件夹复制回flutter项目文件夹。希望有帮助

答案 6 :(得分:0)

手动将Flutter升级到1.15版也可以解决此问题。运行flutter version v1.15.17对我有帮助。

此外,您可以通过运行beta命令来切换到devflutter channel频道,但请确保对照所有BC更改检查代码...

答案 7 :(得分:0)

就我而言,它仅适用于模拟器(调试)。如果您想在应用商店(发行版)上部署应用,我强烈建议您使用以下方式升级Flutter版本:

flutter version v1.15.17

否则,您将遇到崩溃的白色屏幕应用程序。

只需升级flutter版本,一切正常

答案 8 :(得分:0)

此错误是由 Xcode 11.4 引起的,可以通过删除/重新嵌入框架并添加新的运行脚本阶段来解决

  • 常规下->“框架,库和嵌入式内容”

    • 删除引起错误的框架。
    • 删除后,将框架重新嵌入到同一位置。
  • 构建阶段下,添加一个新的运行脚本阶段。

    • 在“构建阶段”窗格中选择“ +”按钮以创建“新运行脚本阶段”。

    • 确认脚本是最底层的构建阶段,并配置其字段。

      • Shell 文本字段应显示为/bin/sh(这是默认值)。
      • 在文本输入区域中,输入shell命令rm -r "FRAMEWORK_DIRECTORY/YOUR_FRAMEWORK.framework/"

Run Script Phase

答案 9 :(得分:0)

这里没有其他解决方案对我有用。就我而言,通过在我的项目中搜索ONLY_ACTIVE_ARCH并将它们全部更改为YES,可以解决此问题。我在这里找到了解决方案:

https://developer.apple.com/forums/thread/656509