Flutter - Budowanie dla iOS, ale połączony i osadzony framework „App.framework” został zbudowany dla iOS Simulator


13

Po aktualizacji do Catalina 10.15.4 beta z Xcode 13.4 beta, który również zaktualizował Simulator do 13.4 (921.4).

Aplikacja kompiluje się i działa poprawnie na fizycznie podłączonym urządzeniu, ale żaden symulator żadnego urządzenia nie może przejść tego etapu.

Mam błędy

Budowanie dla iOS, ale połączony i osadzony framework „App.framework” został zbudowany dla iOS Simulator.

lub

Budowanie dla iOS Simulator, ale połączony i osadzony framework „App.framework” został zbudowany na iOS.

wprowadź opis zdjęcia tutaj

Jak mogę to naprawić?

Odpowiedzi:


42

Xcode 11.4 zmienił sposób, w jaki frameworki są połączone i osadzone, i mogą wystąpić problemy z przełączaniem się między urządzeniami iOS i symulatorami. Flutter v1.15.3 i nowsze wersje automatycznie migrują twój projekt Xcode.

Aby się odblokować, postępuj zgodnie z instrukcjami poniżej;

  • Szybka poprawka ( spraw, by Twój symulator działał)

rm -rf ios/Flutter/App.framework

  • Oficjalna zalecana Kroki do migracji ręcznej

    1. Z katalogu aplikacji Flutter otwórz ios / Runner.xcworkspace w Xcode.
    2. W okienku Nawigatora zlokalizuj grupę Flutter i usuń App.framework i Flutter.framework. wprowadź opis zdjęcia tutaj
    3. W ustawieniach kompilacji obiektu docelowego Runner Fazy kompilacji> Połącz pliki binarne z bibliotekami potwierdź, że App.framework i Flutter.framework nie są już obecne. Potwierdź także w Fazy kompilacji> Osadzanie struktur.

wprowadź opis zdjęcia tutaj

  1. Zmień docelowe ustawienia kompilacji Runnera Fazy kompilacji> Cienki skrypt binarny w następujący sposób:

    / bin / sh "$ FLUTTER_ROOT / packages / flutter_tools / bin / xcode_backend.sh" osadzić

    / bin / sh "$ FLUTTER_ROOT / packages / flutter_tools / bin / xcode_backend.sh" cienki

wprowadź opis zdjęcia tutaj

  1. W Runner target Ustawienia budowania> Inne flagi linkera

    (OTHER_LDFLAGS) dodaj $ (dziedziczony) -framework Flutter

wprowadź opis zdjęcia tutaj

Mam nadzieję, że to pomoże!


Pytanie zostało niedawno zamknięte i otrzymało wiele ocen negatywnych, ponieważ jest niejasne i zostało opublikowane w Meta . Wygląda na to, że rozumiesz, o co pyta, czy masz pomysł, jak go edytować, aby nie był tak niejasny?
CertainPerformance

1
Działa jak urok!
Giedrius Šlikas

3

Xcode 11.4 zmienił sposób, w jaki frameworki są połączone i osadzone, co powoduje problemy z przełączaniem się między urządzeniami iOS i symulatorami.

Postępuj zgodnie z oficjalnym przewodnikiem dotyczącym migracji projektu.


Po zastosowaniu się do oficjalnego przewodnika moja aplikacja nadal nie ładowała się na moim fizycznym urządzeniu. Dopiero po wykonaniu instrukcji, flutter cleankilkukrotnym uruchomieniu , usunięciu Pods/folderu Podfile.lock, a następnie ponownej instalacji za pomocą pod installw folderze ios, że w końcu zadziałało.
Matthew Lerner

2

Zaktualizowano do Xcode 11.4. IOS 13.4, Iphone X. Aplikacja po prostu pobiera dane za pomocą API. Aplikacja została uruchomiona na białym ekranie, a następnie w końcu ulega awarii, zarówno na symulatorze, jak i na urządzeniu.

Postępowałem zgodnie z oficjalnym przewodnikiem (ja też rm -rf ios/Flutter/App.framework) flutter.dev/docs/development/ios-project-migration . Pobiegłem kilka razyflutter clean

Próbowałem także usunąć folder Pods / Folder i plik Podfile.lock, a następnie zainstalować ponownie, używając pod installfolderu ios.

Ponieważ używam danych asynchronicznych, dodałem również jako 1. linię w main ()

WidgetsFlutterBinding.ensureInitialized();

Brak pomocy, aplikacja nie uruchomiła żadnego symulatora.

Potem usunąłem ios/i android/foldery. Następnie w folderze projektu uruchomiłem polecenie, flutter create .które regeneruje wspomniane foldery.

Po tym moja aplikacja zaczęła działać poprawnie zarówno na symulatorze, jak i na urządzeniu. Mam nadzieję, że pomogłoby to innym. UWAGA!! jeśli ręcznie wykonałeś jakiekolwiek modyfikacje tych folderów, wykonaj kopię zapasową lub zatwierdź wcześniej.



0

Wypróbowałem rozwiązanie na oficjalnej stronie trzepotania, ale nie działało to dla mnie, więc znalazłem tymczasowe rozwiązanie, które działało dla mnie, ale zajęło mi trochę ciężkiej pracy: Oto mój przykład z projektem stuck_framework, który jest świeżym nowy projekt (pierwsze uruchomienie na symulatorze)

  1. W projekcie trzepotania utworzyłem 2 foldery o nazwie
    „ios_simulator” i „ios_real_device”. wprowadź opis zdjęcia tutaj

  2. Teraz moja pierwsza kompilacja dotyczyła symulatora, potem chcę przełączyć się na prawdziwe urządzenie, przeniosę folder ios w projekcie Flutter do „ios_simulator”

  3. Otwieram projekt za pomocą kodu Visual Studio i uruchamiam „Flutter Create”. a teraz wybiorę prawdziwe urządzenie do przebudowania projektu (jeśli twój symulator jest online, proszę wyjść). wprowadź opis zdjęcia tutaj
  4. Teraz czekam na zakończenie kompilacji i uruchamiam na prawdziwym urządzeniu bez żadnych błędów. Teraz mam 2 projekt 1 iOS dla symulatorów i jeden dla prawdziwych urządzeń.
  5. Następnym razem, gdy chcę ponownie uruchomić na symulatorze, po prostu usuwam bieżący folder ios i kopiuję folder ios, który umieściłem w „ios_simulator” z powrotem do folderu projektu trzepotania. Mam nadzieję, że to pomoże

0

Ręczne uaktualnienie trzepotania do wersji 1.15 również rozwiązuje ten problem. Bieganie flutter version v1.15.17pomogło mi.

Możesz także przełączyć się na betalub devkanały, uruchamiając flutter channelpolecenie, ale upewnij się, że sprawdziłeś kod pod kątem wszystkich zmian BC ...


0

W moim przypadku działa tylko symulator (debugowanie). jeśli chcesz wdrożyć aplikację w sklepie z aplikacjami (wydanie), zdecydowanie zalecamy uaktualnienie wersji trzepotania za pomocą

flutter version v1.15.17

w przeciwnym razie wystąpiłaby awaria aplikacji z białym ekranem.

wystarczy zaktualizować wersję trzepotania, aby wszystko działało dobrze


1.15.17nie jest jeszcze na kanale stabilnym.
Loolooii
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.