升级到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)
我尝试重新创建项目并将所有源文件复制到新项目文件夹,但它没有解决问题。
这是一个众所周知的问题。以下是解释和一些解决方法: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添加一个复制步骤。
这个解决方案对我有用。