Flutter: Несколько команд создают /build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework

Созданный на 16 авг. 2018  ·  50Комментарии  ·  Источник: flutter/flutter

Когда я хочу отладить приложение в среде MacOs, оно выдает такую ​​ошибку:

Несколько команд создают /build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework
1) Целевой объект Runner имеет команду копирования из /ios/Flutter/Flutter.framework в /build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework.
2) Эта команда зависит от команды в Target 'Runner': этап сценария «[CP] Embed Pods Frameworks»
предупреждение: игнорирование дублированного выходного файла: '//build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework' (в целевом 'Runner')
Примечание: Использование новой системы сборки Примечание: Планирование сборки Примечание: Описание сборки сборки

Mac 10.14 Бета
Xcode 10 бета

Как это исправить? Большое спасибо

annoyance crowd platform-ios crash tool

Самый полезный комментарий

Я смог исправить это, открыв проект рабочей области Runner в Xcode 10. Затем перейдите к File , Workspace Settings и измените систему сборки на Legacy Build System .

schermafbeelding 2018-08-16 om 14 10 10

Все 50 Комментарий

Не могли бы вы указать точные шаги, как воспроизвести?
Как ты создавал проект?
Какие файлы вы меняли, какие вносили?

Пожалуйста, добавьте вывод flutter doctor -v .

Я смог исправить это, открыв проект рабочей области Runner в Xcode 10. Затем перейдите к File , Workspace Settings и измените систему сборки на Legacy Build System .

schermafbeelding 2018-08-16 om 14 10 10

большое спасибо! оно работает.

Затронутые проекты

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

Обходные пути

Есть два обходных пути:

  • Вариант 1. Используйте устаревшую систему сборки. Как отмечает @ gi097 , откройте ios/Runner.xcworkspace и измените систему сборки на Legacy Build System .
  • Вариант 2. Используйте новую систему сборки Xcode 10.

    1. Открыть ios/Runner.xcworkspace

    2. Выберите проект Runner на боковой панели навигатора проекта.

    3. В главном представлении выберите цель Runner , затем выберите вкладку Build Phases .

    4. Разверните фазу Embed Frameworks и выберите Flutter.framework из списка встроенных фреймворков.

    5. Щелкните - чтобы удалить Flutter.framework из списка (не забудьте оставить App.framework ).

Первопричина

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

  1. Фаза сборки Embed Frameworks для проекта Runner
  2. Фаза сборки [CP] Embed Pods Frameworks которую pod install создает в проекте.

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

Немедленное исправление

Немедленное исправление заключается в том, чтобы найти способ автоматически вернуться к исправлению устаревшей сборки до тех пор, пока не будет найдено более долгосрочное лучшее решение. Предыдущие бета-версии поддерживали -useNewBuildSystem=NO или -useModernBuildSystem=NO но похоже, что это было удалено в сборке GM. Похоже, что в настоящее время это можно сделать, добавив пару "ключ-значение" ( <key>BuildSystemType</key><string>Original</string> ) к ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings .

Долгосрочное исправление

Самым простым вариантом было бы исключить Flutter.framework из шага Embed Frameworks, описанного выше, и всегда полагаться на установку модуля, даже в случае отсутствия зависимостей плагинов. Нам нужно будет обновить инструмент Flutter, чтобы автоматически редактировать существующие проекты, чтобы удалить Flutter.framework из шага Embed Frameworks.

за: более простой код. против: делает cocoapods необходимым этапом установки для разработки Flutter, первый запуск включает огромную и очень медленную загрузку их репозитория.

Немного более приятным вариантом было бы для нас автоматически определять, использует ли проект плагины или нет, и редактировать проект Xcode, чтобы автоматически проверять и удалять Flutter.framework из шага Embed Frameworks, если плагины используются, или добавлять его, если нет.

за: лучший пользовательский интерфейс. против: более сложный код.

В любом случае нам нужен какой-то механизм для автоматического редактирования файла project.pbxproj и удаления фреймворка из этапа сборки встроенных фреймворков. Поддержка его повторного добавления - это не так уж много дополнительных усилий и приводит к лучшему опыту.

/ cc @tvolkert @gspencergoog @dnfield

Извините, я не собирался заливать ваш трекер проблем.

Я следил за этой резолюцией # 20685

но теперь это приводит к следующей ошибке

captura de tela 2018-09-18 as 10 06 38 am

Кто-нибудь знает, как это решить?
@ gi097 @cbracken @zoechi @sidealice @hungrymonkey

@tiagosito Патч моментально приземлится в ветке master . В настоящее время см. Обходные пути, перечисленные в моем комментарии выше.

@tiagosito Патч на мгновение приземлится на мастере. В настоящее время см. Обходные пути, перечисленные в моем комментарии выше.

@cbracken Я выбрал вариант 2, о котором вы сообщили № 20685

Но у меня была небольшая проблема # 21989

Решено таким образом # 21989

Я не использую основной канал. Когда выйдет патч, о котором вы говорили, я столкнусь с тем же решением на бета-канале?

@cbracken и @ gi097 сейчас большое спасибо

также была эта проблема ранее сегодня после перехода на iOS 12, которая тогда требовала xcode 10, который затем сломал флаттер. вариант 2 выше работал, но вы должны стереть кеш сборки пакета:

~/flutter/.pub-cache/hosted/
flutter clean
flutter packages get

а то будешь чесать затылок.

«Немедленное исправление» в моем комментарии выше попало на master. Работаем над тем, чтобы как можно скорее передать это на канал dev .

К вашему сведению, теперь это попало на канал dev .

Большой!
Кстати, как нам применить этот патч в существующих проектах? Просто сделав апгрейд флаттера?

@tadejkan Вам нужно запустить flutter channel dev чтобы переключиться на канал разработчика, затем flutter upgrade .

@cbracken остается сомнение в том, что ... мы будем использовать устаревший режим компиляции или патч уже исправит для нового режима компиляции.

Другими словами, применяет ли патч решение шага 1 или шага 2, которое вы здесь представили, или это уже окончательное решение, и когда этот патч будет применен к бета-каналу?

@tiagosito, патч, который я получил, реализует «немедленное исправление», описанное выше (вернуться в систему сборки до Xcode 10), что дает нам время для реализации исправления, которое делает это правильно. Для этого есть альтернативное быстрое исправление, но оно сделает CocoaPods обязательным требованием для всех приложений Flutter, созданных на iOS (даже тех, которые не полагаются на плагины). Учитывая начальный размер / время загрузки для первого запуска CocoaPods, я бы предпочел избежать этого пути.

Правильным решением для этого является определение того, когда используются CocoaPods / плагины, и использование CocoaPods для встраивания Flutter.framework в выходное приложение в этих случаях, а во всех остальных случаях - запуск шага встраивания самостоятельно. Я буду работать над этим дальше.

Я столкнулся с проблемами при сборке ios, которые я не могу решить уже 4 полных дня ... теперь я очень беспомощен, когда перепробовал так много вещей и комбинаций; становится очень запутанным и грустным.
Это последняя ошибка после нескольких различных ошибок:

duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._localAuthenticationInfo in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._keychainInfo in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._hasLocalAuthentication in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._hasKeychain in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._cachedState in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._keychainExpireTime in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_CLASS_$_MDMPasscodeCache in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_METACLASS_$_MDMPasscodeCache in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeCache._hasEnteredBackground in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeCache_f189776e75765630b82721fafea64052.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeCache_42de90102bb6814d03833694aafcc99d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeState._status in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeState_d2697588db599ad1e82d46f342216cee.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeState_adbe96d99863168799049cc0f0164c6d.o) duplicate symbol _OBJC_IVAR_$_MDMPasscodeState._info in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeState_d2697588db599ad1e82d46f342216cee.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeState_adbe96d99863168799049cc0f0164c6d.o) duplicate symbol _OBJC_CLASS_$_MDMPasscodeState in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeState_d2697588db599ad1e82d46f342216cee.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeState_adbe96d99863168799049cc0f0164c6d.o) duplicate symbol _OBJC_METACLASS_$_MDMPasscodeState in: /Volumes/flutter/ios/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(MDMPasscodeState_d2697588db599ad1e82d46f342216cee.o) /Volumes/flutter/ios/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn(MDMPasscodeState_adbe96d99863168799049cc0f0164c6d.o) ld: 13 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

ld: 13 duplicate symbols for architecture x86_64
Launching lib/main.dart on iPhone XS Max in debug mode...
Xcode build done.
Failed to build iOS app
Error output from Xcode build:
↳
** BUILD FAILED **
Xcode's output:
↳
warning: The iOS Simulator deployment target is set to 4.3, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'nanopb')
warning: The iOS Simulator deployment target is set to 6.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'GoogleUtilities')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'GTMSessionFetcher')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'Protobuf')
warning: The iOS Simulator deployment target is set to 5.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'leveldb-library')
warning: The iOS Simulator deployment target is set to 5.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'BoringSSL')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC-RxLibrary')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC-Core')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC-C++')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC-gRPCCertificates')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC')
warning: The iOS Simulator deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'gRPC-ProtoRPC')
warning: The iOS Simulator deployment target is set to 6.0, but the range of supported deployment target versions for this platform is 8.0 to 12.0. (in target 'cloud_firestore')
duplicate symbol __channel in:
/Users/erikiado/Code/internals/flutter/find_word/build/ios/Debug-iphonesimulator/audioplayers/libaudioplayers.a(AudioplayersPlugin.o)
/Users/erikiado/Code/internals/flutter/find_word/build/ios/Debug-iphonesimulator/firebase_admob/libfirebase_admob.a(FLTMobileAd.o)
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: Using new build systemnote: Planning buildnote: Constructing build description
Could not build the application for the simulator.
Error launching application on iPhone XS Max.
Exited (sigterm)

@erikiado и @LiveRock: ваши проблемы (повторяющиеся символы в сборках симулятора x86_64) не связаны с этим. Следите за тем, как продвигается работа по номеру # 22020.

ETA для бета-канала?

@lukepighetti теперь beta (по состоянию на несколько минут назад). flutter upgrade прочь!

Исправлена ​​моя проблема. Спасибо!

@sidealice , это исправлено и для вас?

спасибо, решение 2 сработало!

К сожалению, без дополнительной информации мы не знаем, как решить эту проблему. Поэтому мы пока неохотно закрываем эту ошибку. Пожалуйста, не стесняйтесь комментировать ошибку, если у вас есть для нас дополнительная информация; мы его сразу откроем!
Спасибо за ваш вклад.
cc @Hixie

Спасибо брат ! оно работает.

У меня все еще возникает эта проблема на стабильном канале Flutter v1.0.0
Предполагается, что исправление находится в стабильной версии?

[✓] Flutter (стабильный канал, v1.0.0, в Mac OS X 10.14.1 18B75, локаль en-GB)
• Flutter версии 1.0.0 в / usr / local / share / flutter
• Ревизия фреймворка 5391447fae (3 недели назад), 2018-11-29 19:41:26 -0800
• Ревизия двигателя 7375a0f414
• Dart версии 2.1.0 (сборка 2.1.0-dev.9.4 f9ebf21297)

[✓] Набор инструментов iOS - разработка для устройств iOS (Xcode 10.1)
• Xcode в /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, версия сборки 10B61
• ios-deploy 2.0.0
• CocoaPods версии 1.5.3

@JannieT, пожалуйста, также отметьте dev .
Я не знаю, должно ли оно быть в stable , но если оно работает в dev ответ, вероятно, будет «нет».

Спасибо! Просто чтобы подтвердить, исправление находится в стабильной версии 1.0.0.
Я столкнулся с проблемой, потому что я открывал файл .xcodeproject вместо документированного .xcworkspace при попытке создать архив.

У меня сейчас такая же проблема.

error: Multiple commands produce '/Users/n.gendron/Library/Developer/Xcode/DerivedData/Runner-eilfeqiwvjuvbghjmkepqybkaoja/ArchiveIntermediates/Runner/InstallationBuildProductsLocation/Applications/Runner.app/Frameworks/Flutter.framework':
1) Target 'Runner' has copy command from '/Users/n.gendron/Documents/GitLab/techno_store/ios/Flutter/Flutter.framework' to '/Users/n.gendron/Library/Developer/Xcode/DerivedData/Runner-eilfeqiwvjuvbghjmkepqybkaoja/ArchiveIntermediates/Runner/InstallationBuildProductsLocation/Applications/Runner.app/Frameworks/Flutter.framework'
2) That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks”
[✓] Flutter (Channel dev, v1.2.2, on Mac OS X 10.13.6 17G5019, locale fr-CA)
    • Flutter version 1.2.2 at /Library/flutter
    • Framework revision 007a415c2a (5 days ago), 2019-02-21 20:22:47 -0800
    • Engine revision f1f19bba8f
    • Dart version 2.2.0 (build 2.2.0-dev.2.1 c92d5ca288)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/n.gendron/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.4
    • CocoaPods version 1.6.1

[✓] Android Studio (version 3.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 33.1.1
    • Dart plugin version 182.5215
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[✓] VS Code
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.12.2

[✓] Connected device (1 available)
    • iPad de TechnoSolutions • 3e430eb4db265d124e9684f487cc542f2442ed1d • ios • iOS 10.3.3

• No issues found!

Я попробовал Legacy Build System , но потом у меня возникла другая проблема. Я тоже пытался удалить Flutter.framework , но ошибка та же.

#import <barcode_scan/BarcodeScanPlugin.h> # 'barcode_scan/BarcodeScanPlugin.h' file not found

Затронутый плагин - barcode_scan .


Для меня это решило https://github.com/apptreesoftware/flutter_barcode_reader/issues/44#issuecomment -460415307.

open -a Xcode ios

Повторное открытие, поскольку на данный момент мы только нашли обходной путь, а не долгосрочное исправление для перехода на новую систему сборки.

К сожалению, без дополнительной информации мы не знаем, как решить эту проблему. Поэтому мы пока неохотно закрываем эту ошибку. Пожалуйста, не стесняйтесь комментировать ошибку, если у вас есть для нас дополнительная информация; мы его сразу откроем!
Спасибо за ваш вклад.

помогает мне очистить флаттер, а затем построить через студию Android

[✓] Flutter (Channel beta, v1.3.8, on Mac OS X 10.14.4 18E226, locale en-AU)
    • Flutter version 1.3.8 at /Users/yantsui/Installs/flutter
    • Framework revision e5b1ed7a7f (6 weeks ago), 2019-03-06 14:23:37 -0800
    • Engine revision f4951df193
    • Dart version 2.2.1 (build 2.2.1-dev.0.0 571ea80e11)

[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.io/setup/#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, set ANDROID_HOME to that location.
      You may also want to add it to your PATH environment variable.


[✓] iOS toolchain - develop for iOS devices (Xcode 10.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.2, Build version 10E125
    • ios-deploy 1.9.4
    • CocoaPods version 1.6.1

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.io/setup/#android-setup for detailed instructions).

[✓] IntelliJ IDEA Ultimate Edition (version 2018.3.5)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 34.0.2
    • Dart plugin version 183.5912.23

[!] VS Code (version 1.33.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (1 available)
    • iPhone Xʀ • 39D838DF-E49E-4F0A-8F40-B73C91700F6E • ios • com.apple.CoreSimulator.SimRuntime.iOS-12-2 (simulator)

! Doctor found issues in 3 categories.
flutter clean
flutter build ios
Xcode 10 -> Product -> Clean Build Folder
Xcode 10 -> Product -> Run

Ошибка в Xcode:

Showing All Messages
:-1: Multiple commands produce '/Users/meow/Documents/meow/crystal/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework':
1) Target 'Runner' has copy command from '/Users/meow/Documents/meow/crystal/ios/Flutter/Flutter.framework' to '/Users/meow/Documents/meow/crystal/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework'
2) That command depends on command in Target 'Runner': script phase “[CP] Embed Pods Frameworks”

Фиксированный:
Пробежал open -a Xcode ios но похоже, что это не сработало.
Поэтому я открыл проект в Xcode, используя вместо этого Runner.xcworkspace и он сработал.

Эта проблема все еще возникает у меня, даже когда я открываю проект через рабочую область. Кажется, только изменение системы сборки на устаревшую может исправить это.

Мы также можем использовать параметр установки CocoaPods disable_input_output_paths, который удаляет входные и выходные файлы из фазы сборки [CP] Emded Pods Framework. Этот вариант установки был добавлен, потому что новая система сборки Xcode не смогла запустить сценарий даже при касании входных файлов. См. Https://www.ralfebert.de/ios/blog/cocoapods-clean-input-output-files.

Плюсы:

  • Проекты Xcode будут использовать новую систему сборки без ошибок компиляции. Xcode угрожает отказаться от поддержки устаревших сборок, поэтому Flutter будет готов, когда это произойдет.
  • Простое исправление.
  • Нет дополнительной логики для принятия решения о включении Flutter.framework в фазу сборки Embed Frameworks, поскольку он всегда будет включен.
  • Не потребуется, чтобы CocoaPods становился зависимостью, если проект является ванильным Flutter без пакетов.

Минусы:

  • Скрипт Pods-Runner-frameworks.sh будет запускаться при каждой сборке, даже если Flutter.framework не изменяется. На моем MacBook Pro 2018 года это добавляет ~ 1 секунду к сборке.
  • Если новая ошибка системы сборки Xcode устранена, CocoaPods может удалить эту опцию установки, и проблема дублирования копий фреймворка возникнет повторно.
  • Минимальная версия CocoaPods должна быть увеличена с 1.0.0 до 1.6.0, когда была введена опция disable_input_output_paths.

@jmagman Замечательно ! Мне такой подход нравится. Если мы дойдем до точки, где мы увидим плагин Cocoapods, который действительно дорого компилировать, мы можем решить это как оптимизацию. Тем временем это устраняет непосредственный риск!

Благодарность!!!!!

Благодарность

Если вы все еще видите эту ошибку, вам нужно будет перенести свой проект Xcode:

  1. Файл> Настройки рабочей области ...> Система сборки, измените раскрывающийся список на Новая система сборки (по умолчанию)
  2. В вашем Podfile добавьте строку
install! 'cocoapods', :disable_input_output_paths => true

См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. На этапе сборки целевой платформы Runner «[CP] Embed Pods Framework» удалите все выходные файлы.

@jmagman спасибо - но может ли это быть связано с # 18673? Поскольку после миграции (с помощью flutter upgrade , который автоматически выполнил это изменение на моем компьютере в файле Podfile), я могу построить, используя flutter build ios но при попытке архивации в Xcode я выхожу с ошибкой # 18673.

@jmagman спасибо - но может ли это быть связано с # 18673? Поскольку после миграции (с помощью flutter upgrade , который автоматически выполнил это изменение на моем компьютере в файле Podfile), я могу построить, используя flutter build ios но при попытке архивации в Xcode я выхожу с ошибкой # 18673.

@jmagman Я нашел решение, на самом деле этот https://github.com/flutter/flutter/issues/16246#issuecomment -476329255 решил мою проблему. Приносим извинения за неудобства.

@jmagman Для тех из нас, кто менее знаком с XCode, не могли бы вы объяснить шаг 3 дальше? Где находится целевой этап сборки Runner "[CP] Embed Pods Framework" для удаления всех выходных файлов?

Нашел. Нажмите «Runner» на левой панели навигации, затем вкладку «Build Phases», затем прокрутите вниз до «Output Files», выберите все из них, затем нажмите кнопку вычитания, чтобы удалить их.

Как я могу решить эту проблему без Mac? Я использую облачный конвейер для сборки для iOS, но мне нужно решить эту проблему ...

Если вы все еще видите эту ошибку, вам нужно будет перенести свой проект Xcode:

  1. Файл> Настройки рабочей области ...> Система сборки, измените раскрывающийся список на Новая система сборки (по умолчанию)
  2. В вашем Podfile добавьте строку
install! 'cocoapods', :disable_input_output_paths => true

См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. На этапе сборки целевой платформы Runner «[CP] Embed Pods Framework» удалите все выходные файлы.

Или вы можете сделать №1 и №2, а затем запустить pod install из каталога ios, и CocoaPods должен автоматически удалить этот выходной файл на этапе сборки.

@gincos Если у вас нет Mac, вы можете посмотреть PR https://github.com/flutter/flutter/pull/33684/ для примера того, как настроить файлы Xcode вручную. Если у вас Mac, выполните указанные выше действия!

  1. Удалите файл ios / Runner.xcworkspace / xcshareddata / WorkspaceSettings.xcsettings. Это то, что происходит под прикрытием с помощью File> Workspace Settings ...> Build System> New Build System (Default).
    https://github.com/flutter/flutter/pull/33684/files#diff -e7ad834b29956b3cbd9225dc81f2c06a

    1. В вашем Podfile добавьте строку

      install! 'cocoapods', :disable_input_output_paths => true

      https://github.com/flutter/flutter/pull/33684/files#diff -4e7de62cf4dff9802f06b7f3cb120939

Надеюсь, ваш облачный конвейер должен запускать pod install и позаботиться о # 3 выше за вас.

Если вы все еще видите ошибку, вы можете отредактировать ios / Runner.xcodeproj / project.pbxproj, чтобы удалить выходной файл вручную. Пожалуйста, будьте осторожны! Файл проекта Xcode не терпит повреждений.
https://github.com/flutter/flutter/pull/33684/files#diff -e9e57f7f2e911a135acd8f08e79b20e1

@jmagman Спасибо! Это сработало как шарм! Да, облачный провайдер запускает установку модуля, и теперь он создает правильный артефакт как для Android, так и для iOS в последней бета-версии.

Затронутые проекты

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

Обходные пути

Есть два обходных пути:

  • Вариант 1. Используйте устаревшую систему сборки. Как отмечает @ gi097 , откройте ios/Runner.xcworkspace и измените систему сборки на Legacy Build System .
  • Вариант 2. Используйте новую систему сборки Xcode 10.

    1. Открыть ios/Runner.xcworkspace
    2. Выберите проект Runner на боковой панели навигатора проекта.
    3. В главном представлении выберите цель Runner , затем выберите вкладку Build Phases .
    4. Разверните фазу Embed Frameworks и выберите Flutter.framework из списка встроенных фреймворков.
    5. Щелкните - чтобы удалить Flutter.framework из списка (не забудьте _keep_ App.framework ).

Первопричина

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

  1. Фаза сборки Embed Frameworks для проекта Runner
  2. Фаза сборки [CP] Embed Pods Frameworks которую pod install создает в проекте.

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

Немедленное исправление

Немедленное исправление заключается в том, чтобы найти способ автоматически вернуться к исправлению устаревшей сборки до тех пор, пока не будет найдено более долгосрочное лучшее решение. Предыдущие бета-версии поддерживали -useNewBuildSystem=NO или -useModernBuildSystem=NO но похоже, что это было удалено в сборке GM. Похоже, что в настоящее время это можно сделать, добавив пару "ключ-значение" ( <key>BuildSystemType</key><string>Original</string> ) к ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings .

Долгосрочное исправление

Самым простым вариантом было бы исключить Flutter.framework из шага Embed Frameworks, описанного выше, и всегда полагаться на установку модуля, даже в случае отсутствия зависимостей плагинов. Нам нужно будет обновить инструмент Flutter, чтобы автоматически редактировать существующие проекты, чтобы удалить Flutter.framework из шага Embed Frameworks.

за: более простой код. против: делает cocoapods необходимым этапом установки для разработки Flutter, первый запуск включает огромную и очень медленную загрузку их репозитория.

Немного более приятным вариантом было бы для нас автоматически определять, использует ли проект плагины или нет, и редактировать проект Xcode, чтобы автоматически проверять и удалять Flutter.framework из шага Embed Frameworks, если плагины используются, или добавлять его, если нет.

за: лучший пользовательский интерфейс. против: более сложный код.

В любом случае нам нужен какой-то механизм для автоматического редактирования файла project.pbxproj и удаления фреймворка из этапа сборки встроенных фреймворков. Поддержка его повторного добавления - это не так уж много дополнительных усилий и приводит к лучшему опыту.

/ cc @tvolkert @gspencergoog @dnfield

@cbracken Спасибо, все работает, спасибо за помощь

Повторное копирование настоящей миграции, поскольку она с тех пор похоронена.

Если вы все еще видите эту ошибку, вам нужно будет перенести свой проект Xcode:

  1. Файл> Настройки рабочей области ...> Система сборки, измените раскрывающийся список на Новая система сборки (по умолчанию)
  2. В вашем Podfile добавьте строку
install! 'cocoapods', :disable_input_output_paths => true

См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. Запустить flutter build ios

Я собираюсь заблокировать это, чтобы эти инструкции по миграции оставались в конце этого выпуска. Сообщите о новом выпуске, если после выполнения этих инструкций у вас возникнут дополнительные проблемы.

ОБНОВЛЕНИЕ: если вы следуете инструкциям по миграции на https://flutter.dev/docs/development/ios-project-migration, вы можете удалить install! 'cocoapods', :disable_input_output_paths => true из своего ios/Podfile . Это может сократить время компиляции, если вы используете плагины Flutter.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги