Domanda

Ho un quadro personalizzato che, seguendo i consigli di guida Quadro di programmazione di Apple >> L'installazione del quadro installare in quadri / libreria /. Faccio questo con l'aggiunta di uno script eseguito fase con il seguente script di build:

cp -R  build/Debug/MyFramework.framework /Library/Frameworks

Nei miei progetti ho poi Link contro / Library / Frameworks / MyFramework e importarlo nei miei corsi in questo modo:

#import <MyFramework/MyFramework.h>

Questo funziona molto bene, solo che vedo sempre il seguente messaggio nella mia console debugger:

  

Programma Caricamento in debugger ...   SharedLibrary applicare carico-rules tutto   warning: Impossibile leggere i simboli per "/Users/elisevanlooij/Library/Frameworks/MyFramework.framework/Versions/A/MyFramework" (file non trovato).   warning: Impossibile leggere i simboli da "MyFramework" (non ancora mappato in memoria).   Programma caricato.

A quanto pare, il compilatore cerca prima in / Users / elisevanlooij / Library / Frameworks, non riesce a trovare MyFramework, poi guarda in / Library / Frameworks, non trovare MyFramework e continua per la sua strada. Finora questo è stato più di un fastidio che un vero problema, ma quando runnning test di unità, gdb si ferma sul (file non trovato) e si rifiuta di continuare. Ho risolto il problema con l'aggiunta di una riga in più per la fase di script Esegui

cp -R  build/Debug/MyFramework.framework ~/Library/Frameworks

, ma ci si sente come qualcosa di sello-taping che non deve essere rotto in primo luogo. Come posso risolvere questo problema?

È stato utile?

Soluzione

Nei mesi passati, ho imparato molto di più su framework, quindi sto riscrivendo questa risposta. Si prega di notare che io sto parlando di l'installazione di un quadro come parte del flusso di lavoro di sviluppo .

La posizione preferita per l'installazione di un quadro pubblico (vale a dire un quadro di riferimento che verrà utilizzato da più di una delle tue app o pacchi) è / Library / Frameworks [testo del link] perché "quadri in questa posizione vengono individuati automaticamente dal compilatore al momento della compilazione e il linker dinamico in fase di esecuzione. "[Guida quadro di programmazione]. Il modo più elegante per fare questo è nella sezione Distribuzione delle impostazioni di generazione.

Mentre si lavora sul quadro, ci sono momenti in cui si vuole aggiornare il quadro quando si esegue una generazione, e momenti in cui non lo fai. Per questo motivo, a cambiare le impostazioni di distribuzione solo nella configurazione di rilascio. Quindi:

  1. Fare doppio clic sul bersaglio quadro per aprire la finestra di informazioni di destinazione e passare alla scheda Genera.
  2. Seleziona di uscita nel selectbox configurazione.
  3. Scorrere fino alla sezione Distribuzione e immettere i seguenti valori:
  

Posizione di distribuzione = YES (Seleziona la casella)

     

Installazione realizzare prodotti Posizione = /

     

Directory di installazione = / Library / Frameworks

L'installazione realizzare prodotti Località serve come radice dell'installazione. Il suo valore di default è una directory / tmp:. Se non si cambia alla radice del sistema, non vedrai mai il framework installato dal momento che è nascosto nella / tmp

Ora si può lavorare sul quadro come ti piace nella configurazione di debug senza stravolgere i vostri altri progetti e quando si è pronti a pubblicare tutto quello che dovete fare è interruttore per sbloccare e fare una build.

Xcode 4 Attenzione Dal momento che il passaggio a Xcode 4, ho sperimentato un certo numero di problemi con la mia quadro personalizzato. Per lo più, sono link avvertimenti in GDB che in realtà non interferiscono con l'utilità del quadro, ad eccezione di quando si esegue l'unità-test incorporato. Ho presentato una richiesta di assistenza tecnica ad Apple una settimana fa, e sono ancora alla ricerca in esso. Quando ricevo una soluzione di lavoro Voglio aggiornare questa risposta in quanto la questione si è dimostrato molto popolare (1 kViews e oltre).

Altri suggerimenti

non c'è molto motivo per mettere un quadro in Library / Frameworks, ed è un sacco di lavoro: Avresti bisogno di farlo sia per l'utente in un pacchetto di installazione, che è un enorme fastidio per creare e mantenere, o avere il codice di installazione nella vostra applicazione (che potrebbe installare solo in ~ / L / F, a meno che spendere il tempo e lo sforzo necessario per rendere la vostra applicazione in grado di installare a / L / F con i privilegi di root).

Molto più comune è quello che Apple chiama un ‘quadro privata’ . Potrai impacchettare questo nella vostra bundle dell'applicazione.

Anche i quadri destinati ad un uso generale da tutte le applicazioni (ad esempio, Sparkle, Growl) sono, in pratica, costruiti per essere utilizzati come strutture private, semplicemente perché il modo “giusto” di installare una singola copia del quadro per Biblioteca / Frameworks è una seccatura.

Il modo convenzionale per farlo è quello di avere il vostro progetto quadro e dei suoi clienti condividere una directory comune build. Xcode cercherà intestazioni quadro e link contro binari quadro nella cartella di compilazione prima , prima di qualsiasi altra posizione. Quindi un progetto app che compila e link contro l'intestazione riprenderà il più di recente costruito uno, piuttosto che ciò che è installato.

È possibile quindi rimuovere il -r cp e di utilizzare invece il percorso di installazione di configurazione Regolazione di inserire il vostro prodotto di accumulo nella posizione finale, utilizzando xcodebuild installare DSTROOT = / nella riga di comando. Ma avrete solo bisogno di fare questo quando hai finito, non ogni volta che si ricostruisce il quadro.

Naturalmente, quando si distribuisce il quadro dovrebbe essere installato in / Library / Frameworks; tuttavia sembra strano a me che si sta facendo che con le versioni di test / debug del framework.

Il mio primo istinto sarebbe quello di installare le versioni di prova in ~ / Library, come rende solo impostare il test e l'ambiente di debug che molto più semplice. Se possibile, mi sarei aspettato il quadro di debug / test per essere collocata nella struttura di generazione della versione sto testando, nel qual caso è installato come un privato quadro a scopo di test. Sarebbe rendere la vita molto più semplice quando arriva il momento di trattare con più versioni del quadro.

In definitiva, non importa dove il quadro si trova a patto che la vostra applicazione o suite di test carica la versione corretta. Scegliere la posizione che rende il test / debug / sviluppo più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top