Xcode-Build-Regeln

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

  1. Klicken Sie in der Projektnavigation auf das Projekt, um den Projekteditor zu öffnen. Anwendungsziel ist ausgewählt.
  2. Klicken Sie auf den Tab Build Settings (Build-Einstellungen).
  3. Verknüpfen Sie die JRE-Emulationsbibliothek (jre_emul), indem Sie -ljre_emul zu Andere Verknüpfungs-Flags hinzufügen. Sie sollte so aussehen: JRE-Emulationsbibliothek in Xcode verknüpfen
  4. Klicken Sie auf + und wählen Sie Benutzerdefinierte Einstellung hinzufügen aus.
  5. 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 Ordner j2objc/dist, wenn Sie aus der Quelle kompiliert haben und Ihr Stammverzeichnis j2objc ist.
  6. 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.
  7. Bestätigen Sie Ihre Einstellungen, indem Sie nach J2OBJC_HOME suchen. Die Ausgabe sollte in etwa so aussehen: Xcode-Build-Einstellungen

J2ObjC-Build-Regel hinzufügen

  1. 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 weiteres MyProject-Verzeichnis mit Ihrer Objective-C-Quelle. Im ~/dev/MyProject/MyProject-Verzeichnisausführung git 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 Gruppe MyProject, 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.

  2. Klicken Sie in der Projektnavigation auf das Projekt, um den Projekteditor zu öffnen. Anwendungsziel ist ausgewählt.

  3. Klicken Sie auf den Tab Build Rules (Build-Regeln).

  4. Klicken Sie auf +, um eine Build-Regel hinzuzufügen.

  5. Wählen Sie für die neue Regel unter Verarbeiten die Option "Java-Quelldateien" aus. Die Option Using sollte "Custom script:" sein.

  6. 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};
    
  7. Klicken Sie im Bereich „Ausgabedateien“ auf die Schaltfläche + und fügen Sie ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h hinzu.

  8. 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):

Xcode-Build-Regeln

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 Terminalfenster ls 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.