Come aggiungo il codice Objective C a un progetto FireBreath?

Sto scrivendo un plugin per browser per Mac OS che posizionerà un’icona nella barra di stato nella barra di stato, che gli utenti possono utilizzare per interfacciarsi con il plug-in del browser. Ho creato con successo un progetto FireBreath 1.6 in XCode 4.4.1 e posso installarlo nel browser. Tuttavia, FireBreath utilizza C ++, mentre la maggior parte delle librerie esistenti per Mac OS sono scritte nell’objective C.

Nel file /Mac/projectDef.make, ho aggiunto Cocoa Framework e Foundation Framework, come suggerito qui e in altre risorse che ho trovato su Internet:

target_link_libraries(${PROJECT_NAME} ${PLUGIN_INTERNAL_DEPS} ${Cocoa.framework} # added line ${Foundation.framework} # added line ) 

Riavvia prepmac.sh, aspettandomi di creare un nuovo progetto in XCode con i miei file .mm e .m; tuttavia, sembra che siano stati ignorati. Vedo solo i file .cpp e .h. Ho aggiunto delle regole per quelle nel file projectDef.make, ma non sembra fare la differenza:

 file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} Mac/[^.]*.cpp Mac/[^.]*.h Mac/[^.]*.m #added by me Mac/[^.]*.mm #added by me Mac/[^.]*.cmake ) 

Anche se aggiungo i file manualmente, ottengo una serie di errori di compilazione. Ce ne sono circa 20, tutti relativi al file NSObjRuntime.h :

 Parse Issue - Expected unqualified-id Parse Issue - Unknown type name 'NSString' Semantic Issue - Use of undeclared identifier 'NSString' Parse Issue - Unknown type name 'NSString' ... ... Semantic Issue - Use of undeclared identifier 'aSelectorName' ... ... Semantic Issue - Use of undeclared identifier 'aClassName' ... 

Continua così per un po ‘di tempo con errori simili …

Da quello che ho letto, questi errori appaiono a causa delle dipendenze del Framework di base, che credo di aver incluso nel progetto. Ho anche provato a fare clic sul progetto in XCode

Sono al punto in cui ora non sono sicuro di cosa provare dopo. La gente dice che non è difficile usare l’Objective C nel codice C / C ++, ma essere nuovi in ​​XCode e Objective C potrebbe contribuire alla mia confusione. Questo è solo il giorno 4 per me in questa nuova piattaforma.

Cosa devo fare per ottenere XCode per compilare il codice Objective C? Per favore, ricorda che sono un po ‘nuovo in questo, quindi mi piacerebbe che tu lasciasse risposte dettagliate in contrasto con le vaghe battute che sono comuni nel tag firebreath . Sono solo un po ‘sopra la mia testa, ma se riesci a farmi superare questo ostacolo sono certo che sarò bello andare da lì.

AGGIORNARE:

Ho modificato i progetti / MyPlugin / CMakeLists.txt e ho aggiunto anche le regole .m e .mm. dopo aver eseguito prepmac.sh, i file sono inclusi nel progetto, ma ottengo comunque gli stessi errori di compilazione.

Ho spostato tutti i file .h e .mm dal codice Obj C alla cartella principale MyPlugin e ho riavviato il file prepmac.sh. Il problema esiste ancora Stessi errori di compilazione.

Il tuo problema è che hai i file .h che vengono inclusi da file C ++ che hanno tipo c objective e / o includono in essi. Per fare ciò che vuoi, tutte le tue classi che sono utilizzate da c ++ devono o mantenere tutte le cose relative agli oggetti in un #ifdef o semplicemente non mostrare nulla di obj nel file di intestazione.

Ad esempio, puoi usare questo ifdef nella tua intestazione:

 #ifdef __OBJC__ // Objective C / C++ code here #endif 

È importante ricordare che i file .h sono inclusi così come i file di intestazione, quindi sono effettivamente inclusi. Se includi codice c oggettivo in un file .cpp, il compilatore si confonde e piange.


EDIT: La cosa più importante da ricordare è che è necessario assicurarsi che i file di intestazione c oggettivi (o altri file con codice c objective) non siano inclusi nei file cpp. Se puoi farlo, starai bene.