2013-10-10 13 views
6

Ho uno spazio di lavoro, Application.xcworkspace, che crea due framework e un eseguibile che utilizza tali framework. Ecco come sono strutturati:Percorso di riferimento del framework XCode e directory di output di build

  • Framework_1 - Creato e restituito al brutto percorso DerivedData.

  • Framework_2 - Dipende da Framework_1, che è incluso nell'area Framework del progetto e specificato nella fase di compilazione "Collega binari con librerie" e viene inviato al percorso DerivedData.

  • Applicazione - Dipende da Framework_1 e Framework_2, che sono inclusi nell'area Framework del progetto e specificati nella fase di costruzione "Collega binari con librerie". La directory di output è ancora quel brutto percorso DerivedData.

Il problema che ho è che i percorsi nel file di progetto per i quadri di riferimento sono il brutto percorso DerivedData - sono come ../../Library/Developer/XCode/DerivedData/Application-longuglyuniquestring/ costruire/Prodotti/uscita/Framework_1.framework.

Se copio il codice sorgente in un'altra directory, oppure lo controllo in controllo versione e lo controllo su un'altra macchina, quei percorsi del framework non sono più validi. Vengono rigenerati. I framework di riferimento vengono visualizzati in rosso nel progetto.

Finora, quando voglio costruire l'area di lavoro in un'altra cartella, il modo in cui ho risolto il problema è quello di:

  • costruire l'area di lavoro - Framework_1 costruisce.
  • Vai al nodo "Prodotti" per quel framework e mostralo nel Finder.
  • Copia il nuovo percorso brutto.
  • Aprire i file di progetto per Framework_2 e Applicazione e correggere il percorso per Framework_1 e Framework_2.
  • Tutti gli elementi rossi devono essere risolti e tutto dovrebbe essere creato.

Questo processo è noioso e sono fortunato che il file di progetto possa essere modificato. È peggio per i colleghi che non capiscono il poco che so dei file di progetto e vogliono solo controllare il codice e farlo costruire.

C'è qualcosa che devo fare per creare la directory di output per i framework? Sono stato diffidente nel cambiarlo dal momento che il brutto percorso è raccomandato. Esiste un'opzione di copia dei file che posso usare per mettere questi framework in qualche posizione prevedibile rispetto al mio spazio di lavoro?

Qualsiasi aiuto sarebbe apprezzato. Sono sicuro che mi manca qualcosa di semplice - non ha senso che il codice estratto dal controllo del codice sorgente o copiato in un'altra directory non sia solo costruito.

+0

È insolito in quanto ho uno spazio di lavoro con '.dylib' e' .app' e sono entrambi inseriti nella stessa cartella ('.../DerivedData /.../ Build/Products/Debug'). Poi ho uno script come parte del build '.app' per copiare il file' .dylib' nella directory '.app/Resources/Frameworks'. – trojanfoe

+0

Nessun problema con le uscite delle app: tutti i framework richiesti sono inseriti nella directory app/Frameworks. Questo è un problema in fase di costruzione. I binari del framework incluso, usati nella fase di compilazione "Link Binary With Libraries" si trovano nella directory DerivedData dell'app. Quella directory cambia quando il progetto viene creato da una directory diversa. Tutti i file/sorgenti di progetto sono in una directory sotto root. Se li copio in un'altra directory, il progetto non verrà creato perché i percorsi della libreria per il collegamento saranno diversi. – GTAE86

+0

Se la vecchia directory e la nuova directory sono peer, il problema verrà mascherato perché il percorso relativo ai binari precedenti sarà ancora valido. Ciò può comportare che le modifiche apportate ai framework di riferimento non vengano "visualizzate" nell'app perché è ancora in collegamento con le vecchie versioni. Il modo più semplice per vedere il problema è copiare il codice sorgente su una macchina che è pulita rispetto allo spazio di lavoro/ai progetti. Anche se tutto è a posto, non verrà creato finché non verranno corretti i percorsi per il collegamento ai framework. – GTAE86

risposta

2

Sembra che ci sia un modo per impostare la directory DerivedData su una base per-lavoro - Xcode 4 - build output directory

ho appena impostato DerivedData essere relativo al mio lavoro, poi modificati file di progetto di conseguenza. L'unico lato negativo è che se dovessi utilizzare uno di quei progetti in un altro spazio di lavoro che utilizzava il percorso DerivedData predefinito, dovrei cambiarli di nuovo.

Mille grazie agli utenti DaGaMs - ha ottenuto un upvote.

Sto ancora vedendo un cattivo comportamento da XCode 5: ho ottenuto il progetto di lavoro sulla mia macchina. Copiato in un'altra cartella, in basso, e verificato che funzionava ancora. Uscito da XCode e copiato la directory contenente su un'unità di rete e da lì su un altro Mac. Quando l'ho aperto sull'altro Mac è stato come se non avessi mai apportato alcune modifiche. Ancora peggio, mentre lavoravo per risolverlo, XCode impazzì e aggiunse 6 caratteri "\" in più a ciascuna estremità dei miei percorsi FRAMEWORK_SEARCH_PATHS!

Parte del problema deriva dal fatto che le directory del sottoprogetto nella mia app sono assolute piuttosto che relative. I progetti nella parte superiore dell'area di lavoro sono "Relativo al gruppo", quindi ho modificato i sottoprogetti per avere lo stesso attributo. Questo sembra aver risolto il problema, anche se per qualche ragione quando copio tutti i file su un altro computer, il reindirizzamento dei dati derivati ​​non lo accompagna.

Problemi correlati