Xcode升级后,Flutter iOS构建失败错误,并带有多个命令

时间:2018-09-19 05:12:16

标签: ios build flutter cross-platform

在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)

我试图重新创建项目,并将所有源文件复制到新的项目文件夹中,但无法解决问题。

6 个答案:

答案 0 :(得分:9)

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

  

受影响的项目

     

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

     

有两种解决方法:

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

根本原因

     

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

     

Runner项目的Embed Frameworks构建阶段

     

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

     

项目(1)用于确保将框架复制到已构建的应用程序中   如果没有插件(因此没有CocoaPods   集成到Xcode项目中)。第(2)项在这里是因为Flutter的   podspec将Flutter.framework声明为vended_framework,并且   CocoaPods自动为每个此类添加一个复制步骤   临时关闭CocoaPods依赖项中的vended_framework。

答案 1 :(得分:6)

此解决方案对我有用。

  1. 打开ios / Runner.xcworkspace在项目中选择Runner项目 导航器侧栏。
  2. 在主视图中,选择Runner目标,然后选择“构建阶段”选项卡。
  3. 展开Embed Frameworks阶段,然后从中选择Flutter.framework 嵌入式框架列表。
  4. 单击-从列表中删除Flutter.framework(请确保保留 App.framework)。

答案 2 :(得分:1)

  1. 在Xcode中打开ios / Runner.xcworkspace。 “文件”>“工作区设置...”>“构建系统”,将下拉列表更改为“新构建系统(默认)”
  2. 在您的Podfile中,添加行
install! 'cocoapods', :disable_input_output_paths => true
  1. 在您的Flutter应用中,再次进行构建以触发pod install,这将自动清除构建阶段
flutter build ios

请参阅: https://github.com/flutter/flutter/issues/20685#issuecomment-509731873 https://github.com/flutter/flutter/issues/20685#issuecomment-510162863

警告: 请勿使用Xcode弃用的旧版生成系统来解决此问题,如其他答案中所述。

答案 3 :(得分:1)

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

我花了 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 

答案 4 :(得分:0)

此问题已通过在Xcode 10中打开Runner工作区项目得到解决,然后导航至“文件”,“工作区设置”,并将生成系统更改为“旧版生成系统”。 enter image description here

答案 5 :(得分:0)

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

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