Libreria OS X Framework non caricata: "Immagine non trovata"


279

Sto cercando di creare un framework OS X di base, in questo momento ho appena creato un framework di test: TestMacFramework.framework e sto cercando di importarlo in un nuovissimo progetto di applicazione OS X.

Ho creato il file .framework e lo ho importato nel nuovo progetto, il framework sembra collegarsi correttamente e posso fare riferimento al file di intestazione pubblico che ho aggiunto alla sezione delle fasi di build del framework.

Tuttavia, quando provo a eseguire l'applicazione contenitore, visualizzo il seguente errore:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Dopo un po 'di ricerche su google ho capito che dovevo aggiungere una Copy Filessezione alle mie fasi di compilazione dell'applicazione container, quindi l'ho fatto e impostato in questo modo ...

inserisci qui la descrizione dell'immagine

Tuttavia, sto ancora ricevendo l'errore di runtime. Sto ovviamente facendo qualcosa di sbagliato qui, ma la risorsa della libreria per sviluppatori Apple per questo fa riferimento a Xcode 2, quindi non è molto utile!

Cosa mi sono perso?

AGGIORNARE:

Posso vedere nel registro di build che il mio TestMacFramework.frameworkviene copiato nella directory .app contents / frameworks, ma non viene installato nella directory Library / Frameworks su HD

inserisci qui la descrizione dell'immagine

AGGIORNAMENTO 2:

La build si collega correttamente se copio manualmente TestMacFramework.frameworknella Library/Frameworksdirectory


1
Cosa otool -Lti dice dove l'app si aspetta di trovare il framework?
trojanfoe,

Ok, ho capito come eseguirlo ... Questo è l'output che ottengo per la mia libreria (ho escluso le altre dipendenze, come Foundation, ecc.)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2,

La mia correzione era incorporare come binari la libreria di cui avevo bisogno (Alamofire). È accettabile?
Cmag

2
È molto confuso che questa domanda sia chiaramente etichettata come per OS X, e tutte le risposte, compresa quella accettata, sono per iOS. Ho lo stesso errore e non posso usare nessuna delle risposte.
RenniePet

@RenniePet Dal momento che Xcode 7.3 il processo è lo stesso per i framework iOS e macOS, la risposta accettata è il modo corretto di farlo. Se i problemi persistono, potrebbe trattarsi di un problema non correlato?
Sammio2,

Risposte:


553

[Xcode 11+]

L'unica cosa da fare è aggiungere il framework alla General->Frameworks, Libraries And Embedded Contentsezione nella Generalscheda del target dell'app.

Assicurati di selezionare l'opzione "Incorpora e firma".

inserisci qui la descrizione dell'immagine

[Xcode v6 -> Xcode v10]

L'unica cosa da fare è aggiungere il framework alla Embedded binariessezione nella Generalscheda del target dell'app.

Schermata di Xcode


32
Questo è l'unico passaggio necessario per iOS.
nikolovski,

7
Grazie! Risolto per me su iOS.
user1244109

6
Grazie! Mi ha aiutato per iOS
Alexander Khitev il

4
Uso una classe dal mio framework importato in Storyboard e ho riscontrato questo errore. Volevo solo aggiungere che oltre a impostare la CLASSE personalizzata in Storyboard, devi anche impostare il campo MODULO.
Ruben Martinez Jr.,

8
@ZevsVU Non ho una Embedded binariessezione nel mio progetto macOS. Cosa c'è che non va?
fnc12,

56

Quindi sono riuscito a farlo funzionare, è abbastanza semplice quando hai le giuste istruzioni. Quello che stavo cercando era un framework 'privato' che risieda nel bundle dell'app piuttosto che essere scritto nella cartella della libreria di sistema.

Costruire il quadro

  1. Aggiungi una destinazione per creare un Cocoa Framework
  2. All'interno di tali target 'Impostazioni build' configurare la 'Directory di installazione' su '@executable_path /../ Frameworks'
  3. Crea libreria e accedi a .framework dall'archivio o dalla directory dei prodotti

Compreso il quadro

  1. Trascina il file .framework creato nel progetto Xcode, assicurati di selezionare "Copia file nella directory"
  2. Nella destinazione delle applicazioni contenenti, aggiungere una nuova "Fase di creazione del file di copia"
  3. Impostare "Destinazione" su "Quadri"
  4. Trascina nel .framework creato

1
Questo funziona anche con framework iOS. Quando si aggiunge il framework personalizzato nell'area di lavoro da compilare insieme ad esso. Devi aggiungere la parte Inclusa The Framework di questa soluzione per risolvere questo errore durante il debug sul dispositivo!
cynistersix,

1
Grazie, ha funzionato per iOS. Non ho seguito i tuoi primi passi poiché i framework erano già integrati nella mia cartella di dati derivati
Gmeister4

Eccezionale! Mi hai salvato la giornata da matti! 2017 - Xcode 8.3.2 Grazie!
Glenn,

Per qualche strana ragione non è possibile trascinare il framework dalla sezione "Link Binary with Libraries" predefinita alla sezione "Embedded Frameworks" ma è possibile trascinare il framework dall'elenco dei progetti a sinistra. Dovrai comunque eliminare manualmente il framework dalla sezione "Collega binario con librerie" con il pulsante "-".
William Cerniuk,

18

Per me è stato abbastanza semplice, ho appena aggiunto il mio framework ai miei binari incorporati sotto i target delle app


15

Le opzioni di cui sopra dove non è possibile per me includere. L'ho risolto specificando il percorso di ricerca del percorso

Questo è sul ' scheda " Impostazioni build ". Nella sezione " Collegamento ". Cambia " Percorsi di ricerca del percorso " in$(inherited) @executable_path/Frameworks


Prima avevo bisogno di entrambi i passaggi, questo passaggio e di aggiungere una nuova "Fase di creazione del file di copia" con il framework.
user23

Avevo un vecchio progetto Xcode che è stato aggiornato in modo incrementale e queste impostazioni mancavano per me. Aggiunto e ora funziona come previsto.
Mattio,

tra tutte queste soluzioni questa ha funzionato, è così fastidioso come l'approccio al problema sia come "ok, lasciami andare in fondo alla lista di tutti questi post di stackoverflow, poiché la causa principale non è chiara" APPLEEEEE
Ryan,

9

Ho riscontrato lo stesso problema, ma la soluzione accettata non ha funzionato per me. Invece la soluzione era modificare il nome di installazione del framework.

L'errore nel post originale è:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Nota il primo percorso dopo Libreria non caricata . Il framework viene caricato da un percorso assoluto. Questo percorso deriva dal nome di installazione del framework (a volte chiamato rpath), che può essere esaminato usando:

otool -D MyFramework.framework/MyFramework

Quando un framework è incorporato in un'app, questo percorso deve essere relativo e di questa forma: @ rpath / MyFramework.framework / MyFramework . Se il nome di installazione del framework è un percorso assoluto, potrebbe non essere caricato in fase di esecuzione e verrà prodotto un errore simile a quello sopra.

La soluzione è modificare il nome dell'installazione:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Con questa modifica non ricevo più l'errore



7

Nessuno di questi problemi ha risolto questo per me. Il problema alla fine è stato abbastanza semplice. Sembra che sia un bug Xcode piuttosto importante che ho registrato il problema e risolto con il bug Apple: 29820370. Se stai lottando (poiché sembra che ci siano diverse pagine di problemi simili a questo), sarebbe fantastico se puoi solleva un bug sul reporter di bug: https://bugreport.apple.com/ e riferimento al bug che ho sollevato per ottenere visibilità. Voglio rendere Xcode nel piacere che era prima - e questo è qualcosa che sono sicuro che Xcode avrebbe dovuto risolvere da sé.

Ecco la soluzione: 1. Apri Portachiavi: vai al Cert sviluppatore Apple Worldwide. 2. Fai doppio clic su di esso 3. Cambia il livello di autorizzazione da "fidati sempre" per utilizzare i valori predefiniti di sistema 4. Salva e chiudi 5. Riavvia Xcode, pulisci e costruisci il tuo progetto e dovrebbe sparire.

Schermata di seguito delle impostazioni corrette: Accesso al portachiavi fisso spero che questo aiuti!


2
"Usa valori predefiniti di sistema" sembra essere l'impostazione standard.
Raffaello,

Non sempre - qualcosa sembra cambiarlo che si traduce in
quell'errore

Grazie anche a questo ho risolto il mio problema! Purtroppo non riesco a vedere il tuo biglietto sul tracker dei bug per dare ulteriore visibilità ad esso. Non sono sicuro del perché, tuttavia non mostra alcun bug.
Jim

7

Xcode 11:

in Xcode 11 aggiungi framework in General->Frameworks, Libraries And Embedded Content

dopo aver aggiunto assicurati di selezionare l' Embed & Signopzione

inserisci qui la descrizione dell'immagine


2
se lo fai, non potrai caricare la tua app su app store
Mahendra,

@Mahendra, qual è l'alternativa che usi in questo caso? Ho avuto un problema simile.
Derryl Thomas,

@DerrylThomas, L'app è ancora in modalità di sviluppo, quindi non ho testato questo caso
Mahendra,

1
@Mahendra, per favore condividi qui se trovi un'alternativa per questo. Le sarei molto grato.
Derryl Thomas,

@DerrylThomas Durante la creazione dell'archivio, ripristina l'opzione, Non incorporare e crea un eseguibile da caricare su App Store.
BlackPearl12

6

Quando si trascina un framework personalizzato in un progetto in Xcode 10.1 , si presuppone che il framework sia un framework di sistema e lo inserisce nella sezione "Collegamento binario con librerie" di "Fasi di costruzione" sotto il proprio target.

I framework di sistema sono già sul dispositivo, quindi non vengono copiati sul dispositivo e quindi non possono essere eseguiti in fase di esecuzione, quindi KABOOM (arresto anomalo in __abort_with_payload e errore di disinformazione: "Motivo: immagine non trovata"). Questo perché il codice del framework non viene copiato sul dispositivo ...

In realtà, per avere sia Xcode che colleghi il framework personalizzato sia per assicurarsi che sia copiato con il tuo codice sul dispositivo iOS (reale o simulatore), il framework personalizzato deve essere spostato in "Copia risorse bundle". Questo alla fine impacchetta il framework insieme all'eseguibile del codice per renderlo disponibile sul dispositivo insieme.

Per aggiungere un framework personalizzato a un progetto ed evitare il crash di Apple:

  1. Trascina il framework personalizzato nell'elenco dei file di progetto iOS
  2. Fare clic su ProjectName in Navigator -> TargetName -> "Build Phases" -> Collega binario con librerie triangolo di divulgazione
  3. Trascina il framework personalizzato verso l'esterno e verso il basso nella sezione "Copia risorse bundle" di seguito (Xcode ora sposta il riferimento del framework, risolto in Xcode 10)
  4. Esegui in simulatore o dispositivo

Il framework personalizzato viene quindi copiato insieme al codice sul dispositivo di destinazione ed è disponibile in fase di esecuzione.

inserisci qui la descrizione dell'immagine

[editoriale: penseresti che Xcode sia abbastanza intelligente da capire la differenza tra uno dei suoi framework di sistema che non devono essere copiati sul dispositivo e un framework personalizzato che è, oh, non lo so, nella gerarchia della directory root del progetto ... 🙄]


5

Dovrebbe esserci uno 'Run Script' in 'Build Phases' con questo: '/ usr / local / bin / carthage copy-frameworks'

Su "File di input" di quello "Esegui script", è necessario aggiungere il percorso alle librerie. Come questo:

Build Phases Run Script


4

Se ripristini accidentalmente il tuo portachiavi, ciò può accadere a causa della mancanza di certificati Apple nel portachiavi. Ho seguito questo per risolvere il mio problema.

Ho avuto lo stesso problema e sono stato in grado di risolvere scaricando nuovamente il WWDR (Autorità di certificazione delle relazioni con gli sviluppatori di Apple Worldwide). Scarica da qui: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer


Questo ha risolto anche il mio problema. Ricorda di pulire la cartella di build prima di ricompilare.
Justin Milo,

4

Se si utilizza Xcode 11 , assicurarsi di avere il framework aggiunto in Frameworks, Librerie e Incorpora contenuto in Impostazioni target - Generale. Cambia lo stato di incorporamento da "Non incorporare" a "Incorpora e firma"


Ma questo darà l'errore ITMS-90206 Errore Swift Support non valido quando si distribuisce su App Store. Funziona solo in sviluppo.
Raptor il

2

Ciò che ha risolto per me stava cambiando abstract_targetin targetper l'obiettivo principale nel mio Podfile. L'avevo impostato in precedenza su abstract_targete questo ha causato l'errore descritto. ora funziona perfettamente


1

Per Xcode 8, alcuni prodotti obsoleti verranno rimossi dalla cartella dei dati derivati ​​fare riferimento a questa soluzione .

Apple: in macOS 10.12 e versioni successive, Xcode pulisce i dati derivati ​​non aggiornati, le intestazioni precompilate e le cache dei moduli. (23282174)

Il sistema di compilazione Xcode supporta la rimozione di file obsoleti di alcuni tipi di artefatti di build che sono stati prodotti in una build precedente, ma che sono stati rimossi dal progetto.

Basandomi sul pensiero dell'autore, ho trovato questo registro di build dal mio caso.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Dopo aver creato una nuova fase di copia del file e copiato il framework obsoleto di destinazione nella destinazione Frameworks , il registro di rimozione sopra scompare dopo la ricostruzione.

Basta chiarire la mia situazione e la ragione, spero che sia utile per qualcuno.


1

Per me questa è stata la soluzione, dopo molte ore di ricerche !!

Per qualche ragione, ben nello sviluppo di un framework personalizzato Swift 2.3, Xcode 8 ha rimosso l' DYLIB_INSTALL_NAME_BASEimpostazione dal project.pbxprojfile. Una piccola camminata verso l' Build Settings / Dynamic Library Install Name Baseambientazione per @rpathripararlo.

(da https://forums.developer.apple.com/thread/4687 )


0

Ho scoperto che questo problema era legato solo alla firma del codice e ai certificati e non al codice stesso. Per verificarlo, crea l'app di visualizzazione singola di base e prova a eseguirla senza apportare modifiche al tuo dispositivo. Se vedi lo stesso tipo di errore, questo mostra che il tuo codice va bene. Come me, troverai che i tuoi certificati non sono validi. Scarica di nuovo tutto e correggi quelli scaduti. Quindi, quando si ottiene l'app di base per non segnalare l'errore, riprovare dopo aver chiuso Xcode e aver riavviato il mac per buona misura. Ciò ha finalmente messo fine a questo incubo. Molto probabilmente questo non ha nulla a che fare con il tuo codice, specialmente se ricevi il messaggio Build Successful quando tenti di eseguirlo. FYI


0

Risolto il problema provando Xcode 9 beta e tornando a Xcode 8. Un semplice Clean sulla destinazione risolto il problema.


0

Ho avuto lo stesso problema per un motivo diverso. Ho creato una nuova configurazione per il debug e il rilascio (in PROGETTO -> scheda Informazioni -> Configurazione). E ho dovuto cambiare lo script della shell dei framework dei pod (Pods- "appName" -frameworks.sh, in Targets Support Files) per farlo funzionare.

[Xcode 9]


0

L'unica cosa che ha funzionato per me:

Destinazione> Fasi di costruzione> [CP] Incorpora frame di pods Deseleziona "Mostra variabili di ambiente nel registro di build" e "Esegui script solo durante l'installazione"


0

Ho provato molte correzioni, ma ciò che ha funzionato per me è stato eliminare un obiettivo mancante elencato nella scheda build dello schema di build. Puoi accedervi aprendo la finestra di modifica dello schema corrente.

Modifica: anche il mio obiettivo di test dell'interfaccia utente non funzionava e la soluzione che ho trovato era eliminarlo e generarlo di nuovo.


0

apri xcode -> generale -> file binari incorporati -> aggiungi QBImagepicker.framework e RSKImageCropper -> progetto pulito

basta aggiungere QBImagePicker.framework e RSKImageCropper.framework su binari incorporati ha funzionato per me


0

Penso che non ci sia un modo fisso per risolvere questo problema poiché potrebbe essere causato da ragioni diverse. Ho anche avuto questo problema la scorsa settimana, non so quando ed esattamente cosa causi questo problema, solo quando lo eseguo sul simulatore con Xcode o provo a installarlo sul telefono, quindi segnala questo tipo di errore, ma quando eseguirlo con run-ios di reazione nativo con terminale, non ci sono problemi.

Ho controllato tutti i modi pubblicati su Internet, come il rinnovo del certificato, la modifica delle impostazioni in Xcode (tutti i modi menzionati sopra), in realtà tutte le impostazioni in Xcode erano già state impostate come richiesto in precedenza, nessuno dei modi funziona per me. Fino a stamattina, quando cancello i pod e lo reinstallo, l'errore alla fine dopo una settimana. Se stai usando anche cocoapod e poi l'errore è stato mostrato senza alcun motivo specifico, forse puoi provare a modo mio.

  1. Controlla la mia versione di cocoapods.
  2. Aggiornalo se è disponibile una nuova versione.
  3. Vai alla cartella del tuo progetto, elimina Podfile.lock, il file Pods, il progetto xcworkspace.
  4. Esegui installazione pod

0

Ho riscontrato questo problema solo durante l'esecuzione su dispositivo reale (iPhone SE). Il progetto del simulatore ha funzionato come previsto.

Ho provato tutte le correzioni proprio da questo thread e da qui . Nessuno di quelli ha funzionato per me.

Per me il problema è stato risolto dopo il riavvio di iPhone (sic!).

L'ho fatto:

  • cartella di build pulita,
  • pulire i dati derivati,
  • elimina app dal dispositivo,
  • riavvia il dispositivo

E finalmente funziona. :)

Se ogni altra soluzione fallisce, non dimenticare di provarlo.


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.