在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)
我试图重新创建项目,并将所有源文件复制到新的项目文件夹中,但无法解决问题。
答案 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)
此解决方案对我有用。
答案 2 :(得分:1)
install! 'cocoapods', :disable_input_output_paths => true
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)
答案 5 :(得分:0)
我今天遇到了这个问题,但没有解决。然后我检查了我的 xcode 项目,我发现了 Insider runner 文件夹,我发现另一个 runner 显示红色,这是以前没有的。所以我删除它并重新运行我的项目,它解决了我的问题。
我尝试了上述方法,但没有解决我的问题。但是您可以同时尝试这两种方式,看看哪一种适合您。