【问题标题】:Flutter - Building for iOS, but the linked and embedded framework 'App.framework' was built for iOS SimulatorFlutter - 为 iOS 构建,但链接和嵌入式框架“App.framework”是为 iOS 模拟器构建的
【发布时间】:2020-07-07 22:36:44
【问题描述】:

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

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

我得到了错误

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

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

我该如何解决这个问题?

【问题讨论】:

标签: xcode android-studio flutter dart


【解决方案1】:

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

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

  • 快速修复(让您的模拟器正常工作)

rm -rf ios/Flutter/App.framework

  • Official推荐手动迁移的步骤

    1. 在 Flutter 应用目录中,打开 ios/Runner.xcworkspace Xcode。
    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 脚本如下:

    /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

希望对你有帮助!

【讨论】:

  • 像魅力一样工作!
  • 第一步需要注意的一点 - 删除参考
【解决方案2】:
  1. 从“TARGETS”中选择您的目标
  2. 选择“构建设置”
  3. 在“构建选项”下 -> 将“验证工作区”设置为“是”
  4. 构建成功后,设置回“NO”

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

【讨论】:

【解决方案3】:

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

请关注official guide,了解如何迁移您的项目。

【讨论】:

  • 按照官方指南后,我的应用仍然没有加载到我的物理设备上。只是按照指南,运行flutter clean几次,删除Pods/文件夹和Podfile.lock,然后在ios文件夹中使用pod install重新安装,它终于工作了。
【解决方案4】:

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

flutter clean
flutter build ios

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

【讨论】:

【解决方案5】:

更新到 Xcode 11.4。 Ios 13.4,Iphone X。应用程序只是使用 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 . 重新生成提到的文件夹。

在此之后,我的应用程序在模拟器和设备上都可以正常启动。 我希望这对其他人有帮助。笔记!!如果您手动对这些文件夹进行了任何修改,请提前备份或提交。

【讨论】:

    【解决方案6】:

    我在flutter官网上试过解决方案,但对我不起作用,所以我找到了一个对我有用的临时解决方案,但我花了一些功夫: 这是我的项目stuck_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 文件夹复制回颤振项目文件夹。希望对您有所帮助

    【讨论】:

      【解决方案7】:

      手动升级 Flutter 到 1.15 版本也可以解决这个问题。运行 flutter version v1.15.17 帮助了我。

      此外,您可以通过运行flutter channel 命令切换到betadev 频道,但请务必检查您的代码是否针对所有BC 更改...

      【讨论】:

        【解决方案8】:

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

        flutter version v1.15.17
        

        否则你会遇到白屏的应用崩溃。

        只需升级 Flutter 版本即可一切正常

        【讨论】:

        • 1.15.17 尚未进入稳定频道。
        【解决方案9】:

        这个错误是由Xcode 11.4引起的,可以通过Removing / Re-Embedding框架和添加一个新的Run Script Phase来解决.

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

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

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

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

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

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

            猜你喜欢
            • 2021-05-30
            • 1970-01-01
            • 1970-01-01
            • 2020-11-25
            • 1970-01-01
            • 2022-01-08
            • 2022-06-23
            • 2020-07-11
            • 2021-12-25
            相关资源
            最近更新 更多