Xcode升级后,使用多个命令消除iOS构建失败错误

问题描述 投票:3回答:2

升级到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)

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

ios build flutter cross-platform
2个回答
11
投票

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

Affected projects

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

There are two workarounds:

  • 选项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)。

Root cause

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

Embed框架为Runner项目构建阶段

[CP]嵌入Pods框架构建pod安装在项目中创建的阶段。

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


7
投票

这个解决方案对我有用。

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

0
投票

通过在Xcode 10中打开Runner工作区项目来解决此问题。然后导航到File,Workspace Settings并将构建系统更改为Legacy Build System。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.