La maggior parte dei tipi di progetto Xcode supporta le regole di build, che consentono agli sviluppatori di modificare come vengono creati i tipi di file esistenti e per definire le modalità di creazione di nuovi tipi. Gli script J2ObjC sono intenzionalmente progettati per essere inseriti in sistemi di compilazione come Xcode.
Il progetto j2objc-sample-reversi è un esempio di come aggiungere sorgenti Java a un semplice gioco per iOS.
Una build minima richiede l'aggiornamento delle impostazioni della build e l'aggiunta di una regola di build J2ObjC.
Aggiornamento delle impostazioni della build
- Fai clic sul progetto in Project Navigator per aprire l'Editor progetti e verificare che il target dell'applicazione è selezionato.
- Fai clic sulla scheda Impostazioni build.
- Collega la libreria di emulazione JRE (
jre_emul
) aggiungendo-ljre_emul
ad Altri flag linker. Dovrebbe avere il seguente aspetto: - Fai clic sul segno + e seleziona Aggiungi impostazione definita dall'utente.
- Assegna all'impostazione il nome
J2OBJC_HOME
e imposta il valore sulla posizione di J2ObjC. Questa operazione dovrebbe essere la cartella risultante dalla decompressione del file release zip o la cartellaj2objc/dist
se hai compilato dall'origine e la tua radice èj2objc
. - In Percorsi di ricerca modifica quanto segue:
- .
- Aggiungi
${J2OBJC_HOME}/frameworks
nei percorsi di ricerca framework - I Percorsi di ricerca nelle librerie aggiungono
${J2OBJC_HOME}/lib
(per ogni configurazione di compilazione). - Percorsi di ricerca delle intestazioni utente aggiungi
${J2OBJC_HOME}/include
.
- Aggiungi
- Conferma le impostazioni cercando
J2OBJC_HOME
. Il risultato dovrebbe essere simile a questo:
Aggiunta di una regola di build J2ObjC
Definisci la directory radice dei file di origine Java, che chiameremo
$source-root
. La directory radice è la directory che contiene i file un pacchetto dei tuoi file sorgente.Se utilizzi Git e vuoi estrarre i tuoi file Java da un altro progetto git, puoi aggiungi un sottomodulo che monitori il progetto con il tuo fonti. Ad esempio, supponiamo che il tuo progetto Xcode (xcodeproj) sia in
~/dev/MyProject
e che probabilmente ha un'altra directoryMyProject
con l'origine Objective-C. Nella Esecuzione della directory~/dev/MyProject/MyProject
ingit submodule add git@github.com:user/javaproject
crea una directory~/dev/MyProject/MyProject/javaproject
con origine per il tuo progetto Java accanto alle fonti Objective-C. Puoi quindi trascinare la cartella nel progetto Xcode. nel gruppoMyProject
, che dispone di Xcode per il mirroring del tuo file system.${PROJECT_DIR}/MyProject/javaproject/src
è il$source-root
.Se le tue origini Java si trovano in un gruppo o in una directory nel tuo progetto Xcode,
$source-root
è${PROJECT_DIR}/__group_or_directory_name__
.In caso di dubbi, fai clic con il tasto destro del mouse sul gruppo o sulla directory e seleziona Mostra nel Finder per visualizzare utilizzando il percorso assoluto.
Ad esempio, se hai un pacchetto Java
foo.bar
in una directory chiamata~/myproject/src
, i file Java di quel pacchetto devono essere in~/myproject/src/foo/bar/**.java
, il che significa~/myproject/src
è la directory principale del tuo progetto.Se i file sorgente Java sono esterni al progetto Xcode, inserisci il percorso completo utilizzato quando che li elenca in una finestra Terminale.
Fai clic sul progetto in Project Navigator per aprire l'Editor progetti e verificare che il target dell'applicazione è selezionato.
Fai clic sulla scheda Build Rules (Regole di creazione).
Fai clic sul segno + per aggiungere una regola di build.
Per l'opzione Elabora della nuova regola, seleziona "File di origine Java". L'opzione Utilizzo dovrebbe essere "Script personalizzato:".
Nella casella di testo dello script personalizzato, aggiungi quanto segue (ricorda di sostituire
$source-root
):if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi; "${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "$source-root" --no-package-directories -g ${INPUT_FILE_PATH};
Nel riquadro File di output, fai clic sul pulsante + e aggiungi:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.Fai di nuovo clic sul pulsante + e aggiungi
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
.
Al termine, il riquadro delle impostazioni dovrebbe avere un aspetto simile al seguente (nota: dalla versione 10.2, Xcode definisce comunque Variabile DERIVED_FILES_DIR analoga a DERIVED_FILE_DIR per la compatibilità con le versioni precedenti):
Collegamento di altre librerie
Il passaggio di creazione del link (fase di creazione "Link Binary With Libraries" di Xcode) deve Flag specifici di J2ObjC, che variano a seconda di come l'applicazione utilizza le classi Java tradotte. Per un elenco completo, consulta Impostazioni collegamento obbligatorie. Ecco un paio esempi di librerie aggiuntive che potresti dover collegare:
- Per utilizzare il pacchetto
java.util.zip
devi collegare la libreria libz.dylib aggiungendo-ljre_zip
agli Altri flag linker. - Per generare hash sicuri, devi aggiungere il framework di sicurezza al tuo progetto.
Debug dei problemi di build
Se Xcode segnala un errore della build con questi passaggi, apri Issue Navigator e fai clic su un errore per esaminare i dettagli. Qui troverai i dettagli della riga di comando è stata eseguita. Di seguito sono riportati alcuni errori comuni:
La classe non può essere risolta - Molto probabilmente, il
$source-path
che hai utilizzato non è corretto. Cerca l'opzione-sourcepath
nel comando eseguito e assicurati che punti a nella directory radice dei file di origine Java."JreEmulation.h" file non trovato: molto probabilmente, il problema riguarda una ricerca delle intestazioni utente non valida. Percorsi. Cerca l'opzione
-I
con il percorso nel comando di build. se ti sembra a posto, copia il percorso (non -I) e in una finestra del terminale eseguils
con quel percorso per verificare. non è un errore ortografico."_IOSClass_FromClass", cui viene fatto riferimento da: oppure "_OBJCCLASS$_Java" nel campo Library Percorsi di ricerca non è corretto oppure hai dimenticato di collegare la libreria di emulazione JRE impostando Altro Il linker segnala a
-ljre_emul
. Potresti anche dover collegare librerie aggiuntive.Simboli non definiti: _iconv*. Link nella libreria iconv richiesta.
Se i problemi persistono, rivolgiti al gruppo j2objc-discuss.