Когда я хочу отладить приложение в среде 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 бета
Как это исправить? Большое спасибо
Не могли бы вы указать точные шаги, как воспроизвести?
Как ты создавал проект?
Какие файлы вы меняли, какие вносили?
Пожалуйста, добавьте вывод flutter doctor -v
.
Я смог исправить это, открыв проект рабочей области Runner
в Xcode 10. Затем перейдите к File
, Workspace Settings
и измените систему сборки на Legacy Build System
.
большое спасибо! оно работает.
Эта проблема затрагивает все проекты Flutter, созданные с использованием Xcode 10, которые зависят от CocoaPods - обычно это означает те, которые полагаются на плагины.
Есть два обходных пути:
ios/Runner.xcworkspace
и измените систему сборки на Legacy Build System
.ios/Runner.xcworkspace
Runner
на боковой панели навигатора проекта.Runner
, затем выберите вкладку Build Phases
.Embed Frameworks
и выберите Flutter.framework
из списка встроенных фреймворков.-
чтобы удалить Flutter.framework
из списка (не забудьте оставить App.framework
).Когда плагины используются, существуют два конкурирующих действия сборки, которые копируют Flutter.framework в каталог Frameworks приложения сборки:
Embed Frameworks
для проекта Runner[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
но теперь это приводит к следующей ошибке
Кто-нибудь знает, как это решить?
@ 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.
Плюсы:
Минусы:
@jmagman Замечательно ! Мне такой подход нравится. Если мы дойдем до точки, где мы увидим плагин Cocoapods, который действительно дорого компилировать, мы можем решить это как оптимизацию. Тем временем это устраняет непосредственный риск!
Благодарность!!!!!
Благодарность
Если вы все еще видите эту ошибку, вам нужно будет перенести свой проект Xcode:
install! 'cocoapods', :disable_input_output_paths => true
См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .
@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:
- Файл> Настройки рабочей области ...> Система сборки, измените раскрывающийся список на Новая система сборки (по умолчанию)
- В вашем Podfile добавьте строку
install! 'cocoapods', :disable_input_output_paths => true
См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .
- На этапе сборки целевой платформы Runner «[CP] Embed Pods Framework» удалите все выходные файлы.
Или вы можете сделать №1 и №2, а затем запустить pod install
из каталога ios, и CocoaPods должен автоматически удалить этот выходной файл на этапе сборки.
@gincos Если у вас нет Mac, вы можете посмотреть PR https://github.com/flutter/flutter/pull/33684/ для примера того, как настроить файлы Xcode вручную. Если у вас Mac, выполните указанные выше действия!
install! 'cocoapods', :disable_input_output_paths => true
Надеюсь, ваш облачный конвейер должен запускать 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.
- Открыть
ios/Runner.xcworkspace
- Выберите проект
Runner
на боковой панели навигатора проекта.- В главном представлении выберите цель
Runner
, затем выберите вкладкуBuild Phases
.- Разверните фазу
Embed Frameworks
и выберитеFlutter.framework
из списка встроенных фреймворков.- Щелкните
-
чтобы удалитьFlutter.framework
из списка (не забудьте _keep_App.framework
).Первопричина
Когда плагины используются, существуют два конкурирующих действия сборки, которые копируют Flutter.framework в каталог Frameworks приложения сборки:
- Фаза сборки
Embed Frameworks
для проекта Runner- Фаза сборки
[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:
install! 'cocoapods', :disable_input_output_paths => true
См., Например, https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .
flutter build ios
Я собираюсь заблокировать это, чтобы эти инструкции по миграции оставались в конце этого выпуска. Сообщите о новом выпуске, если после выполнения этих инструкций у вас возникнут дополнительные проблемы.
ОБНОВЛЕНИЕ: если вы следуете инструкциям по миграции на https://flutter.dev/docs/development/ios-project-migration, вы можете удалить install! 'cocoapods', :disable_input_output_paths => true
из своего ios/Podfile
. Это может сократить время компиляции, если вы используете плагины Flutter.
Самый полезный комментарий
Я смог исправить это, открыв проект рабочей области
Runner
в Xcode 10. Затем перейдите кFile
,Workspace Settings
и измените систему сборки наLegacy Build System
.