17

在 mac 中升级到 Xcode 10.0 版本后,Flutter iOS 构建失败。

Nagendras-MacBook-Pro:uaenumber nagendra$ flutter run
Launching lib/main.dart on iPhone X in debug mode...
Starting Xcode build...
Xcode build done.                                            1.4s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

Xcode's output:
↳
    error: Multiple commands produce '/Users/dev/Documents/projects/Personal/uaenumber/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework':
    1) Target 'Runner' has copy command from '/Users/dev/Documents/projects/Personal/uaenumber/ios/Flutter/Flutter.framework' to '/Users/dev/Documents/projects/Personal/uaenumber/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework'
    2) That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks”
    warning: The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objcinference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "Runner" target. (in target 'Runner')
    warning: ignoring duplicated output file: '/Users/nagendra/Documents/projects/Personal/uaedialer/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework' (in target 'Runner')
    note: Using new build systemnote: Planning buildnote: Constructing build description
Could not build the application for the simulator.
Error launching application on iPhone X.

Xcode 版本 - 10.0 (10A255)

我尝试重新创建项目并将所有源文件复制到新项目文件夹,但它没有解决问题。

4

6 回答 6

19

这个解决方案对我有用。

  1. 打开 ios/Runner.xcworkspace 在项目导航器侧边栏中选择 Runner 项目。
  2. 在主视图中,选择 Runner 目标,然后选择 Build Phases 选项卡。
  3. 展开 Embed Frameworks 阶段并从嵌入式框架列表中选择 Flutter.framework。
  4. 点击 - 从列表中移除 Flutter.framework(一定要保留 App.framework)。
于 2018-09-19T07:38:48.367 回答
14

这是一个已知问题。这是解释和一些解决方法: https ://github.com/flutter/flutter/issues/20685#issuecomment-421511890

受影响的项目

这个问题会影响所有使用 Xcode 10 构建的依赖 CocoaPods 的 Flutter 项目——通常这意味着那些依赖插件的项目。解决方法

有两种解决方法:

  • 选项 1:使用旧版构建系统。如@gi097 所述,打开 ios/Runner.xcworkspace,并将构建系统更改为 Legacy Build System。
  • 选项 2:使用新的 Xcode 10 构建系统。打开 ios/Runner.xcworkspace 在项目导航器侧边栏中选择 Runner 项目。在主视图中,选择 Runner 目标,然后选择 Build Phases 选项卡。展开 Embed Frameworks 阶段并从嵌入式框架列表中选择 Flutter.framework。点击 - 从列表中移除 Flutter.framework(一定要保留 App.framework)。

根本原因

当使用插件时,有两个相互竞争的构建操作将 Flutter.framework 复制到构建应用程序的 Frameworks 目录中:

Runner 项目的嵌入框架构建阶段

pod install 在项目中创建的 [CP] Embed Pods Frameworks 构建阶段。

第 (1) 项用于确保在没有插件的情况下将框架复制到构建的应用程序中(因此 Xcode 项目中没有 CocoaPods 集成)。第 (2) 项之所以存在,是因为 Flutter 的 podspec 将 Flutter.framework 声明为 vended_framework,而 CocoaPods 会在 CocoaPods 依赖项的传递闭包中自动为每个此类 vended_framework 添加一个复制步骤。

于 2018-09-19T06:01:04.950 回答
5

编辑: Flutter 的最新稳定版本会将您的 Xcode 项目迁移到新的构建系统(下面的第一步),并完全避免多个嵌入式框架警告。如果没有,请按照https://flutter.dev/docs/development/ios-project-migration上的说明进行操作。您不再需要编辑 Podfile(下面的第二步)。

https://github.com/flutter/flutter/issues/20685#issuecomment-622126064

上一个答案

  1. 在 Xcode 中打开 ios/Runner.xcworkspace。文件 > 工作区设置... > 构建系统,将下拉列表更改为新构建系统(默认)
  2. 在您的 Podfile 中,添加该行
install! 'cocoapods', :disable_input_output_paths => true

3. 在你的 Flutter 应用中,再次构建触发 a pod install,它会自动清理构建阶段

flutter build ios

见: https ://github.com/flutter/flutter/issues/20685#issuecomment-509731873 https://github.com/flutter/flutter/issues/20685#issuecomment-510162863

警告:不要按照其他答案中的建议恢复到 Xcode 已弃用的旧版构建系统来解决此问题。

于 2019-10-14T20:49:40.320 回答
5

此问题已通过在 Xcode 10 中打开 Runner 工作区项目得到修复。然后导航到 File、Workspace Settings 并将构建系统更改为 Legacy Build System。 在此处输入图像描述

于 2019-07-03T15:17:07.970 回答
4

如果您已经尝试了所有方法但仍然无法成功构建存档,那么您看起来像我的情况。

我花了 3 个工作日来解决这个问题。Notification Services将目标添加到项目后发生了我的问题。但它看起来也适用于许多其他情况:

该问题是由库里面的2个目标多个命令产生的。在我的情况下,例如,在项目目标和通知扩展目标中,两者GoogleUtilities都有这导致它们发生冲突或重复产生的命令。解决方案是在顶层明确依赖关系。pod 文件将如下所示:

platform :ios, '10.0'
use_frameworks!
inhibit_all_warnings!

pod 'GoogleUtilities' // Add this line is very important.

target 'MyProject' do
  pod 'Firebase/Analytics'
  pod 'Firebase/Crashlytics'
  pod 'Firebase/Messaging'
# Other pods
end

target 'NotificationService' do
  pod 'Firebase/Messaging'
end

运行后:

pod deintegrate
pod install 
于 2021-04-07T11:47:41.963 回答
0

我今天遇到了这个问题,没有解决它。然后我检查了我的 xcode 项目,我发现内部 runner 文件夹我发现另一个 runner 显示红色,这是以前不存在的。所以我删除它并重新运行我的项目,它解决了我的问题。

我尝试了上述方法,但没有解决我的问题。但是您可以尝试两种方法,看看哪一种适合您。

于 2021-01-27T20:12:17.937 回答