2012-01-03 16 views
6

So che è possibile fare in modo che Xcode faccia riferimento a framework/build build lib statici in altri progetti, ma se il progetto a cui si desidera fare riferimento non ha un target lib di framework/static, puoi fare direttamente riferimento al codice sorgente da un altro progetto Xcode? Ho provato a farlo usando sia il sotto-progetto che lo spazio di lavoro Xcode 4 senza alcun risultato. Dopo aver regolato il percorso di ricerca dell'intestazione, tutte le istruzioni #import funzionano correttamente, ma sto ancora ottenendo errori di compilazione anomali del compilatore non trovati.Riferimento codice sorgente cross-project in Xcode 4

setenv MACOSX_DEPLOYMENT_TARGET 10.7 
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -F/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -filelist /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Intermediates/.build/Debug/.build/Objects-normal/x86_64/.LinkFileList -mmacosx-version-min=10.7 -fobjc-arc -framework Cocoa -o /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug/.app/Contents/MacOS/ 

Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_MagicalRecordHelpers", referenced from: 
     objc-class-ref in AppDelegate.o 
    "_OBJC_CLASS_$_MRCoreDataAction", referenced from: 
     objc-class-ref in ItemsArrayController.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Inoltre, qual è l'accordo con questo nuovo spazio di lavoro Xcode 4? E in che misura è esattamente diverso dai sottoprogetti? L'unica cosa che ho potuto trovare è che hanno un aspetto visivamente diverso ...

Workspace

enter image description here

Sotto projct

enter image description here

risposta

6

La risposta alla prima apparentemente la domanda "Nessun Xcode non può riferirsi a file sorgente in un altro progetto". Per compilare un file sorgente (file .m). Il progetto Xcode deve contenere riferimenti diretti ad essi. Puoi andare su Impostazioni di destinazione -> Fasi di creazione -> Risorse compilate per vedere cosa verrà compilato. Si noti che, a meno che i file non vengano aggiunti direttamente al progetto, non verranno visualizzati sotto le risorse da compilare. Le intestazioni tuttavia possono essere comunicate tra diversi progetti.

EDIT

E credo che la risposta alla seconda domanda è che mentre Xcode 3 richiede sempre la gestione esplicita delle dipendenze, Xcode 4 area di lavoro permette dipendenze di destinazione per gestire in modo implicito, purché sono tutti in lo stesso spazio di lavoro. Tutto ciò che è necessario per specificare la dipendenza è aggiungere un prodotto dell'altro progetto a cui si desidera fare riferimento come libreria collegata nella pagina di riepilogo. Questi risultati hanno richiesto troppo tempo .. (una giornata di lavoro produttiva e completa), la documentazione su questo può e deve essere sicuramente migliorata!

+3

e come hai risolto il problema del linker? – Stephan