Die meisten Xcode-Projekttypen unterstützen Build-Regeln, mit denen Entwickler wie vorhandene Dateitypen erstellt werden und wie neue Dateitypen erstellt werden. Die J2ObjC-Skripts sind absichtlich so konzipiert, dass sie sich in Build-Systeme wie Xcode einbinden lassen.
Das Projekt j2objc-sample-reversi ist Ein Beispiel für das Hinzufügen von Java-Quellen zu einem einfachen iOS-Spiel
Bei einem Minimal-Build müssen die Build-Einstellungen aktualisiert und anschließend eine J2ObjC-Build-Regel hinzugefügt werden.
Build-Einstellungen aktualisieren
- Klicken Sie in der Projektnavigation auf das Projekt, um den Projekteditor zu öffnen. Anwendungsziel ist ausgewählt.
- Klicken Sie auf den Tab Build Settings (Build-Einstellungen).
- Verknüpfen Sie die JRE-Emulationsbibliothek (
jre_emul
), indem Sie-ljre_emul
zu Andere Verknüpfungs-Flags hinzufügen. Sie sollte so aussehen: - Klicken Sie auf + und wählen Sie Benutzerdefinierte Einstellung hinzufügen aus.
- Nennen Sie die Einstellung
J2OBJC_HOME
und legen Sie als Wert den Speicherort von J2ObjC fest. Dies sollte entweder der Ordner, der beim Entpacken der Release-Zip-Datei entstanden ist oder den Ordnerj2objc/dist
, wenn Sie aus der Quelle kompiliert haben und Ihr Stammverzeichnisj2objc
ist. - Nehmen Sie unter Suchpfade folgende Änderungen vor:
<ph type="x-smartling-placeholder">
- </ph>
- Framework-Suchpfade fügen
${J2OBJC_HOME}/frameworks
hinzu - Bibliothekssuchpfade fügen
${J2OBJC_HOME}/lib
(für jede Build-Konfiguration) hinzu. - Nutzerheader-Suchpfade fügen
${J2OBJC_HOME}/include
hinzu.
- Framework-Suchpfade fügen
- Bestätigen Sie Ihre Einstellungen, indem Sie nach
J2OBJC_HOME
suchen. Die Ausgabe sollte in etwa so aussehen:
J2ObjC-Build-Regel hinzufügen
Bestimmen Sie das Stammverzeichnis Ihrer Java-Quelldateien. Wir nennen es
$source-root
Das Stammverzeichnis ist das Verzeichnis, das die oberste -Paket Ihrer Quelldateien.Wenn Sie git verwenden und Ihre Java-Dateien aus einem anderen Git-Projekt abrufen möchten, können Sie Ein untergeordnetes Modul zum Verfolgen des Projekts mit Java hinzufügen. Quellen. Wenn sich Ihr Xcode-Projekt (xcodeproj) in
~/dev/MyProject
befindet, Sie haben wahrscheinlich ein weiteresMyProject
-Verzeichnis mit Ihrer Objective-C-Quelle. Im~/dev/MyProject/MyProject
-Verzeichnisausführunggit submodule add git@github.com:user/javaproject
für Erstellen Sie ein~/dev/MyProject/MyProject/javaproject
-Verzeichnis mit der Quelle für Ihr Java-Projekt direkt neben den Objective-C-Quellen. Ziehen Sie diesen Ordner dann in Ihr Xcode-Projekt. in der GruppeMyProject
, in der Xcode Ihr Dateisystem spiegelt.${PROJECT_DIR}/MyProject/javaproject/src
ist$source-root
.Wenn sich Ihre Java-Quellen in einer Gruppe oder einem Verzeichnis in Ihrem Xcode-Projekt befinden, gibt das Feld
$source-root
ist${PROJECT_DIR}/__group_or_directory_name__
.Klicken Sie im Zweifelsfall mit der rechten Maustaste auf die entsprechende Gruppe oder das Verzeichnis und wählen Sie Im Finder anzeigen aus, um die und verwenden Sie den absoluten Pfad.
Wenn sich beispielsweise das Java-Paket
foo.bar
in einem Verzeichnis namens~/myproject/src
befindet, sollten sich die Java-Dateien dieses Pakets in~/myproject/src/foo/bar/**.java
befinden. Das bedeutet,~/myproject/src
ist das Stammverzeichnis Ihres Projekts.Wenn sich die Java-Quelldateien außerhalb des Xcode-Projekts befinden, geben Sie den vollständigen Pfad ein, der beim in einem Terminalfenster aufführen.
Klicken Sie in der Projektnavigation auf das Projekt, um den Projekteditor zu öffnen. Anwendungsziel ist ausgewählt.
Klicken Sie auf den Tab Build Rules (Build-Regeln).
Klicken Sie auf +, um eine Build-Regel hinzuzufügen.
Wählen Sie für die neue Regel unter Verarbeiten die Option "Java-Quelldateien" aus. Die Option Using sollte "Custom script:" sein.
Fügen Sie im Textfeld des benutzerdefinierten Skripts Folgendes hinzu (vergessen Sie nicht,
$source-root
zu ersetzen):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};
Klicken Sie im Bereich „Ausgabedateien“ auf die Schaltfläche + und fügen Sie
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
hinzu.Klicken Sie noch einmal auf die Schaltfläche + und fügen Sie
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
hinzu.
Wenn Sie fertig sind, sollte das Steuerfeld für Einstellungen in etwa so aussehen (Hinweis: Ab Version 10.2 definiert Xcode noch die DerIVED_FILES_DIR-Variable ist für Abwärtskompatibilität identisch mit DERIVED_FILE_DIR):
Zusätzliche Bibliotheken verknüpfen
Der Link-Build-Schritt (Build-Phase „Link Binary With Libraries“ von Xcode) muss J2ObjC-spezifische Flags, die variieren, je nachdem, wie Ihre Anwendung übersetzte Java-Klassen verwendet. Eine vollständige Liste finden Sie unter Erforderliche Linkeinstellungen. Hier sind ein paar Beispiele dafür, welche zusätzlichen Bibliotheken möglicherweise verknüpft werden müssen:
- Wenn Sie das Paket
java.util.zip
verwenden möchten, müssen Sie die Bibliothek „libz.dylib“ durch Hinzufügen von-ljre_zip
zu Ihren Anderen Verknüpfungs-Flags hinzufügen. - Wenn Sie eine sichere Hash-Generierung vornehmen möchten, müssen Sie Ihrem Projekt das Sicherheits-Framework hinzufügen.
Build-Probleme beheben
Wenn Xcode bei diesen Schritten einen Build-Fehler meldet, öffnen Sie die Issue Navigator und klicken Sie auf einen Fehler, um die Details zu überprüfen. Daraufhin wird im Detail angezeigt, ausgeführt wurde. Im Folgenden sind einige häufige Fehler aufgeführt:
Kurs kann nicht aufgelöst werden: Höchstwahrscheinlich war der von Ihnen verwendete
$source-path
falsch. Suchen Sie im ausgeführten Befehl nach der Option-sourcepath
und achten Sie darauf, dass sie auf den Stammverzeichnis Ihrer Java-Quelldateien.„JreEmulation.h“ Datei nicht gefunden - Wahrscheinlich handelt es sich um eine fehlerhafte Nutzer-Header-Suche. Pfade. Suchen Sie im Build-Befehl nach der Option
-I
mit dem Pfad: wenn alles in Ordnung ist, Kopieren Sie den Pfad (nicht -I) und führen Sie in einem Terminalfensterls
mit diesem Pfad aus, um dies zu überprüfen. kein Tippfehler ist."_IOSClass_FromClass", referenziert von: oder "_OBJCCLASS$_Java" – entweder Bibliothek Suchpfade ist falsch oder Sie haben vergessen, die JRE-Emulationsbibliothek zu verknüpfen, indem Sie Andere Verknüpfungs-Flags mit
-ljre_emul
. Möglicherweise müssen Sie auch weitere Bibliotheken verknüpfen.Nicht definierte Symbole: _iconv* – Link in der erforderlichen iconv-Bibliothek
Sollten weiterhin Probleme auftreten, j2objc-Forum.