Flutter: Mehrere Befehle erzeugen '/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework

Erstellt am 16. Aug. 2018  ·  50Kommentare  ·  Quelle: flutter/flutter

Wenn ich die Anwendung in der MacOs-Umgebung debuggen möchte, wird ein solcher Fehler ausgegeben:

Mehrere Befehle erzeugen '/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework
1) Ziel 'Runner' hat einen Kopierbefehl von '/ios/Flutter/Flutter.framework' nach '/build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework'
2) Dieser Befehl hängt vom Befehl in Target 'Runner' ab: Skriptphase „[CP] Embed Pods Frameworks“
Warnung: Duplizierte Ausgabedatei wird ignoriert: '//build/ios/Debug-iphonesimulator/Runner.app/Frameworks/Flutter.framework' (im Ziel 'Runner')
note: Verwenden des neuen Builds systemnote: Buildnote planen: Build-Beschreibung erstellen

Mac 10.14 Beta
Xcode 10 Beta

Wie man es repariert? Danke vielmals

annoyance crowd platform-ios crash tool

Hilfreichster Kommentar

Ich konnte es beheben, indem ich das Arbeitsbereichsprojekt Runner in Xcode 10 öffnete. Navigieren Sie dann zu File , Workspace Settings und ändern Sie das Build-System in Legacy Build System .

schermafbeelding 2018-08-16 om 14 10 10

Alle 50 Kommentare

Können Sie bitte genaue Schritte zur Reproduktion angeben?
Wie haben Sie das Projekt erstellt?
Welche Dateien haben Sie geändert, welche Änderungen haben Sie vorgenommen?

Bitte fügen Sie die Ausgabe von flutter doctor -v .

Ich konnte es beheben, indem ich das Arbeitsbereichsprojekt Runner in Xcode 10 öffnete. Navigieren Sie dann zu File , Workspace Settings und ändern Sie das Build-System in Legacy Build System .

schermafbeelding 2018-08-16 om 14 10 10

Danke vielmals! Es klappt.

Betroffene Projekte

Dieses Problem betrifft alle Flutter-Projekte, die mit Xcode 10 erstellt wurden und eine Abhängigkeit von CocoaPods haben – normalerweise sind dies diejenigen, die auf Plugins angewiesen sind.

Problemumgehungen

Es gibt zwei Problemumgehungen:

  • Option 1: Verwenden Sie das Legacy-Build-System . Wie von @gi097 erwähnt , öffnen Sie ios/Runner.xcworkspace und ändern Sie das Build-System in Legacy Build System .
  • Option 2: Verwenden Sie das neue Xcode 10-Build-System.

    1. ios/Runner.xcworkspace öffnen

    2. Wählen Sie in der Seitenleiste des Projektnavigators das Projekt Runner .

    3. Wählen Sie in der Hauptansicht das Ziel Runner und dann die Registerkarte Build Phases .

    4. Erweitern Sie die Phase Embed Frameworks und wählen Sie Flutter.framework aus der Liste der eingebetteten Frameworks aus.

    5. Klicken Sie auf - , um Flutter.framework aus der Liste zu entfernen (achten Sie darauf, dass Sie App.framework behalten ).

Tiefere Ursache

Wenn Plugins verwendet werden, gibt es zwei konkurrierende Build-Aktionen, die Flutter.framework in das Frameworks-Verzeichnis der Build-Anwendung kopieren:

  1. Die Embed Frameworks Build-Phase für das Runner-Projekt
  2. Die [CP] Embed Pods Frameworks Build-Phase, die pod install im Projekt erstellt.

Punkt (1) dient dazu, sicherzustellen, dass das Framework in die erstellte App kopiert wird, falls keine Plugins vorhanden sind (und daher keine CocoaPods-Integration im Xcode-Projekt). Punkt (2) ist vorhanden, weil Flutters podspec Flutter.framework als vended_framework deklariert und CocoaPods automatisch einen Kopierschritt für jedes solche vended_framework in der transitiven Schließung von CocoaPods-Abhängigkeiten hinzufügt.

Sofortige Lösung

Die sofortige Lösung besteht darin, einen Weg zu finden, um automatisch wieder auf den Legacy-Build-Fix zuzugreifen, bis eine längerfristige bessere Lösung vorhanden ist. Frühere Betas unterstützten -useNewBuildSystem=NO oder -useModernBuildSystem=NO aber es sieht so aus, als ob dies im GM-Build entfernt wurde. Es sieht so aus, als ob Sie dies derzeit tun, indem Sie ein Schlüssel-Wert-Paar ( <key>BuildSystemType</key><string>Original</string> ) zu ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings hinzufügen.

Längerfristige Korrektur

Die einfachste Möglichkeit wäre, Flutter.framework aus dem obigen Embed Frameworks-Schritt zu entfernen und sich immer auf die Pod-Installation zu verlassen, auch wenn keine Plugin-Abhängigkeiten bestehen. Wir müssten das Flutter-Tool aktualisieren, um vorhandene Projekte automatisch zu bearbeiten, um Flutter.framework aus dem Schritt Embed Frameworks zu entfernen.

Pro: einfacherer Code. con: macht Cocoapods zu einem erforderlichen Installationsschritt für die Flutter-Entwicklung, die erste Ausführung erfordert einen riesigen und sehr langsamen Download ihres Repos.

Eine etwas schönere Option wäre, automatisch zu erkennen, ob das Projekt Plugins verwendet oder nicht, und das Xcode-Projekt zu bearbeiten, um Flutter.framework automatisch aus dem Embed Frameworks-Schritt zu überprüfen und zu entfernen, wenn Plugins verwendet werden oder es hinzuzufügen, wenn nicht.

pro: bessere Benutzererfahrung. con: komplexerer Code.

In jedem Fall benötigen wir einen Mechanismus, um die Datei project.pbxproj automatisch zu bearbeiten und das Framework aus dem Buildschritt zum Einbetten von Frameworks zu entfernen. Die Unterstützung des erneuten Hinzufügens ist nicht viel inkrementelle Arbeit und führt zu einer besseren Erfahrung.

/cc @tvolkert @gspencergoog @dnfield

Tut mir leid, ich wollte Ihren Issue Tracker nicht überfluten.

Ich habe diese Auflösung befolgt #20685

aber jetzt kommt es zu folgendem fehler

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

Hat jemand eine Idee, wie man das lösen kann?
@gi097 @cbracken @zoechi @sidealice @hungrymonkey

@tiagosito Ein Patch wird momentan im master Zweig landen. Sehen Sie sich vorerst die in meinem Kommentar oben aufgeführten

@tiagosito Ein Patch wird momentan auf dem Master landen. Sehen Sie sich vorerst die in meinem Kommentar oben aufgeführten

@cbracken Ich bin Option 2 gefolgt, die du gemeldet hast #20685

Aber ich hatte dieses kleine Problem #21989

Wurde so gelöst #21989

Ich verwende den Master-Kanal nicht. Wenn der von Ihnen erwähnte Patch veröffentlicht wird, werde ich dann auf dem Beta-Kanal mit derselben Lösung konfrontiert?

@cbracken und @gi097 erstmal vielen Dank

hatte dieses Problem heute auch, nachdem ich zu iOS 12 gewechselt war, was dann xcode 10 erforderte, was dann zum Flattern führte. Option 2 oben hat funktioniert, aber Sie sollten Ihren Paket-Build-Cache löschen:

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

sonst kratzt man sich am kopf.

Die 'sofortige Lösung' in meinem obigen Kommentar ist auf Master gelandet. Wir arbeiten daran, dies so schnell wie möglich in den dev Kanal zu bringen.

Zu Ihrer Information, das ist jetzt auf dem Kanal dev gelandet.

Groß!
Übrigens, wie wenden wir diesen Patch in bestehenden Projekten an? Einfach durch ein Flatter-Upgrade?

@tadejkan Sie sollten flutter channel dev ausführen, um zum Entwicklungskanal zu wechseln, dann flutter upgrade .

@cbracken ein Zweifel, der bleibt, ist ... wir werden den

Mit anderen Worten, wendet der Patch die Lösung von Schritt 1 oder Schritt 2 an, die Sie hier vorgestellt

@tiagosito Der Patch, den ich gelandet habe, implementiert die obige " wählen Sie das Build-System vor Xcode 10 zurück), was uns Zeit verschafft, einen Fix zu implementieren, der dies richtig macht. Dafür gibt es eine alternative Schnelllösung, die CocoaPods jedoch zu einer Voraussetzung für alle Flutter-Apps machen würde, die auf iOS basieren (auch für diejenigen, die nicht auf Plugins angewiesen sind). Angesichts der anfänglichen Download-Größe/-Zeit für einen ersten Lauf von CocoaPods würde ich es wirklich vorziehen, diesen Weg zu vermeiden.

Die richtige Lösung dafür besteht darin, dass wir erkennen, wann CocoaPods/Plugins verwendet werden, und uns darauf verlassen, dass CocoaPods in diesen Fällen Flutter.framework in die Ausgabe-App einbetten, und in allen anderen Fällen den Einbettungsschritt selbst aufrufen. Daran arbeite ich als nächstes.

Ich stehe vor Problemen beim Erstellen von iOS, die ich jetzt 4 volle Tage lang nicht lösen kann ... ich werde jetzt sehr hilflos, da ich so viele Dinge und Kombinationen ausprobiert habe; immer sehr verwirrt und traurig.
Dies ist der neueste Fehler nach mehreren verschiedenen Fehlern:

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 und @LiveRock Ihre Probleme (doppelte Symbole auf x86_64-Simulator-Builds) sehen in keinem Zusammenhang mit diesem. Bitte verfolgen Sie den Fortschritt auf #22020.

ETA für Beta-Kanal?

@lukepighetti, dies wird jetzt auf den Kanal beta verschoben (vor flutter upgrade entfernt!

Habe mein Problem behoben. Dankeschön!

@sidealice ist das auch bei dir behoben?

Danke, Lösung 2 hat funktioniert!

Ohne zusätzliche Informationen können wir dieses Problem leider nicht beheben. Wir werden diesen Fehler daher vorerst ungern schließen. Bitte zögern Sie nicht, den Fehler zu kommentieren, wenn Sie weitere Informationen für uns haben; wir werden es gleich wieder öffnen!
Danke für deinen Beitrag.
cc @Hixie

Dank bro ! Es klappt.

Ich bekomme dieses Problem immer noch auf dem stabilen Kanal von Flutter v1.0.0
Soll der Fix im Stable sein?

[✓] Flutter (Kanal stabil, v1.0.0, unter Mac OS X 10.14.1 18B75, Gebietsschema en-GB)
• Flutter-Version 1.0.0 unter /usr/local/share/flatter
• Framework-Revision 5391447fae (vor 3 Wochen), 2018-11-29 19:41:26 -0800
• Motorrevision 7375a0f414
• Dart-Version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[✓] iOS-Toolchain - für iOS-Geräte entwickeln (Xcode 10.1)
• Xcode unter /Applications/Xcode.app/Contents/Developer
• Xcode 10.1, Build-Version 10B61
• iOS-Bereitstellung 2.0.0
• CocoaPods-Version 1.5.3

@JannieT bitte überprüfen Sie auch dev .
Ich weiß nicht, ob es in stable , aber wenn es auf dev funktioniert, ist die Antwort wahrscheinlich "nein".

Vielen Dank! Nur zur Bestätigung, der Fix ist in Stable v1.0.0
Ich bin auf das Problem gestoßen, weil ich beim Versuch, ein Archiv zu erstellen, die .xcodeproject-Datei anstelle des dokumentierten .xcworkspace geöffnet habe.

Ich habe gerade das gleiche Problem.

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!

Ich habe das Legacy Build System ausprobiert, aber dann hatte ich ein anderes Problem. Ich habe auch versucht, Flutter.framework zu entfernen, aber der Fehler ist der gleiche.

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

Das betroffene Plugin ist barcode_scan .


Was es für mich gelöst hat, ist https://github.com/apptreesoftware/flutter_barcode_reader/issues/44#issuecomment -460415307.

open -a Xcode ios

Wiedereröffnung, da wir zu diesem Zeitpunkt nur die Problemumgehung gefunden haben, nicht die langfristige Lösung, um zum neuen Build-System zu wechseln.

Ohne zusätzliche Informationen können wir dieses Problem leider nicht beheben. Wir werden diesen Fehler daher vorerst ungern schließen. Bitte zögern Sie nicht, den Fehler zu kommentieren, wenn Sie weitere Informationen für uns haben; wir werden es gleich wieder öffnen!
Danke für deinen Beitrag.

hilft mir, Flattern sauber zu machen und dann durch Android Studio zu bauen

[✓] 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

Fehler in 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”

Fest:
open -a Xcode ios laufen lassen, aber es scheint, als hätte es nicht funktioniert.
Also habe ich das Projekt stattdessen in Xcode mit Runner.xcworkspace geöffnet und es hat funktioniert.

Dieses Problem tritt bei mir immer noch auf, auch wenn ich das Projekt über den Arbeitsbereich öffne. Nur das Ändern des Build-Systems auf Legacy scheint das Problem zu beheben.

Wir können auch die CocoaPods-Installationsoption disable_input_output_paths nutzen, die die Eingabe- und Ausgabedateien aus der [CP] Emded Pods Framework-Build-Phase entfernt. Diese Installationsoption wurde hinzugefügt, weil das neue Xcode-Buildsystem das Skript nicht ausführen konnte, selbst wenn die Eingabedateien berührt wurden. Siehe https://www.ralfebert.de/ios/blog/cocoapods-clean-input-output-files.

Vorteile:

  • Xcode-Projekte verwenden das neue Build-System ohne Kompilierungsfehler. Xcode hat damit gedroht, die Unterstützung von Legacy-Builds zu kürzen, also wird Flutter bereit sein, wenn das passiert.
  • Einfache Abhilfe.
  • Keine zusätzliche Logik, um zu entscheiden, ob Flutter.framework in die Build-Phase von Embed Frameworks aufgenommen werden soll, da es immer eingeschlossen wird.
  • Erfordert keine Abhängigkeit von CocoaPods, wenn das Projekt Vanilla Flutter ohne Pakete ist.

Nachteile:

  • Das Skript Pods-Runner-frameworks.sh wird bei jedem Build ausgeführt, auch wenn sich Flutter.framework nicht ändert. Auf meinem MacBook Pro 2018 verlängert dies den Build um ~ 1 Sekunde.
  • Wenn der neue Fehler im Xcode-Buildsystem behoben wird, kann CocoaPods diese Installationsoption entfernen und das Problem mit doppelten Framework-Kopien wird erneut geltend gemacht.
  • Die Mindestversion von CocoaPods muss von 1.0.0 auf 1.6.0 erhöht werden, wenn die Option disable_input_output_paths eingeführt wurde.

@jmagman Super ! Dieser Ansatz sieht für mich gut aus. Wenn wir an den Punkt kommen, an dem wir Cocoapods-Plugins sehen, die wirklich teuer zu kompilieren sind, können wir das als Optimierung behandeln. Damit ist das unmittelbare Risiko zwischenzeitlich gelöst!

Danke!!!!!

Danke

Wenn dieser Fehler weiterhin angezeigt wird, müssen Sie Ihr Xcode-Projekt migrieren:

  1. Datei > Workspace-Einstellungen... > Build-System, Dropdown-Menü in Neues Build-System ändern (Standard)
  2. Fügen Sie in Ihrem Podfile die Zeile hinzu
install! 'cocoapods', :disable_input_output_paths => true

Siehe zum Beispiel https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. Entfernen Sie in der Build-Phase des Runner-Ziels "[CP] Embed Pods Framework" alle Ausgabedateien.

@jmagman danke - aber könnte das mit #18673 zusammenhängen? Denn nach der Migration (über flutter upgrade , die diese Änderung auf meinem Computer automatisch in der Poddatei durchgeführt hat), kann ich mit flutter build ios erstellen, aber beim Versuch, in Xcode zu archivieren, laufe ich den Fehler # 18673.

@jmagman danke - aber könnte das mit #18673 zusammenhängen? Denn nach der Migration (über flutter upgrade , die diese Änderung auf meinem Computer automatisch in der Poddatei durchgeführt hat), kann ich mit flutter build ios erstellen, aber beim Versuch, in Xcode zu archivieren, laufe ich den Fehler # 18673.

@jmagman Ich habe die Lösung gefunden, tatsächlich hat diese https://github.com/flutter/flutter/issues/16246#issuecomment -476329255 mein Problem gelöst. Entschuldigung für jegliche Unannehmlichkeiten.

@jmagman Könnten Sie für diejenigen von uns, die mit XCode weniger vertraut sind, Schritt 3 näher erläutern? Wo wird die Build-Phase des Runner-Ziels "[CP] Embed Pods Framework" gefunden, um alle Ausgabedateien zu entfernen?

Fand es. Klicken Sie in der linken Navigationsleiste auf "Runner", dann auf die Registerkarte "Build Phases", scrollen Sie dann nach unten zu "Output Files", wählen Sie alle aus und klicken Sie dann auf die Schaltfläche "Subtract", um sie zu entfernen

Wie kann ich das ohne Mac lösen? Ich verwende eine Cloud-Pipeline, um für iOS zu erstellen, muss aber dieses Problem lösen ...

Wenn dieser Fehler weiterhin angezeigt wird, müssen Sie Ihr Xcode-Projekt migrieren:

  1. Datei > Workspace-Einstellungen... > Build-System, Dropdown-Menü in Neues Build-System ändern (Standard)
  2. Fügen Sie in Ihrem Podfile die Zeile hinzu
install! 'cocoapods', :disable_input_output_paths => true

Siehe zum Beispiel https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. Entfernen Sie in der Build-Phase des Runner-Ziels "[CP] Embed Pods Framework" alle Ausgabedateien.

Oder Sie können #1 und #2 ausführen und dann pod install aus dem ios-Verzeichnis ausführen, und CocoaPods sollte diese Ausgabedatei in der Build-Phase automatisch entfernen.

@gincos Wenn Sie keinen Mac haben, können Sie in PR https://github.com/flutter/flutter/pull/33684/ nachsehen, wie Sie die Xcode-Dateien manuell optimieren können. Wenn Sie einen Mac haben, folgen Sie bitte stattdessen den obigen Schritten!

  1. Löschen Sie die Datei ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings. Dies geschieht unter dem Deckmantel mit Datei > Arbeitsbereichseinstellungen... > Build-System > Neues Build-System (Standard).
    https://github.com/flatter/flatter/pull/33684/files#diff -e7ad834b29956b3cbd9225dc81f2c06a

    1. Fügen Sie in Ihrem Podfile die Zeile hinzu

      install! 'cocoapods', :disable_input_output_paths => true

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

Hoffentlich sollte Ihre Cloud-Pipeline pod install ausführen und sich um Nummer 3 oben für Sie kümmern.

Wenn der Fehler weiterhin angezeigt wird, können Sie ios/Runner.xcodeproj/project.pbxproj bearbeiten, um die Ausgabedatei manuell zu entfernen. Bitte seien Sie dabei vorsichtig! Die Xcode-Projektdatei ist nicht korrupt.
https://github.com/flatter/flatter/pull/33684/files#diff -e9e57f7f2e911a135acd8f08e79b20e1

@jmagman Danke! Das funktionierte wie ein Zauber! Ja, der Cloud-Anbieter führt die Pod-Installation aus und produziert jetzt in der neuesten Beta ein korrektes Artefakt sowohl für Android als auch für iOS.

Betroffene Projekte

Dieses Problem betrifft alle Flutter-Projekte, die mit Xcode 10 erstellt wurden und eine Abhängigkeit von CocoaPods haben – normalerweise sind dies diejenigen, die auf Plugins angewiesen sind.

Problemumgehungen

Es gibt zwei Problemumgehungen:

  • Option 1: Verwenden Sie das Legacy-Build-System . Wie von @gi097 erwähnt , öffnen Sie ios/Runner.xcworkspace und ändern Sie das Build-System in Legacy Build System .
  • Option 2: Verwenden Sie das neue Xcode 10-Build-System.

    1. ios/Runner.xcworkspace öffnen
    2. Wählen Sie in der Seitenleiste des Projektnavigators das Projekt Runner .
    3. Wählen Sie in der Hauptansicht das Ziel Runner und dann die Registerkarte Build Phases .
    4. Erweitern Sie die Phase Embed Frameworks und wählen Sie Flutter.framework aus der Liste der eingebetteten Frameworks aus.
    5. Klicken Sie auf - , um Flutter.framework aus der Liste zu entfernen (achten Sie darauf, App.framework _behalten_).

Tiefere Ursache

Wenn Plugins verwendet werden, gibt es zwei konkurrierende Build-Aktionen, die Flutter.framework in das Frameworks-Verzeichnis der Build-Anwendung kopieren:

  1. Die Embed Frameworks Build-Phase für das Runner-Projekt
  2. Die [CP] Embed Pods Frameworks Build-Phase, die pod install im Projekt erstellt.

Punkt (1) dient dazu, sicherzustellen, dass das Framework in die erstellte App kopiert wird, falls keine Plugins vorhanden sind (und daher keine CocoaPods-Integration im Xcode-Projekt). Punkt (2) ist vorhanden, weil Flutters podspec Flutter.framework als vended_framework deklariert und CocoaPods automatisch einen Kopierschritt für jedes solche vended_framework in der transitiven Schließung von CocoaPods-Abhängigkeiten hinzufügt.

Sofortige Lösung

Die sofortige Lösung besteht darin, einen Weg zu finden, um automatisch wieder auf den Legacy-Build-Fix zuzugreifen, bis eine längerfristige bessere Lösung vorhanden ist. Frühere Betas unterstützten -useNewBuildSystem=NO oder -useModernBuildSystem=NO aber es sieht so aus, als ob dies im GM-Build entfernt wurde. Es sieht so aus, als ob Sie dies derzeit tun, indem Sie ein Schlüssel-Wert-Paar ( <key>BuildSystemType</key><string>Original</string> ) zu ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings hinzufügen.

Längerfristige Korrektur

Die einfachste Möglichkeit wäre, Flutter.framework aus dem obigen Embed Frameworks-Schritt zu entfernen und sich immer auf die Pod-Installation zu verlassen, auch wenn keine Plugin-Abhängigkeiten bestehen. Wir müssten das Flutter-Tool aktualisieren, um vorhandene Projekte automatisch zu bearbeiten, um Flutter.framework aus dem Schritt Embed Frameworks zu entfernen.

Pro: einfacherer Code. con: macht Cocoapods zu einem erforderlichen Installationsschritt für die Flutter-Entwicklung, die erste Ausführung erfordert einen riesigen und sehr langsamen Download ihres Repos.

Eine etwas schönere Option wäre, automatisch zu erkennen, ob das Projekt Plugins verwendet oder nicht, und das Xcode-Projekt zu bearbeiten, um Flutter.framework automatisch aus dem Embed Frameworks-Schritt zu überprüfen und zu entfernen, wenn Plugins verwendet werden oder es hinzuzufügen, wenn nicht.

pro: bessere Benutzererfahrung. con: komplexerer Code.

In jedem Fall benötigen wir einen Mechanismus, um die Datei project.pbxproj automatisch zu bearbeiten und das Framework aus dem Buildschritt zum Einbetten von Frameworks zu entfernen. Die Unterstützung des erneuten Hinzufügens ist nicht viel inkrementelle Arbeit und führt zu einer besseren Erfahrung.

/cc @tvolkert @gspencergoog @dnfield

@cbracken Vielen Dank, es funktioniert, danke für deine Hilfe

Die echte Migration neu zu kopieren, da sie seitdem begraben wurde.

Wenn dieser Fehler weiterhin angezeigt wird, müssen Sie Ihr Xcode-Projekt migrieren:

  1. Datei > Workspace-Einstellungen... > Build-System, Dropdown-Menü in Neues Build-System ändern (Standard)
  2. Fügen Sie in Ihrem Podfile die Zeile hinzu
install! 'cocoapods', :disable_input_output_paths => true

Siehe zum Beispiel https://github.com/flutter/flutter/blob/master/examples/platform_view/ios/Podfile .

  1. flutter build ios

Ich werde dies sperren, damit diese Migrationsanweisungen am Ende dieser Ausgabe bleiben. Bitte reichen Sie ein neues Problem ein, wenn Sie weitere Probleme haben, nachdem Sie diese Anweisungen befolgt haben.

UPDATE: Wenn Sie die Migrationsanweisungen unter https://flutter.dev/docs/development/ios-project-migration befolgen, können Sie install! 'cocoapods', :disable_input_output_paths => true aus Ihrem ios/Podfile entfernen. Dies kann die Kompilierungszeit verbessern, wenn Sie Flutter-Plugins verwenden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen