2013-04-30 12 views
6

Ho una libreria statica a cui viene collegata una applicazione. Il codice biblioteca si apre un file che è in bundle che si trova nel bundle dell'applicazione, l'apertura è fatto come:Come aggiungere/aprire un file bundle in una destinazione di prova

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]; 

Questo sta lavorando bene.

Tuttavia, voglio aggiungere qualche codice di test dell'unità alla libreria e quindi ho un obiettivo di test logico per questo. Poiché il file si trova nel pacchetto per l'applicazione e non nel pacchetto per la libreria statica, ho copiato il file Config.plist e l'ho aggiunto alla destinazione del codice di test tramite Copy Bundle Resources. Tuttavia, quando eseguo il codice di prova, non è possibile trovare il file. Perché?

In quanto sopra è confuso, ecco un riassunto della struttura dell'area di lavoro.

Workspace contains: 
    Application Project with application target, which contains (X) 
     Config.plist (a) 
    Library project which contains: 
     Library target, which contains: 
      the code opening the file in the bundle (b) 
     Test library target, which contains: (Y) 
      A Copy of the Config.plist (c) 

Quindi, se io costruisco X poi quando b corre si può trovare una. Ma quando costruisco Y quando viene eseguito, b non riesce a trovare c.

risposta

10

ho trovato se ho cambiato [Bundle mainBundle] a [NSBundle bundleForClass: [class auto]] allora funziona in entrambi i casi

+0

+1 Come hai trovato questo? – prodos

+0

Non ricordo lo – Gruntcakes

+0

Brillante. Proprio quello di cui avevo bisogno. – fatuhoku

0

È possibile creare una destinazione dell'applicazione nella libreria del progetto, copiare tale file nella destinazione e quindi creare una destinazione di prova dell'applicazione (all'interno dello stesso progetto) in cui si verifica il codice della libreria.

0

Il problema è una libreria statica che non dispone di risorse bundle. Una volta compilato, sarà composto solo da codice compilato e file di intestazione. Pertanto non esiste alcuna risorsa di plist libreria statica da copiare.

Quindi è necessario un altro processo per copiare il pacchetto di librerie in modo che venga completato nella directory di generazione.

Il modo più efficace che ho trovato è quello di farlo con uno script in una fase di script di esecuzione prima della fase Collega librerie con librerie. Allego uno screenshot di uno dei miei progetti in cui ho dovuto fare qualcosa di simile. Dovresti essere in grado di ottenere ciò di cui hai bisogno adattando il nome del file sulla prima riga dello script. Tutte le variabili di ambiente sono predefinite come standard, quindi non credo ci sia bisogno di ulteriori configurazioni oltre a questo script.

Non sono stati testati se le variabili di ambiente funzionano con qualcosa di diverso dalle posizioni di build xCode 4 predefinite.

Script to copy resource from static library to Parent Project build directory

+0

Una libreria statica non ha un fascio, tuttavia una logica obiettivo di test per una libreria statica. – Gruntcakes

+0

Tuttavia, fa un progetto di libreria. Nella tua configurazione precedente dichiari di avere il progetto della biblioteca. Guardando di nuovo alla tua configurazione, vedo che ciò che ho fornito non si applica a come lo hai impostato. Detto questo, se il tuo target di test della libreria richiede il config plist, ti conviene archiviare una copia dei dati necessari alla tua libreria in un file config.plist nel progetto della libreria. Quindi puoi usare la tecnica sopra per copiare i dati plist dalla Libreria nel tuo progetto principale. Il risultato complessivo dovrebbe quindi essere un processo di compilazione più modulare. – TheBasicMind

+0

Ho detto che ho una libreria di test logici e nella struttura c'è un progetto di libreria e un progetto di libreria di test entrambi mostrati, e il plist è mostrato come parte della libreria di test. Non sto cercando di discutere - apprezzo la tua risposta. Grazie. – Gruntcakes

Problemi correlati