Firma Flutter non valida quando provata su un dispositivo iOS


11

TL; DR

Vedi la risposta di seguito: https://stackoverflow.com/a/60013390/1121497

Sembra che sia stato un problema con iOS 13.3 perché ho appena installato 13.4 e ora Flutter funziona sul mio iPhone. :)


Sto cercando di eseguire una nuova app Flutter (l'app di esempio creata da flutter create) su un dispositivo iOS (un iPhone XS). Xcode riesce a installarlo, ma poi si arresta in modo anomalo con questo messaggio:

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'

Se provo flutter run, anche l'app si apre e si arresta in modo anomalo. E il comando continua ad aspettare per sempre:

$ 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.)

In Xcode ho configurato un Team (Personal Team) e il Certificato di firma (Certificato di sviluppo Apple) sembra a posto perché posso installare un progetto Hello world Swift sul mio dispositivo.

Nota: non sto pagando un account del programma per sviluppatori Apple . È assolutamente necessario eseguire app Flutter su dispositivi iOS?

Ho seguito le istruzioni macOS e flutter doctordice che ho tutto ciò di cui ho bisogno per 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.

Come puoi vedere, ho usato il canale stabile, per scartare i problemi con il canale beta, ma di solito lavoro nel canale beta per creare flutter per il web (che funziona bene).

Nel simulatore iOS anche l'app funziona bene.

Di recente ho notato che non ho il file ios/Podfile. Ho trovato questo post parlando di questo. Non so se questo è importante o meno nel mio caso, ma ho provato ad aggiungere manualmente questo Podfile . Ad ogni modo, ottengo lo stesso errore di firma.

Frustrato da questo, per ora sono passato a NativeScript .


Stai cercando di eseguirlo su un dispositivo reale in modalità debug o di rilascio?
Sunkuu7,

@SlahLayouni Era in modalità Debug. Ho provato la modalità di rilascio e non riesce con lo stesso errore.
Ferran Maylinch,

Prova prima a compilare la versione, quindi eseguila da xcode come versione. flutter build ios --release
Sunkuu7,

1) Hai provato iOS Simulator 2) Hai distribuito / eseguito un "Hello World" in Swift / Xcode sul tuo dispositivo iPhone? Il certificato personale dovrebbe essere buono per la distribuzione sul telefono.
Morrison Chang,

Risposte:


8

EDIT: risolto su iOS 13.4, che è stato rilasciato il 24 marzo.

Questa è una regressione di iOS 13.3.1 non correlata a Flutter. Sono stato in grado di riprodurre l'incidente senza alcun codice Flutter o CocoaPods creando un nuovo progetto Xcode, aggiungendo un target di framework e scegliendo un profilo di provisioning del team personale.

Vedi problema GitHub: https://github.com/flutter/flutter/issues/49504#issuecomment-581554697 .

Il bug non dovrebbe influire sui profili o sulle app di provisioning del team dell'account sviluppatore che sono già firmati e distribuiti su App Store.

Sfortunatamente l'unica soluzione potrebbe essere quella di evitare l'aggiornamento dei dispositivi di sviluppo a 13.3.1 fino a quando questo non sarà risolto.


Grazie mille! Spero che questo sia risolto al più presto!
Ferran Maylinch,

Quindi questo è sul problema a livello di iOS? Sto riscontrando anche questo problema su iPhone con iOS 13.3.1 versione
Adromil Balais il

Sì, questo è un problema con iOS 13.3.1 e versioni successive che rifiutano i framework firmati del profilo di provisioning del team personale. Non è specifico per Flutter. I collegamenti nel commento di GitHub fanno riferimento ad altri progetti e sono stato facilmente in grado di riprodurre con un nuovissimo framework in Xcode senza incorporare Flutter.
Jenn

Ho appena provato ora con iOS 13.4 e funziona! Potrei eseguire la mia app Flutter su un vero iPhone da Xcode e anche da IntelliJ IDEA. Immagino che funzionerà anche dalla riga di comando.
Ferran Maylinch,

4

Per quanto posso vedere è un problema di compatibilità Flutter con iOS 13.3.1. Nel mio caso, la mia app funziona perfettamente su iPhone XR con iOS 13.3 ma si arresta in modo anomalo all'avvio su un altro iPhone XR con iOS 13.3.1. Impossibile eseguire il test nel simulatore in quanto è un'app per fotocamera ma funziona sia su dispositivi Android fisici che su emulatori Android.


Hai ragione. Appena testato con il mio iPad con 13.3. Il mio telefono non funziona con 13.3.1. Andando ad aggiornare alla beta 2 e provare :-)
Ken Hui il

13.3.1 La versione beta 2 pubblica ha lo stesso problema.
Ken Hui,

3
  1. Hai accettato il contratto di licenza xcode? in caso contrario, prova sudo xcodebuild -license.
  2. I tuoi pod sono aggiornati? in caso contrario, vai alla cartella iOS nel progetto Flutter nel tuo terminale e digita pod installquindipod update

Se questo non funziona, vai alla cartella iOS nel tuo progetto Flutter e apri Runner.xcworkspace toccandolo due volte. Dovrebbe sembrare come questo:

inserisci qui la descrizione dell'immagine

Quando si apre xcode, fare clic su Runner in alto a sinistra.

inserisci qui la descrizione dell'immagine

Quindi vai su Firma e funzionalità e sotto il menu a discesa "Squadra", seleziona un campo. Se non esiste, crea un account.

inserisci qui la descrizione dell'immagine

Quindi in "Identificatore bundle", dovrebbe essere visualizzato il nome del bundle dell'app. Aggiungi .app alla fine. Ad esempio, se il suo "com.example.yourapp" lo rende "com.example.yourapp.app" e premi Invio.

Premi il pulsante di riproduzione in alto a sinistra per eseguire l'app sul dispositivo selezionato.


Non ho un Podfile. Sto guardando questo post stackoverflow.com/questions/51599686/...
Ferran Maylinch

Installa cocoapods sul tuo computer ed esegui i comandi pod nella tua directory ios.
Yudhishthir Singh,

Ho dei cocoapodi. Quali comandi pod devo usare?
Ferran Maylinch,

installazione pod e quindi aggiornamento pod
Yudhishthir Singh

Ho apportato modifiche alla mia risposta, per favore dai un'occhiata.
Yudhishthir Singh,

1

Puoi seguire il passo uno per uno

flutter channel master
flutter upgrade
flutter clean
flutter build ios

Ci ho provato. Anche sul canale beta.
Ferran Maylinch,

L'errore è legato alle funzionalità di firma, il ramo flutter non ha nulla a che fare con esso.
Yudhishthir Singh,

1

Questo post non è una risposta perché sto lottando anche con questo problema e scrivo questo dato che è stato un po 'di tempo senza una correzione

Tutto quello che voglio è fornire maggiori dettagli a OP e agli altri membri qui. Quindi ho tutto come dichiarato da OP.

Questo è quello che ho provato:

  1. Podfile non viene creato (anche dopo l'esecuzione su Simulator e così via) ed è per questo che ho provato a includerne uno da un'app flutter di esempio da Flutter Github.

    • Directory iOS cancellata
    • Aggiunto un podfile
    • Ha eseguito l'aggiornamento del pod.
    • Avvisi corretti (fornito debug Pod e configurazioni di rilascio su Xcode)
    • Aggiunti FLUTTER_ROOT alle impostazioni definite dall'utente (come era assente) e stavo ottenendo l'errore Xcode-backend.sh (non ricordare esattamente, scusa)
    • Costruito

Quindi questi passaggi producono: questo errore su Simulator. Stessi errori di firma come senza Pod sul dispositivo fisico

  • Hai eliminato tutti i certificati da Keychain Access e li hai ripristinati tramite Xcode.

    Risultato: non è cambiato nulla

  • Rimossi Xcode, Pod e impostazioni ad esso correlati. Certificati rimossi. Ripristinato tutto dopo un riavvio (nuova installazione)

    Risultato: di nuovo, né compilare con pod né senza fornire gli stessi errori

  • Ho aggiornato Flutter al canale dev (1.14.1) e ho rigenerato il progetto usando flutter create .

    Reran costruisce. Con baccelli e senza. Sempre lo stesso

  • Inoltre ho provato a cambiare la firma da Apple Developer a iOS Developer su tutti i target (Pod incluso)

    In questo ho alcuni errori perché ho anche provato a firmare Pods-Runner (c'era un po 'di speranza). Ma nel complesso niente di nuovo.

  • Mentre eseguo un dispositivo su iOS 13.3.1 Beta, ho aggiornato Target a 13.2 (massimo disponibile in questo momento?).

    no

  • Ho abilitato macOS-build e creato un'app per Mac

    Funziona come indenne, va tutto bene.

Per riassumere:

  • Questo problema non dipende dal progetto Pod / Non-Pod.
  • Non è cambiato nulla riguardo a questo problema tra il flutter più stabile e l'ultimo sviluppatore (come post scritto)
  • Questo errore non è stato risolto dalla reinstallazione di Xcode e non è correlato ai certificati Keychain
  • Il problema viene visualizzato solo quando si crea solo per dispositivi iOS fisici (iPhone X nel mio caso). Il simulatore (senza pod) funziona bene.

Btw. Tutto funzionava su MacBook Pro 13 con Catalina 10.15.3 installato e Xcode 11.3.1.

Ogni esecuzione era con -v flag e non è stato trovato nulla di sospetto nei registri durante la compilazione

Ancora. Mi dispiace se ho fatto qualcosa di sbagliato pubblicando questo, ma non volevo duplicare questo problema o suggerire a OP una modifica poiché questo post è piuttosto lungo.


Grazie mille per questa risposta Non è la soluzione ma è molto utile. Ovviamente, c'è qualcosa che non va in Flutter. Sembra che Google non sappia esattamente cosa si aspetta Apple o Apple non è interessata a far funzionare Flutter senza problemi ... :)
Ferran Maylinch,

A proposito, ieri ho provato Flutter su un altro Mac, con Mojave (il mio ha Catalina) e ho avuto lo stesso errore.
Ferran Maylinch il

Molto probabilmente questo è qualcosa legato a CodeSign o Flutter stesso. Dovremmo aprire un numero github.com/flutter/flutter/issues
Emin Guliev il

Sì. Buona idea. Fammi sapere se lo fai, o posso farlo da solo.
Ferran Maylinch,

0

Prova a passare al canale stabile tramite flutter channel stable, esegui flutter upgradee quindi vai al progetto dell'app ed eseguiflutter run


Sfortunatamente, ricevo lo stesso errore. Ho persino creato una nuova app flutter dopo essere passato al canale stabile. Ho aggiornato la mia domanda per mostrare che ora sono sul canale stabile.
Ferran Maylinch,

Ho anche aggiunto l'output di flutter run.
Ferran Maylinch,

0

Solo per eseguire l'app in modalità Debug, non è necessario alcun account Apple pagato. 1) Aprire xCode per quel progetto e selezionare il dispositivo ed eseguirlo.

Apri l'XCode di quel progetto e controlla le impostazioni di compilazione poiché il percorso FLUTTER_ROOT è corretto, altrimenti crea la radice flutter e specifica il percorso.


Ho ragione FLUTTER_ROOT. Non è questo il problema ... :(
Ferran Maylinch il


0

Hai controllato questo link che potrebbe darti l'output desiderato https://github.com/flutter/flutter/issues/16507 . fatemi sapere se funziona potrebbe essere un problema di firma, questo post vi darà l'idea di cosa non va. Grazie


Non ho Podfile quindi sto verificando questo: stackoverflow.com/questions/51599686/… Comunque, non so di quale Podfile ho bisogno. Ne ho creato uno ma continuo a ricevere lo stesso errore. Quindi forse non ho bisogno di un Podfile o comunque il problema è un altro.
Ferran Maylinch,

0

Ok, ho un momento per creare una risposta:

Basandosi sulla risposta di Subaharan Vel , domanda: cartelle Flutter Podfile e Pods non create nella directory ios e risposta suggerendo che la costruzione del simulatore iOS può creare un podfile in un posto errato (dovrebbe essere creato automaticamente direttamente nella directory iOS. Quindi sembra probabile che il tuo Podfile esiste da qualche parte lì. Prova a trovarlo o rimuovi l'intera directory ios, pulisci il progetto e ricrealo. Inoltre, assicurati che non sia così Creare un Podfile per aggiungere pod iOS prima di aggiungere qualsiasi plugin Flutter non aggancia mai i pod plugin in il podfile esistente .

Buona fortuna, spero che ti possa aiutare


Non c'è da nessuna Podfileparte. Corro find . -name Podfilee non ottengo nulla. Ho rimosso la iosdirectory ma ora, come posso ricrearla? Se corro flutter build iosottengo l'errore Application not configured for iOS.
Ferran Maylinch, il

@Ferran Maylinch Basta ripetere tutti i passaggi da Surbahan Vel (primo collegamento) - ha rimosso la directory ios ed è stato ricreato dopo aver pulito il progetto. Se necessario aggiungere manualmente podfile (da stackoverflow.com/a/53492243/7183675 , rimuovere baccelli inutili da lì, controllare anche secondo commento in questa risposta). Come ultima risorsa, può essere utile aggiungere almeno un pacchetto a pubspec per forzare Flutter a creare automaticamente Podfile. Anche se questo pacchetto non è davvero in uso
Adam Tucholski il

0

Non è una soluzione ideale, ma quanto segue ha funzionato per me.

  1. Aggiorna il tuo dispositivo a iOS 13.4 beta.
  2. Eseguire una corsa svolazzante
  3. La build dovrebbe avere successo.
  4. Verrà visualizzato l' errore "La tua versione Xcode potrebbe essere troppo vecchia per la tua versione iOS" .
  5. L'applicazione viene installata sul dispositivo. Nota: l'applicazione non si avvierà automaticamente al termine del processo.
  6. Fare clic sull'icona dell'app installata sul dispositivo per avviare l'app.

Tuttavia, non sarà possibile vedere nulla nella finestra di debug poiché il processo termina dopo aver generato l'errore. Non è una soluzione ideale ma sicuramente una soluzione alternativa fino a quando non avremo il prossimo aggiornamento di Xcode. 

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.