2014-09-26 15 views
9

Ho un modulo/framework scritto in Swift, destinato ad essere utilizzato su iOS. Quando cerco di includere il quadro nella mia app, ho notato alcuni suggerimenti rossa "non trovato" nelle fasi di creazione:Il modulo Swift iOS non viene distribuito nella directory di debug prevista

enter image description here

Ma, il progetto costruisce bene - la dipendenza bersaglio viene trovato, quindi non ci sono problemi di compilazione. È solo il framework costruito risultante - e sicuramente, al momento del lancio, ho un errore di linker, non riesco a trovare l'immagine. Guardando il log di compilazione, che sta cercando qui:

/Users/Craig/Projects/Fluffy/build/Debug-iphoneos/ 

che ha un senso - questo è quello che viene definito nelle impostazioni di generazione per il mio quadro:

enter image description here

Ma la copia fallisce, come fonte quadro non esiste:

PBXCp /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework /Users/Craig/Library/Developer/Xcode/DerivedData/MyApp-dcjfhcnyzkwzxiejuuxqlsgajreb/Build/Products/Debug-iphoneos/MyApp/Frameworks/Fluffy_iOS.framework 
... 
error: /Users/Craig/projects/Fluffy/build/Debug-iphoneos/Fluffy_iOS.framework: No such file or directory 

Tuttavia, guardando il log di compilazione per il mio quadro, vedo che è in realtà finire qui:

/Users/Craig/Library/Developer/Xcode/DerivedData/Fluffy-fuuewsvogdkycegheyrsabkiicxc/Build/Products/Debug-iphonesimulator/Fluffy_iOS.framework 

Suppongo che abbia un senso - DerivedData è da un po 'stata la posizione di default per tutti i prodotti costruiti.

E quando prendo uno sguardo alla cartella di accumulo previsto, non c'è molto, un sacco di esso è vecchio, e nessuna di esse si riferisce alla configurazione di debug:

enter image description here

Quindi il mio le domande sono: Perché il mio framework viene inserito nella cartella DerivedData, quando sembra che chieda nelle Impostazioni di compilazione di essere inserito nella cartella build relativa al progetto? Sono stati consultati questi parametri (percorso dei prodotti di build per configurazione, ecc.)?

E, cosa dovrei fare per riconciliare questo? Come può la mia applicazione sapere di guardare nella giusta cartella DerivedData per il framework, per la corretta configurazione (debug vs. release) in un modo che è estensibile e funzionerà senza che io debba specificare manualmente il percorso assoluto ad esso?

+0

Sto avendo esattamente lo stesso problema. Sei riuscito a trovare una soluzione? – olive

+0

No, sfortunatamente sfortunatamente. :-( –

+0

Solo per curiosità, avete uno spazio di lavoro e viene Fluffy_iOS in costruzione in quell'area di lavoro come dipendenza –

risposta

25

Ok, quindi ho capito come risolvere il problema. Questo presuppone che tu abbia spazio di lavoro e hai incluso il framework come progetto nello spazio di lavoro e stai provando a costruire un prodotto da un altro progetto nello spazio di lavoro che include il framework.

Quello che devi fare è scoprire dove si sta costruendo il quadro. Di solito è una directory pazza sotto la directory DeriveData. Vai al Finder e trovalo per la configurazione che hai appena provato a costruire.

Nel General impostazioni del target di prodotto, sotto Embedded Binaries, trascinare il file in esso. Questo dovrebbe ora collocarlo nello Project Navigator. Dovresti anche vederlo nello Linked Frameworks and Libraries al di sotto di Embedded Binaries.

Andare allo Project Navigator e selezionare il file e visualizzarlo sotto File Inspector.Qui, modificare lo Location in Relative to Build Products.

Nel target di Build Settings, per Framework Search Paths, aggiungere $(BUILT_PRODUCTS_DIR) e fare quello ricorsivo. Elimina la voce che è stata aggiunta automaticamente quando hai aggiunto il framework. Sarà un percorso esplicito che contiene il percorso DerivedData.

fare una pulizia profonda ed eliminare la directory DerivedData per buona misura.

Build.

Si dovrebbe ora vedere il quadro diventa nero e dovrebbe funzionare correttamente.

+0

Evviva La maggior parte poco chiara e importante:?! ** Vai alla navigazione di progetto e selezionare il file e visualizzarlo sotto la File Inspector.Lì, cambia la posizione in Relativo per creare prodotti ** – skywinder

+0

Quale voce? "Elimina la voce che è stata aggiunta automaticamente quando hai aggiunto il framework." – lespommes

+0

Di solito quando aggiungi un framework, Xcode inserirà una voce nel percorso per esso nei Percorsi di ricerca del framework. Quel percorso sarà un percorso esplicito che utilizza la directory dei percorsi. Questo non funziona bene con gli altri, dato che probabilmente non avranno la struttura del tuo percorso (che include il tuo nome utente) –

0

In aggiunta alla risposta di cui sopra, che funziona perfettamente su Simulator. Sul dispositivo si otterrà la libreria dyld non trovata errore e un arresto anomalo.

Ecco la soluzione per questo:

Nel progetto che dipende da questo quadro: Sotto le impostazioni di generazione: Aggiungere una fase di copiare i file e aggiungere questo quadro nella cartella 'quadri' in fase di copia dei file.

+0

Durante la creazione di una copia i file risolvono la fase, se il framework è già in Embed Frameworks, significa già che Xcode lo copierà nella cartella Frameworks. L'utilizzo della fase di copia dei file con l'opzione framework viene in genere utilizzato per i framework creati fuori da Xcode, ad esempio lo strumento della riga di comando. – chrisamanse

0

passi Questi sono leggermente modificati forniti da @Mobile Ben

assumere, si ha la seguente struttura progetto Xcode

-YourWorkspace 
--YourFramework project 
--YourApp project 

passo 1. Cancellare tutti i bersagli con Cmd+Shift+K e Cmd+Option+Shift+K (scegliendo ciascuno di li nel selettore Schema e premendo il combinazione di tasti)

passaggio 2. Selezionare YourFramework progetto.

passaggio 3. Scegliere un simulatore e costruire (Cmd+B) YourFramework bersaglio quadro

Fase 4: Scegli Generic iOS Device e costruire (Cmd+B) YourFramework bersaglio quadro

Fase 5: Selezionare YourApp progetto. Premere + in Embedded Binaries e scegli quadro nel quadro del progetto YourFramework

Fase 6: Ora individuare il quadro appena aggiunto nel Navigatore progetto (a sinistra). In File Inspector (sulla destra) seleziona la posizione Relative to build product.

NOTA: Credo che il punto 6 è richiesto b/c di alcuni bug in Xcode. Ma, tuttavia, non selezionando Relative to build product di default potrebbe essere un atto deliberato

UPD # 1: Dal Xcode 8.0 (8A218a), il passaggio 6 non è più necessaria - l'IDE imposta Relative to Build Products automaticamente.

Problemi correlati