Niepoprawny podpis trzepotania podczas próby na urządzeniu z systemem iOS

11

TL; DR

Zobacz odpowiedź poniżej: https://stackoverflow.com/a/60013390/1121497

Wygląda na to, że był to problem z iOS 13.3, ponieważ właśnie zainstalowałem 13.4, a teraz Flutter działa na moim iPhonie. :)


Próbuję uruchomić nową aplikację Flutter (przykładową aplikację utworzoną przez flutter create) na urządzeniu z systemem iOS (iPhone XS). Xcodeowi udaje się go zainstalować, ale następnie ulega awarii z komunikatem:

dyld: Library not loaded: @rpath/Flutter.framework/Flutter
  Referenced from: /private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Runner
  Reason: no suitable image found.  Did find:
    /private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Frameworks/Flutter.framework/Flutter: code signature invalid for '/private/var/containers/Bundle/Application/BA807438-FA5B-4021-B37D-FC437B2C80CA/Runner.app/Frameworks/Flutter.framework/Flutter'

Jeśli spróbuję flutter run, aplikacja również się otworzy i ulegnie awarii. A polecenie czeka wiecznie:

$ flutter run
Launching lib/main.dart on Ferran Maylinch’s iPhone in debug mode...

Automatically signing iOS for device deployment using specified development team in Xcode project: 25D86TPBWG
Running Xcode build...                                                  

 ├─Assembling Flutter resources...                           4.3s
 └─Compiling, linking and signing...                        13.3s
Xcode build done.                                           21.0s
Installing and launching...                                             
(This is taking an unexpectedly long time.)

W Xcode skonfigurowałem zespół (zespół osobisty), a certyfikat podpisywania (certyfikat Apple Development) wydaje się w porządku, ponieważ mogę zainstalować projekt Hello world Swift na moim urządzeniu.

Uwaga: nie płacę kontem programu Apple Developer . Czy jest to absolutnie konieczne do uruchamiania aplikacji Flutter na urządzeniach z iOS?

Postępowałem zgodnie z instrukcjami macOS i flutter doctorpowiedziałem, że mam wszystko, czego potrzebuję na iOS:

[] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57, locale en-ES)

[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses
[] Xcode - develop for iOS and macOS (Xcode 11.3)
[!] Android Studio (version 3.5)Flutter plugin not installed; this adds Flutter specific functionality.Dart plugin not installed; this adds Dart specific functionality.
[] IntelliJ IDEA Ultimate Edition (version 2019.3.1)
[!] VS Code (version 1.41.1)Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[] Connected device (1 available)

! Doctor found issues in 3 categories.

Jak widać, użyłem kanału stabilnego, aby odrzucić problemy z kanałem beta, ale zwykle pracuję w kanale beta, aby zbudować trzepotanie dla sieci (co działa dobrze).

W symulatorze iOS aplikacja działa również dobrze.

Ostatnio zauważyłem, że nie mam pliku ios/Podfile. Znalazłem ten post mówiący o tym. Nie wiem, czy w moim przypadku jest to ważne, czy nie, ale próbowałem ręcznie dodać ten plik Podfile . W każdym razie pojawia się ten sam błąd podpisu.

Sfrustrowany tym, na razie przełączyłem się na NativeScript .

Ferran Maylinch
źródło
Próbujesz uruchomić go na prawdziwym urządzeniu w trybie debugowania lub wydania?
Sunkuu7
@SlahLayouni To było w trybie debugowania. Próbowałem tryb zwolnienia i kończy się niepowodzeniem z tym samym błędem.
Ferran Maylinch
Najpierw wypróbuj wersję build, a następnie uruchom ją z Xcode jako release. flutter build ios --release
Sunkuu7
1) Czy wypróbowałeś symulator iOS 2) Czy wdrożyłeś / uruchomiłeś „Hello World” w Swift / Xcode na swoim urządzeniu iPhone? Certyfikat osobisty powinien być odpowiedni do wdrożenia na telefonie.
Morrison Chang

Odpowiedzi:

8

EDYCJA: Naprawiono to w iOS 13.4, który został wydany 24 marca.

Jest to regresja iOS 13.3.1 niezwiązana z Flutter. Udało mi się odtworzyć awarię bez żadnego kodu Flutter lub CocoaPods, tworząc nowy projekt Xcode, dodając cel struktury i wybierając profil obsługi osobistej zespołu.

Zobacz problem z GitHub: https://github.com/flutter/flutter/issues/49504#issuecomment-581554697 .

Błąd nie powinien wpływać na profile udostępniania aplikacji zespołu kont ani na aplikacje, które są już podpisane i dystrybuowane w App Store.

Niestety jedynym rozwiązaniem może być uniknięcie aktualizacji urządzeń programistycznych do wersji 13.3.1, dopóki nie zostanie to rozwiązane.

Jenn
źródło
Dziękuję Ci bardzo! Mam nadzieję, że to naprawiono jak najszybciej!
Ferran Maylinch
To jest kwestia poziomu iOS? Ten problem występuje również na telefonie iPhone z wersją iOS 13.3.1
Adromil Balais
Tak, jest to problem związany z iOS 13.3.1 i późniejszymi odrzuceniami ram podpisanego profilu obsługi osobistej zespołu. To nie jest specyficzne dla Fluttera. Odsyłacze w komentarzu GitHub odnoszą się do innych projektów, a ja z łatwością mogłem odtworzyć w zupełnie nowym frameworku w Xcode bez osadzania Fluttera.
Jenn
Właśnie próbowałem teraz z iOS 13.4 i działa! Mógłbym uruchomić moją aplikację Flutter na prawdziwym iPhonie od Xcode, a także od IntelliJ IDEA. Wydaje mi się, że to zadziała również z wiersza poleceń.
Ferran Maylinch
4

Z tego, co widzę, jest to problem ze zgodnością Fluttera z iOS 13.3.1. W moim przypadku moja aplikacja działa idealnie na iPhonie XR z iOS 13.3, ale zawiesza się podczas uruchamiania na innym iPhone XR z iOS 13.3.1. Nie można przetestować w symulatorze, ponieważ jest to aplikacja aparatu, ale działa zarówno na fizycznych urządzeniach z Androidem, jak i emulatorach Androida.

Rekrut
źródło
Masz rację. Właśnie przetestowałem na moim iPadzie z 13.3. Mój telefon nie działa z 13.3.1. Zamierzam zaktualizować do wersji beta 2 i spróbować :-)
Ken Hui
13.3.1 Publiczna beta 2 ma ten sam problem.
Ken Hui
3
  1. Czy zgodziłeś się na umowę licencyjną xcode? jeśli nie, spróbuj sudo xcodebuild -license.
  2. Czy twoje strąki są aktualizowane? jeśli nie, przejdź do folderu ios w projekcie trzepotania w swoim terminalu i wpisz pod installwtedypod update

Jeśli to nie zadziała, przejdź do folderu ios w projekcie trzepotania i otwórz Runner.xcworkspace, stukając go dwukrotnie. To powinno wyglądać tak:

wprowadź opis zdjęcia tutaj

Kiedy otworzy się xcode, kliknij Runner w lewym górnym rogu.

wprowadź opis zdjęcia tutaj

Następnie przejdź do Podpisywanie i możliwości, a następnie w polu rozwijanym „Zespół” wybierz pole. Jeśli nie istnieje, utwórz konto.

wprowadź opis zdjęcia tutaj

Następnie w „Identyfikatorze pakietu” powinna pojawić się nazwa pakietu aplikacji. Dodaj .app na końcu. Na przykład, jeśli jego „com.example.yourapp” to „com.example.yourapp.app” i naciśnij klawisz enter.

Naciśnij przycisk odtwarzania w lewym górnym rogu, aby uruchomić aplikację na wybranym urządzeniu.

Yudhishthir Singh
źródło
Nie mam Podfile. Patrzę na ten post stackoverflow.com/questions/51599686/...
Ferran Maylinch
Zainstaluj cocoapods na swoim komputerze i uruchom polecenia pod w katalogu ios.
Yudhishthir Singh
Mam cocoapody. Jakich poleceń dla kapsuły powinienem użyć?
Ferran Maylinch
instalacja pod, a następnie aktualizacja pod
Yudhishthir Singh
Dokonałem edycji mojej odpowiedzi, proszę spojrzeć.
Yudhishthir Singh
1

Czy możesz wykonać krok po kroku

flutter channel master
flutter upgrade
flutter clean
flutter build ios
Dev
źródło
Próbowałem tego. Również na kanale beta.
Ferran Maylinch
Błąd związany jest z możliwościami podpisywania, gałąź trzepotania nie ma z tym nic wspólnego.
Yudhishthir Singh
1

Ten post nie jest odpowiedzią, ponieważ również zmagam się z tym problemem i piszę go, ponieważ minęło trochę czasu od poprawki

Chcę tylko podać więcej szczegółów OP i innym członkom tutaj. Mam więc wszystko, jak stwierdził OP.

Oto, co próbowałem:

  1. Podfile nie jest tworzony (nawet po uruchomieniu na Symulatorze itp.) I dlatego próbowałem dołączyć jedną z przykładowej aplikacji Flutter Github.

    • Wyczyszczono katalog iOS
    • Dodano plik podfile
    • Aktualizacja Ran pod.
    • Naprawiono ostrzeżenia (dostępne konfiguracje debugowania i wydania kapsuły w Xcode)
    • Dodano FLUTTER_ROOT do ustawień zdefiniowanych przez użytkownika (jak było nieobecne) i otrzymywałem błąd Xcode-backend.sh (nie pamiętam dokładnie, przepraszam)
    • Wybudowany

Te kroki powodują: ten błąd na symulatorze. Takie same błędy podpisu, jak bez Pod na urządzeniu fizycznym

  • Usunięto wszystkie certyfikaty z Keychain Access i przywrócono je za pomocą Xcode.

    Wynik: nic się nie zmieniło

  • Usunięto Xcode, kapsuły i związane z tym ustawienia. Usunięte certyfikaty. Przywrócono wszystko po ponownym uruchomieniu (świeża instalacja)

    Wynik: ponownie, nie buduj za pomocą kapsuły ani bez tych samych błędów

  • Zaktualizowałem Flutter do kanału deweloperów (1.14.1) i zregenerowałem projekt używając flutter create .

    Reran buduje. Z zasobnikami i bez. Wciąż to samo

  • Próbowałem także zmienić podpis z programisty Apple na programistę iOS na wszystkich urządzeniach docelowych (w zestawie kapsułka)

    Mam w tym trochę błędów, ponieważ nawet próbowałem podpisać Pods-Runner (była mała nadzieja). Ale ogólnie nic nowego.

  • Gdy korzystam z urządzenia z iOS 13.3.1 Beta, zaktualizowałem Target do 13.2 (maksymalna dostępna teraz?).

    nie

  • Mam włączone kompilacje macOS i zbudowałem aplikację Mac

    Działa zgodnie z zaleceniami, wszystko jest w porządku.

Podsumowując:

  • Ten problem nie zależy od projektu Pod / Non-Pod.
  • Nic się nie zmieniło w tej kwestii między najnowszym stabilnym trzepotaniem a najnowszym deweloperem (jak napisano w poście)
  • Ten błąd nie został naprawiony przez ponowną instalację Xcode i nie jest związany z certyfikatami pęku kluczy
  • Problem pojawia się tylko podczas budowania wyłącznie fizycznego urządzenia iOS (w moim przypadku iPhone X). Symulator (bez kapsuły) działa dobrze.

Btw. Wszystko działało na MacBooku Pro 13 z zainstalowaną Cataliną 10.15.3 i Xcode 11.3.1.

Każde uruchomienie miało flagę -v i podczas kompilacji nie znaleziono niczego podejrzanego w logach

Jeszcze raz. Przykro mi, jeśli zrobiłem coś złego, publikując to, ale nie chciałem powielać tego problemu ani sugerować OP edycji, ponieważ ten post jest dość długi.

Emin Guliew
źródło
Dziękuję bardzo za tę odpowiedź. To nie jest rozwiązanie, ale jest bardzo pomocne. Oczywiście, coś jest nie tak z Flutter. Wygląda na to, że Google nie wie dokładnie, czego oczekuje Apple, lub Apple nie jest zainteresowane tym, aby Flutter działał płynnie ... :)
Ferran Maylinch
Nawiasem mówiąc, wczoraj wypróbowałem Flutter na innym komputerze Mac z Mojave (moja ma Catalinę) i dostałem ten sam błąd.
Ferran Maylinch
Najprawdopodobniej jest to coś związanego z CodeSign lub Flutter. Powinniśmy otworzyć problem github.com/flutter/flutter/issues
Emin Guliev
Tak. Dobry pomysł. Daj mi znać, jeśli to zrobisz, albo mogę zrobić to sam.
Ferran Maylinch
0

Spróbuj przełączyć się na stabilny kanał przez flutter channel stable, uruchom, flutter upgradea następnie przejdź do projektu aplikacji i uruchomflutter run

Gioele Pannetto
źródło
Niestety pojawia się ten sam błąd. Stworzyłem nawet nową aplikację trzepotania po przejściu na kanał stabilny. Zaktualizowałem swoje pytanie, aby pokazać, że teraz jestem na stabilnym kanale.
Ferran Maylinch
Dodałem również wyjście z trzepotania.
Ferran Maylinch
0

Aby uruchomić aplikację w trybie debugowania, nie potrzebujesz żadnego konta płatnego Apple. 1) Otwórz xCode dla tego projektu, wybierz urządzenie i uruchom w nim.

Otwórz XCode tego projektu i sprawdź ustawienia kompilacji, ponieważ ścieżka FLUTTER_ROOT jest poprawna, jeśli nie, utwórz korzeń trzepotania i podaj ścieżkę.

balaji ks
źródło
Mam rację FLUTTER_ROOT. To nie jest problem ... :(
Ferran Maylinch
0

Czy sprawdziłeś ten link, który może dać pożądane wyjście https://github.com/flutter/flutter/issues/16507 . daj mi znać, czy to może być problem z podpisywaniem, ten post da ci pojęcie, co się dzieje. Dzięki

sagar acharya
źródło
Nie mam Podfile, więc sprawdzam to: stackoverflow.com/questions/51599686/... W każdym razie nie wiem, czego potrzebuję Podfile. Stworzyłem jeden, ale wciąż pojawia się ten sam błąd. Więc może nie potrzebuję pliku Podfile, w każdym razie problem jest inny.
Ferran Maylinch
0

Ok, mając chwilę na stworzenie odpowiedzi:

Opierając się na odpowiedzi Subaharan Vel , pytanie: Flutter Podfile i foldery Pods nie zostały utworzone w katalogu ios i odpowiedź sugerująca, że ​​budynek dla symulatora iOS może utworzyć plik podfile w niewłaściwym miejscu (powinien zostać utworzony automatycznie bezpośrednio w katalogu iOS. Wygląda więc na to, że Twój Podfile istnieje gdzieś tam. Spróbuj go znaleźć lub po prostu usuń cały katalog ios, wyczyść projekt i utwórz go ponownie. Upewnij się też, że tak nie jest. Tworzenie pliku Podfile w celu dodania podsystemów iOS przed dodaniem jakichkolwiek wtyczek Flutter nigdy nie łączy się istniejący Podfile .

Powodzenia, mam nadzieję, że ci to pomoże

Adam Tucholski
źródło
Nigdzie nie ma Podfile. Biegnę find . -name Podfilei nic nie dostaję. Usunąłem ioskatalog, ale teraz jak go odtworzyć? Jeśli uruchomię flutter build ios, pojawia się błąd Application not configured for iOS.
Ferran Maylinch
@Ferran Maylinch Wystarczy powtórzyć wszystkie kroki z Surbahan Vel (pierwszy link) - usunął katalog ios, i został odtworzony po oczyszczeniu projektu. Jeśli to konieczne, dodaj ręcznie plik pod (z stackoverflow.com/a/53492243/7183675 , usuń stamtąd niepotrzebne zasobniki, sprawdź także drugi komentarz pod tą odpowiedzią). W ostateczności - może to pomóc, jeśli dodasz przynajmniej jeden pakiet do pubspec, aby zmusić Fluttera do automatycznego tworzenia Podfile. Nawet jeśli ten pakiet nie jest tak naprawdę używany
Adam Tucholski
0

Nie było to idealne rozwiązanie, ale następujące działało dla mnie.

  1. Zaktualizuj urządzenie do wersji beta iOS 13.4.
  2. Wykonaj trzepotanie
  3. Kompilacja powinna zakończyć się powodzeniem.
  4. Zgłoszy błąd „Twoja wersja Xcode może być za stara dla wersji iOS” .
  5. Aplikacja zostanie zainstalowana na urządzeniu. Uwaga: Aplikacja nie uruchomi się automatycznie po zakończeniu procesu.
  6. Kliknij ikonę zainstalowanej aplikacji na urządzeniu, aby uruchomić aplikację.

Chociaż nic nie będzie widoczne w oknie debugowania, ponieważ proces kończy się po zgłoszeniu błędu. To nie jest idealne rozwiązanie, ale zdecydowanie obejście, dopóki nie otrzymamy kolejnej aktualizacji Xcode. 

Dhruva Phulsundar
źródło