Ошибка сбоя сборки iOS Flutter с несколькими командами после обновления Xcode - PullRequest
0 голосов
/ 19 сентября 2018

Сборка Flutter iOS завершается неудачно после обновления до версии Xcode 10.0 в Mac.

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)

Я попытался воссоздать проект и скопировал все исходные файлы в новую папку проекта, но это не решило проблему.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Это решение сработало для меня.

  1. Открыть ios / Runner.xcworkspace Выберите проект Runner на боковой панели навигатора проекта.
  2. На главном экране выберите цель Runner, затем перейдите на вкладку «Фазы сборки».
  3. Разверните фазу «Встроить фреймворки» и выберите Flutter.framework из списка встроенных фреймворков.
  4. Нажмите -, чтобы удалить Flutter.framework из списка (не забудьте сохранить App.framework).
0 голосов
/ 03 июля 2019

Эта проблема была исправлена ​​открытием проекта рабочей области Runner в Xcode 10. Затем перейдите к File, Workspace Settings и измените систему сборки на Legacy Build System.enter image description here

0 голосов
/ 19 сентября 2018

Это известная проблема.Вот объяснение и некоторые обходные пути: https://github.com/flutter/flutter/issues/20685#issuecomment-421511890

Затрагиваемые проекты

Эта проблема затрагивает все проекты Flutter, созданные с использованием Xcode 10, которые зависят от CocoaPods - обычно это означает, что текоторые полагаются на плагины.Обходные пути

Существует два обходных пути:

  • Вариант 1. Использование устаревшей системы сборки.Как отмечает @ gi097, откройте ios / Runner.xcworkspace и измените систему сборки на Legacy Build System.
  • Вариант 2: Используйте новую систему сборки Xcode 10.Откройте ios / Runner.xcworkspace. Выберите проект Runner на боковой панели навигатора проекта.На главном экране выберите цель Runner, затем перейдите на вкладку Build Phases.Разверните этап «Внедрение фреймворков» и выберите «Flutter.framework» из списка «Встраиваемые фреймворки».Нажмите -, чтобы удалить Flutter.framework из списка (не забудьте сохранить App.framework).

Основная причина

Когда используются плагины, есть два конкурирующих действия по сборке, которыескопируйте Flutter.framework в каталог Frameworks приложения сборки:

Фаза сборки Embed Frameworks для проекта Runner

Фаза сборки [CP] Embed Pods Frameworks, которую устанавливает pod install в проекте.

Элемент (1) предназначен для того, чтобы гарантировать, что фреймворк будет скопирован во встроенное приложение в случае отсутствия плагинов (и, следовательно, не интеграции CocoaPods в проект Xcode).Элемент (2) существует потому, что подспек Flutter объявляет Flutter.framework как vended_framework, а CocoaPods автоматически добавляет шаг копирования для каждого такого vended_framework при транзитивном закрытии зависимостей CocoaPods.

...