App iOS con framework bloccato sul dispositivo, dyld: libreria non caricata, Xcode 6 Beta


573

Questo crash è stato un problema di blocco che ho usato i seguenti passaggi per riprodurre il problema:

  • Crea un progetto Cocoa Touch Framework
  • Aggiungi un file rapido e un cane di classe
  • Crea un framework per il dispositivo
  • Crea un'applicazione a visualizzazione singola in Swift
  • Importa framework nel progetto app
  • Crea un'istanza di classe rapida dal framework in ViewController
  • Crea ed esegui un'app sul dispositivo

L'app si è immediatamente arrestata in modo anomalo all'avvio, ecco il registro della console:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

Ho provato a costruire su dispositivi iOS 7.1 e 8.0, entrambi hanno lo stesso crash. Tuttavia, posso creare un'app ed eseguire il simulatore bene. Inoltre, sono consapevole che posso cambiare il framework per diventare Required to Optional in Link Binary With Libraries , ma non ha risolto completamente il problema, l'app si è arrestata in modo anomalo quando ho creato un'istanza di Dog . Il comportamento è diverso sul dispositivo e sul simulatore, sospetto che non possiamo distribuire un framework per il dispositivo utilizzando una versione beta di Xcode. Qualcuno può far luce su questo?


1
Quello che non capisco è il motivo per cui tutti gli altri framework di terze parti funzionano immediatamente e possono essere facilmente trascinati e rilasciati Link Binary with Librariese in qualche modo Xcode sa copiarli nel bundle dell'app, mentre per i framework personalizzati questo semplicemente non accade.
Fatuhoku,

La risposta di sazzad hissain khan qui stackoverflow.com/questions/26024100/… è la risposta migliore ..
Ankit Kumar

1
Dai un'occhiata a questo stackoverflow.com/a/52129141/2020034 . Funziona
Vinayak Parmar,

puoi creare una grassa libreria, puoi vedere questo link: stackoverflow.com/a/54977145/3992606
mohsen

La versione di Xcode non corrisponde , risolta con stackoverflow.com/a/55738882/5443510 .
Jimmy Yin,

Risposte:


975

Nella scheda Generale della destinazione , c'è un campo Binari incorporati . Quando aggiungi il framework lì, l'arresto anomalo viene risolto.

Il riferimento è qui sui forum degli sviluppatori Apple.


73
Ho il framework nei binari incorporati e ho anche la fase di copia impostata su "Frameworks". Si schianta comunque.
Loretoparisi,

11
Ciò è stato risolto solo in modalità debug. Si verificherà di nuovo un errore quando si archivia o si crea un progetto
Saad Ur Rehman,

13
L'aggiunta di @ecutable_path / Frameworks al 'Percorso di ricerca del percorso' ha risolto questo problema, ad esempio oltre all'aggiunta del framework a 'Embedded Binaries'
ArdenDev

14
Chiunque può aiutare come aggiungere un framework in binari incorporati, dai POD?
Bonnke,

3
Idem. Vorrei anche sapere come aggiungere dai POD, dato che non esiste un "Generale> File binari incorporati" che si trova in XCode 6.4 usando PODS
dedato il

259

Per iOS maggiore o uguale a 8

Nella scheda Generale del target, nella sezione File binari incorporati aggiungi il framework. Questo copierà il framework nel compilato in modo che possa essere collegato in fase di esecuzione.

inserisci qui la descrizione dell'immagine

Perché sta succedendo? : perché il framework a cui ci si collega è compilato come framework collegato dinamicamente e quindi è collegato in fase di runtime.

** Nota: ** L'incorporamento di framework personalizzati è supportato solo in iOS> 8 e quindi segue una soluzione alternativa che funziona con versioni precedenti di iOS.

Per iOS meno di 8

Se si influenza questo framework (si ha accesso al codice sorgente / processo di compilazione) è possibile modificare questo framework in modo che sia staticamente collegato piuttosto che dinamico. Ciò farà sì che il codice venga incluso nell'app compilata anziché essere collegato in fase di esecuzione e pertanto il framework non dovrà essere incorporato.

** Come: ** Nella scheda Impostazione build del framework, nella sezione Collegamento, modificare il Tipo di Mach-O in Libreria statica. Ora non è necessario includere il framework in file binari incorporati.

Quadro statico

Compresi beni: per includere elementi come immagini, audio o file xib / nib, consiglio di creare un pacchetto (essenzialmente una directory, maggiori informazioni qui bit.ly/ios_bundle) e quindi caricare i beni dal pacchetto usando NSBundle.


1
Come posso aggiungere un framework ai binari incorporati, se framework è in Pod?
TomazStoiljkovic,

Cosa intendi con "framework is in Pods"? Che il tuo framework personalizzato sia distribuito tramite CocoaPods?
Dawson,

2
Dovrebbe essere "Maggiore o uguale a 8". Ho dovuto farlo anche su iOS 8.
Cruinh

erroreSwift is not supported for static libraries
jose920405,

@TomazStoiljkovic l'hai capito? Ho lo stesso problema, ho un framework che voglio costruire come binario, ma dipende da altri framework tramite baccelli di cacao.
MegaManX il

125

Trascinare il framework nel tuo progetto non sarà abbastanza buono. È come essere nello stesso campo da baseball ma non riuscire a trovare i tuoi figli. Segui questi passi:

1) Crea il tuo framework

  • Sviluppa il tuo framework.
  • Una volta completato lo sviluppo, COMMAND+ Bcostruisci il tuo framework e assicurati di ricevere "Build Succeeded".

inserisci qui la descrizione dell'immagine

2) Accedi al tuo framework

  • Una volta che il tuo progetto quadro viene compilato correttamente, sarà quindi pronto per l'accesso nella Productscartella del progetto.

inserisci qui la descrizione dell'immagine

  • Fai clic destro sul tuo .frameworke seleziona "Mostra nel Finder".

inserisci qui la descrizione dell'immagine

3) Posiziona il framework nel tuo progetto

  • Trascina e rilascia .frameworkdalla finestra del Finder alla cartella "Framework" del tuo progetto di app.

inserisci qui la descrizione dell'immagine

4) Configurare il progetto app per framework

  • Seleziona il livello superiore nel tuo progetto

inserisci qui la descrizione dell'immagine

  • Scegli il tuo obiettivo

inserisci qui la descrizione dell'immagine

  • Vai su "Crea fasi", quindi "Collega binario con librerie" e assicurati che il tuo framework sia incluso con l'opzione selezionata .

inserisci qui la descrizione dell'immagine

  • Sempre in "Build Phases", vai in alto a sinistra e seleziona il +pulsante. Nel menu a discesa selezionare "Nuova fase di copia dei file".

inserisci qui la descrizione dell'immagine

  • Scorri verso il basso fino alla nuova sezione "Copia file" e assicurati di impostare Destinationsu "Frameworks". Lascia vuoto il sottotraccia. Quindi fare clic sul +pulsante in basso a sinistra.

inserisci qui la descrizione dell'immagine

  • Ti verrà presentata la gerarchia del tuo progetto. Scorri verso il basso fino alla cartella "Frameworks" a cui hai aggiunto il framework al passaggio 3, oppure cercalo nella barra di ricerca in alto. Seleziona il tuo framework e fai clic su "Aggiungi".

inserisci qui la descrizione dell'immagine

  • Assicurarsi che il proprio framework sia incluso con l'opzione "Copia codice su copia" selezionata.

inserisci qui la descrizione dell'immagine

5) Pulisci, quindi esegui il tuo progetto

  • COMMAND+ SHIFT+K
  • COMMAND+R

5
Buon punto. Funziona quasi per me. Ho realizzato un framework A, che include Alamofire. La mia app host (framework incorporato A) funziona con simulatori. Ma quando provo a eseguirlo su un vero iPhone, si blocca con errore: Alamofire: dyld: libreria non caricata: @ rpath / Alamofire.framework / Alamofire Motivo: non è stata trovata alcuna immagine adatta. Trovato: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, architecture wrong
DàChún

1
@Brandon Rendere facoltativo il framework ha risolto il mio problema. Ma puoi spiegarmi qual è il comportamento di rendere facoltativo il framework?
Mitesh Dobareeya,

2
Grazie! Nel tuo passaggio 5, ho controllato "Copia solo durante l'installazione" e questo era il mio problema.
Andi,

48

Ho creato un framework usando Swift3 / Xcode 8.1 e lo stavo consumando in un progetto Objective-C / Xcode 8.1. Per risolvere questo problema ho dovuto abilitare l' Always Embed Swift Standard Librariesopzione sotto Build Options.

Dai un'occhiata a questo screenshot:

inserisci qui la descrizione dell'immagine


3
Questo ora ha funzionato per me a. La soluzione a questo problema è andare su BuildPhases -> Copia file -> selezionare Framework in Destination e aggiungere il framework. È probabile che qui manchi la tua biblioteca.
Harish,

@Harish, la soluzione che stai suggerendo è già stata suggerita da molti e sicuramente me ne occuperò al primo punto. Nel mio caso il framework è stato aggiunto lì, ma è ancora apparso lo stesso problema. Poi lo scavo da solo. Se hai votato in giù questa soluzione, non so perché sei abbastanza sicuro della tua strada quando non ha funzionato nel mio caso: S
NeverHopeless

@Harish Grazie. La tua risposta mi ha aiutato molto di più e ovviamente anche NeverHopeless ha fatto :) Grazie ragazzi
Mohsin Khubaib Ahmed,

Questa è stata l'unica cosa che ha funzionato per me .. ma sto già "incorporando" il framework nella Embedded Binariessezione del mio target . Quindi perché questo lo fa funzionare?
guptron,

Incredibile questa cosa funziona perché se si utilizza una libreria veloce o un pod per incorporare nel progetto C obiettivo. Il progetto Obiettivo C ha spesso questa bandiera su No.
Swaroop S

47

Per prima cosa prova a compilare dopo Comando + Opzione + Maiusc + K. Se il problema persiste, procedi come segue.

Se qualcuno si trova ad affrontare questo errore in Xcode 8, cambia lo stato del tuo framework in Opzionale invece di Richiesto nella scheda Generale del tuo target.

inserisci qui la descrizione dell'immagine


3
Ciò consentirà al runtime di non riconoscere le classi dal framework
tesla,

@azimov è corretto. Sto affrontando questo dilemma al momento. Richiesto causa l'errore "immagine non trovata" e se proviamo a impostarlo su opzionale si bloccherà in fase di esecuzione con "selettore non riconosciuto"
Adam Mendoza,

1
Anche se il mio framework era già in Link Binaries e Embed, dovevo ancora aggiungere una fase di copia. dyld: libreria non caricata: @ rpath / AFNetworking.framework / AFNetworking Riferito da: / Users / {User} / Library / Developer / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Motivo: immagine non trovata (lldb) Soluzione: Progetto -> Target -> Costruisci fasi -> + in alto per aggiungere una nuova fase Copia file Destinazione = Frameworks Seleziona il Framework che deve essere copiato
Adam Mendoza,

@AdamMendoza Ho rifiutato la mia app per questo.
jbouaziz,

@jbouaziz, sì, un errore che potresti incontrare è dovuto al fatto che .framework è grasso, nel senso che ha architetture che non sono supportate su iOS come i386 x86_64 oltre al necessario armv7 arm64. Il negozio ti darà un errore, ma potresti non vedere l'errore in Xcode. Utilizzare il caricatore in Xcode -> Apri strumento di sviluppo -> Caricatore applicazioni. SoluzioneL, dimagrisci,
Adam Mendoza,

28

Ho avuto lo stesso tipo di problema nella versione iOS 9.x.

IL PROBLEMA È: L' app si blocca non appena apro l'app con l'errore seguente.

dyld: libreria non caricata: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Citato da: /var/containers/Bundle/Application/######/TestApp.app/TestApp Motivo: immagine non trovata

Ho risolto questo problema cambiando Requiredin Optionalin Linked Frameworks and Librariesper UserNotifications.frameworkframework.


Questo funziona Qualcuno sa perché? Perché alcuni dispositivi richiedono questa impostazione, altri no.
NEO,

Ricevo "avviso: impossibile eseguire il codice di supporto per leggere i dati della classe Objective-C nel processo. Ciò può ridurre la qualità delle informazioni sul tipo disponibili." quando contrassegno la mia lib come opzionale
BergP

ha funzionato forse la ragione è che alcuni framework non sono stati eseguiti nel simulatore, ecco perché
Gowtham Sooryaraj,

@ redent84 Questa risposta, insieme al tuo commento, mi ha salvato dal diventare pazzo. Ho riscontrato questo problema con AuthenticationServices.framework, che richiede iOS 12.
Ho riscontrato

26

Ho dovuto (oltre a quanto menzionato qui) aggiungere la seguente riga a percorsi di ricerca del percorso nella scheda Impostazioni di costruzione :
@executable_path/Frameworks

inserisci qui la descrizione dell'immagine


Ciò ha risolto il problema per me. Ho iniziato ad avere il problema dopo aver aggiunto un'estensione per app alla mia app iOS 9. Prima di aggiungere l'estensione, il mio framework è stato trovato bene. L'aggiunta di una fase di creazione dei file di copia non ha aiutato e stavo già incorporando il framework.
Greg,

È così strano che questo non sia incluso di default. Se decomprimi e guardi il tuo IPA, dovresti trovare i tuoi framework in Payloads / appname.app / Frameworks /. Tuttavia, l'aggiunta di questo percorso di ricerca deve essere presente affinché l'app possa cercare in questa cartella durante il runtime. Strano.
mattv123,

25

È necessario aggiungere il framework a una nuova fase di creazione dei file di copia per assicurarsi che il framework venga copiato nel bundle dell'applicazione in fase di esecuzione.

Per ulteriori informazioni, vedere Come aggiungere una "Fase di creazione dei file di copia" alla mia destinazione .

Documenti Apple ufficiali: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html


Dopo aver provato tante cose, questo è quello che mi ha risolto. Ho già avuto il framework in Link Binary e Embed Framework. Non pensavo di dover aggiungere anche una fase di copia, ma questo ha risolto il problema.
Adam Mendoza,

14

Se stai usando Xcode 11 o più recente :

  1. Passare alle impostazioni del target e selezionare Generale .

Impostazioni target / Generale

  1. Scorri verso il basso fino a Frameworks, Librerie e Contenuto incorporato .

  2. Assicurarsi che il valore Incorpora e firma o Incorpora senza firma sia selezionato per l' opzione Incorpora , se necessario.

Sezione Frameworks, Librerie e contenuto incorporato


13

Aggiungi il framework in binari incorporati inserisci qui la descrizione dell'immagine

Quindi pulisci e costruisci.


11

Sorprendentemente, non tutti i pezzi necessari sono documentati qui, almeno per Xcode 8.

Il mio caso era un framework personalizzato come parte dello stesso spazio di lavoro. Si scopre che è stato costruito in modo errato. Basato sull'ultima risposta di jeremyhu a questa discussione:

https://forums.developer.apple.com/thread/4687

Ho dovuto impostare Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) nell'ambito Build Settingsdel Progetto quadro e quindi ricostruirlo. È stato impostato in modo errato su $(LOCAL_LIBRARY_DIR)e ho dovuto modificarlo in @rpath.

Quindi, nella fase di elaborazione dei collegamenti nel Progetto app , stava istruendo l'app host a caricare dinamicamente il framework in fase di runtime da /Library/Frameworks/fw.Framework/fw(come in, la radice del filesystem di runtime) piuttosto che il percorso verso l'app/Frameworks/fw.Framework/fw

Per quanto riguarda tutte le altre impostazioni: non deve essere in 3 posti in Build Phases, ma questi sono tutti insieme in una sola volta quando si aggiunge solo alla Embedded Binariesimpostazione della Generalscheda di App hosting.

Ho fatto non dover impostare un ulteriore Copy Filesfase, che sembra intuitivamente ridondante rispetto alla fase di incorporazione in ogni caso. Controllando la coda della trascrizione build possiamo assicurare che non è necessario.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Sono state rimosse molte righe dettagliate, ma è chiaro dalla trascrizione semplificata nell'interfaccia utente di Xcode.]

Ho ancora nessuna idea del perché Xcode impostare il DYLIB_INSTALL_NAME_BASEvalore in modo non corretto su di me.


1
Grazie, questo si è rivelato essere il mio problema in Xcode 11. Stavo importando uno dei miei framework, che in precedenza funzionava, ma ho iniziato a emettere l'errore "dyld: libreria non caricata". Per essere chiari, si desidera impostare l'impostazione di creazione "Base nome installazione libreria dinamica" su "@rpath" nel progetto del framework che si sta tentando di importare, non nel progetto in cui si sta importando. In qualche modo è stato impostato su "/ Library / Frameworks".
Ben Stahl,

Sono contento che sia stato utile 3 anni dopo. Modificato di conseguenza.
BaseZen

9

Nel mio caso la soluzione era quella di rimuovere il framework compilato dai file binari incorporati, che era un progetto autonomo nell'area di lavoro, ripulirlo e ricostruirlo e infine aggiungere nuovamente i file binari incorporati.


8

Il mio ambiente: Cocos2d 2.0, Box2d, Objective C

Oltre a fare le altre risposte sopra, sono finalmente passato alla scheda Generale e ho reso WatchKit opzionale.

Target Frame e librerie collegati in generale Watchkit.framework Facoltativo


8

Se si utilizza un framework di terze parti e si utilizza Cocoapods come gestore delle dipendenze, provare a fare un pod install aggiornamento per i propri pod.

Questo incidente si stava verificando su una libreria di terze parti che stavo usando, quindi sono contento che la soluzione di cui sopra abbia funzionato per me, spero che funzioni per te!


1
Grande! risolto il mio problema. Ma c'è un modo per evitare l'installazione di dipendenze pod nell'applicazione host?
DàChún,

8

inserisci qui la descrizione dell'immagine

Risolto per me deselezionando "Copia solo quando installato" in Build Phases-> Embed Frameworks


1
Sarebbe bello sapere il punto di questa casella se il sistema non crede che "debug install" non sia "install". Indipendentemente da ciò, se provoca un arresto anomalo dell'app sull'hardware invece di vietare l'esecuzione dell'app con un avviso, è un altro
bel

8

È un errore di runtime causato da Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

L'errore Library not loadedcon @rpathindica che Dynamic Linkernon è possibile trovare il binario.

  1. Controlla se è stato aggiunto il framework dinamico General -> Embedded Binaries

  2. Verifica l' @rpathimpostazione tra consumatore (applicazione) e produttore (quadro dinamico):

    • Quadro dinamico:
      • Build Settings -> Dynamic Library Install Name
    • Applicazione:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Linker dinamico

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)che viene utilizzato da loadable bundle( Dynamic frameworkcome derivato) dove dyldentra in gioco
Dynamic Library Install Name- percorso del file binario (non .framework). Sì, hanno lo stesso nome, ma MyFramework.frameworkè un file binario packaged bundlecon MyFrameworkrisorse all'interno.
Questo percorso di directory può essere assoluta o relativa (ad esempio @executable_path, @loader_path, @rpath). Il percorso relativo è più preferibile perché viene modificato insieme a un'ancora utile quando si distribuisce il pacchetto in un'unica directory

percorso assoluto - Esempio di Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - relativo alla voce binary - caso d'uso esempio Framework2
: incorporare a Dynamic frameworkin un'applicazione

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - relativo al bundle proprietario di questo
caso d'uso binario : framework con framework incorporato - Framework3_1 con Framework3_2 all'interno

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Percorso di ricerca del percorso

Esempio di Framework2

In precedenza dovevamo impostare un Framework per lavorare con dyld. Non è conveniente perché lo stesso Framework non può essere utilizzato con configurazioni diverse

@rpath è un concetto composto che si basa su parti esterne (applicazione) e nidificate (quadro dinamico):

  • Applicazione:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- definisce un elenco di modelli che devono essere sostituiti @rpath.
       @executable_path/../Frameworks
    • Revisionare Build Phases -> Embed Frameworks -> Destination, Subpathcome shire dove si trova esattamente il framework di incorporamento
  • Quadro dinamico:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- punto @rpathutilizzato insieme al percorso del bundle locale in un file binario
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../- vai al genitore della directory corrente

otool - strumento di visualizzazione dei file oggetto

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool cambia i nomi di installazione dinamici della libreria condivisa usando -rpath

CocoaPodsusa use_frameworks![Informazioni] per regolare aDynamic Linker

[Vocabolario]


6

Di recente si è verificato questo problema con l'importazione di CoreNFC su iPhone più vecchi (ad esempio iPhone 6) e Xcode (11.3.1). Sono stato in grado di farlo funzionare

  1. Nei tuoi progetti , seleziona l'obiettivo.
  2. Vai alla scheda Generale in alto.
  3. Sotto " Frameworks, Librerie e contenuto incorporato ", aggiungi il framework (per me era CoreNFC). Ripetere l'operazione per altri obiettivi.
  4. Fai clic su Crea fasi in alto ed espandi ' Collega binario con librerie ".
  5. Rendi facoltativo il framework problematico (da richiesto).

Questo mi ha permesso di compilare per iPhone vecchi / nuovi senza apportare modifiche al codice. Spero che questo aiuti gli altri.


1
GRAZIE.
Renderlo

non funziona, l'app si arresta in modo anomalo e non è presente alcun messaggio che indichi il tipo di arresto invece di un punto di interruzione su alcuni codici assembly.
Newsonic il

perché è necessario per rendere facoltativo?
rohitwtbs

5

Ho avuto lo stesso problema. Ho provato a costruire il mio progetto con un iPhone che non avevo mai usato prima e non ho aggiunto un nuovo framework. Per me, la pulizia ha funzionato bene ( Maiusc + Comando + K ). Forse è perché uso la beta 5 di Xcode 7 e un iPhone 6 con iOS 9 Beta, ma ha funzionato.


E forse anche una cartella di creazione pulita (CMD + Maiusc + Alt + K)
Grifas,

4

Nel mio caso, il mio progetto è stato scritto da object-c e nella libreria ci sono file Swift. Così ho cambiato "Sempre incorporare le librerie standard di Swift" nella scheda Impostazioni di costruzione del mio progetto su e tutto è andato bene.


4

Per qualsiasi progetto o progetto Framework in Xcode che utilizza pod, un modo semplice per evitare che la libreria dinamica (dylb) da non caricare sia impostare il file pod sull'inchiostro in modalità statica. Per fare ciò, assicurati di non scrivere la seguente riga nel tuo file pod.

use_frameworks!

Una volta eliminata la riga dal tuo file che hai salvato, esegui semplicemente dalla console:

$ pod update

2

Se hai un pod di sviluppo Elimina l'app dal simulatore installa dal pod -> clean -> esegui di nuovo ...


2

La stessa cosa è stata quando ho creato un nuovo schema di configurazione e generazione.

Quindi la soluzione per me era correre

pod install

per questa configurazione appena creata.


1

Dopo aver provato tutti i metodi disponibili su Internet e la mia prova ed errore trucchi 100 volte. Finalmente sono stato in grado di risolverlo. - Apeksha Sahu 6 minuti fa
Vai a iTunes in Mac -> account -> Autorizza questo computer - Apeksha Sahu 5 minuti fa
secondo passo .... Vai allo sviluppatore nelle impostazioni su iPad e iPhone e reindicizza con identificatori e cancella i computer di fiducia tutto. Ha funzionato per me ........ ....... Dopo aver reinstallato Mac OS Alta seria versione 10.13.15 dall'ultima versione seirra beta di Mac OS, alla reinstallazione dell'ultima versione di Xcode, dopo aver aggiornato tutti i certificati. etc etc etc ... quanti più metodi puoi pensare che abbia fatto. -inserisci qui la descrizione dell'immagine


1

Prova a cambiare flag ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(nelle precedenti versioni di xcode:) Embedded Content Contains Swift Codenelle Impostazioni di costruzione da NO a SÌ.


1

Xcode 11

  1. Passare alle impostazioni del target e selezionare Generale.
  2. Cerca "Frameworks, Librerie e contenuto incorporato"
  3. Mantieni "Non incorporare" e assicurati che tutti i tuoi target (se ne hai più di uno) abbiano impostato solo il proprio framework e non altri target.

1

In Xcode 11

Stavo affrontando lo stesso problema

La modifica di "Non incorporare" nella scheda Generale > "Quadri, librerie e contenuto incorporato" continuava a provocare lo stesso errore.

Quello che mi ha risolto è stato l'aggiunta del Framework nella scheda Build Phases > Embed Frameworks

--Updated ---

Ho osservato che nei progetti realizzati nelle versioni precedenti di Xcode Embed Frameworks Section non è disponibile quando si esegue in Xcode 11, trovare i passaggi seguenti per ottenere la soluzione:

1: Per prima cosa è necessario aggiungere la nuova fase di copia dei file nella scheda Crea fasi .

inserisci qui la descrizione dell'immagine

2: in secondo luogo cambiare il nome della fase aggiunta in Incorpora framework inserisci qui la descrizione dell'immagine

3: modifica la destinazione in Frameworks .

inserisci qui la descrizione dell'immagine

4: aggiungere il framework per cui si è verificato l'errore.

inserisci qui la descrizione dell'immagine


1

Sebbene tutti stiano dicendo di incorporare il framework in Embedded Binaries, ma non funziona ancora, perché qui ci manca un passo importante.

Ecco i due passaggi giusti per aggiungere i binari nella scheda Binari incorporati:

  1. Rimuovere il framework che sta dando l'errore da "Framework e librerie collegate" nella scheda Generale.

  2. Ora aggiungi il framework rimosso solo nella scheda Binari incorporati e questo è tutto ciò che si dovrebbe fare.

Eseguilo sul dispositivo e mantieni quel sorriso;)


0
  1. Vai al file in xcode -> Impostazioni dell'area di lavoro
  2. Fai clic sulla freccia accanto alla quale appare / Users / apple / Library / Developer / Xcode / DerivedData
  3. Seleziona i dati derivati ​​e spostali nel Cestino.
  4. Abbastanza xcode e riaprirlo.
  5. Pulisci il progetto ed esegui di nuovo.

I passaggi precedenti hanno risolto i miei problemi.


0

La semplice soluzione è seguire questo screenshot quindi il crash andrà via:

inserisci qui la descrizione dell'immagine

Nota: questo è Xcode 11.5


-5

Nel caso in cui qualcuno stia ancora riscontrando questo problema, nonostante segua tutti i passaggi indicati nelle molte altre risposte, potrebbe essere necessario revocare e ricreare il certificato di firma del codice , come indicato di seguito:

https://developer.apple.com/library/ios/qa/qa1886/_index.html


Esattamente. La firma del codice non ha nulla a che fare con questo errore.
igraczech,
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.