Większość typów projektów Xcode obsługuje reguły kompilacji, które pozwalają programistom na modyfikowanie sposobu tworzenia istniejących typów plików i definiowanie sposobu tworzenia nowych typów plików. Skrypty J2ObjC są celowo zaprojektowane pod kątem podłączania do systemów wbudowanych, takich jak Xcode.
Projekt j2objc-sample-reversi to przykład dodawania źródeł Java do prostej gry na iOS.
Minimalna kompilacja wymaga zaktualizowania ustawień kompilacji i dodania reguły kompilacji J2ObjC.
Aktualizowanie ustawień kompilacji
- Kliknij projekt w Nawigatorze projektów, aby otworzyć edytor projektów, i upewnij się, że jest wybrane miejsce docelowe aplikacji.
- Kliknij kartę Ustawienia kompilacji.
- Połącz bibliotekę emulacji JRE (
jre_emul
), dodając-ljre_emul
do innych flag tagu łączącego. Powinno to wyglądać tak: - Kliknij + i wybierz Dodaj ustawienie zdefiniowane przez użytkownika.
- Nazwij ustawienie
J2OBJC_HOME
, a jako jego wartość ustaw lokalizację J2ObjC. Powinien to być folder powstały w wyniku rozpakowania pakietu ZIP lub folderj2objc/dist
, jeśli został skompilowany ze źródła, a katalog główny toj2objc
. - W sekcji Ścieżki wyszukiwania zmień te elementy:
- Ścieżki wyszukiwania struktur dodaj:
${J2OBJC_HOME}/frameworks
- Do ścieżek wyszukiwania w bibliotece dodaj
${J2OBJC_HOME}/lib
(na potrzeby każdej konfiguracji kompilacji). - Ścieżki wyszukiwania nagłówków użytkowników dodaj
${J2OBJC_HOME}/include
.
- Ścieżki wyszukiwania struktur dodaj:
- Potwierdź ustawienia, wyszukując:
J2OBJC_HOME
. Zobaczysz tekst podobny do tego:
Dodawanie reguły kompilacji J2ObjC
Wskaż katalog główny plików źródłowych w języku Java. Nazwij go
$source-root
. Katalog główny to katalog zawierający najwyższy pakiet plików źródłowych.Jeśli używasz git i chcesz pobrać pliki Javy z innego projektu git, możesz dodać moduł podrzędny śledzący projekt za pomocą źródeł Javy. Załóżmy na przykład, że Twój projekt Xcode (xcodeproj) znajduje się w języku
~/dev/MyProject
, prawdopodobnie masz inny katalogMyProject
ze źródłem Objective-C. W katalogu~/dev/MyProject/MyProject
uruchom poleceniegit submodule add git@github.com:user/javaproject
, aby utworzyć katalog~/dev/MyProject/MyProject/javaproject
ze źródłem projektu Java obok źródeł Objective-C. Następnie możesz przeciągnąć ten folder do projektu Xcode do grupyMyProject
, która zawiera odbicie lustrzane Twojego systemu plików w Xcode.${PROJECT_DIR}/MyProject/javaproject/src
to$source-root
.Jeśli źródła Java znajdują się w grupie lub katalogu w projekcie Xcode,
$source-root
ma wartość${PROJECT_DIR}/__group_or_directory_name__
.W razie wątpliwości kliknij prawym przyciskiem myszy grupę lub katalog i wybierz Pokaż w Finderze, aby wyświetlić katalog i użyć ścieżki bezwzględnej.
Jeśli na przykład masz pakiet Java
foo.bar
w katalogu o nazwie~/myproject/src
, pliki Java tego pakietu powinny znajdować się w~/myproject/src/foo/bar/**.java
– oznacza to, że~/myproject/src
jest katalogiem głównym Twojego projektu.Jeśli pliki źródłowe Java są spoza projektu Xcode, w oknie terminala wpisz pełną ścieżkę użytą podczas wyświetlania ich.
Kliknij projekt w Nawigatorze projektów, aby otworzyć edytor projektów, i upewnij się, że jest wybrane miejsce docelowe aplikacji.
Kliknij kartę Reguły kompilacji.
Kliknij +, aby dodać regułę kompilacji.
W sekcji Proces w nowej regule wybierz „Pliki źródłowe Java”. W polu Użycie powinna być wybrana opcja „Skrypt niestandardowy:”.
W polu tekstowym skryptu niestandardowego dodaj następujące informacje (pamiętaj o zastąpieniu
$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};
W panelu Pliki wyjściowe kliknij przycisk + i dodaj:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.Kliknij ponownie przycisk + i dodaj
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
.
Gdy skończysz, panel ustawień powinien wyglądać mniej więcej tak (uwaga: od wersji 10.2 Xcode nadal definiuje zmienną DERIVED_FILES_DIR tak samo jak DERIVED_FILE_DIR, aby zapewnić zgodność wsteczną):
Łączenie bibliotek dodatkowych
Etap kompilacji linku (faza „Link Binary With Libraries” w Xcode) wymaga flag specyficznych dla J2ObjC, które różnią się w zależności od tego, jak aplikacja używa przetłumaczonych klas Java. Pełną listę znajdziesz w artykule Wymagane ustawienia linków. Oto kilka przykładów, jakie dodatkowe biblioteki mogą być potrzebne:
- Aby użyć pakietu
java.util.zip
, musisz połączyć bibliotekę libz.dylib, dodając-ljre_zip
do innych flag tagu łączącego. - Aby generować bezpieczne hasze, musisz dodać do projektu platformę zabezpieczeń.
Debugowanie problemów z kompilacjami
Jeśli Xcode zgłosi błąd kompilacji za pomocą tych czynności, otwórz Issue Navigator i kliknij błąd, aby sprawdzić szczegóły. Spowoduje to wyświetlenie szczegółów instrukcji wiersza poleceń, która została wykonana. Oto kilka częstych błędów:
Nie można znaleźć klasy – najprawdopodobniej użyta wartość
$source-path
jest nieprawidłowa. Odszukaj opcję-sourcepath
w wykonanym poleceniu i upewnij się, że wskazuje ona katalog główny plików źródłowych Javy.Nie znaleziono pliku „JreEmulation.h” – najprawdopodobniej problem jest związany z nieprawidłową wartością ścieżek wyszukiwania nagłówków użytkownika. Wyszukaj w poleceniu kompilacji opcję
-I
ze ścieżką. Jeśli wygląda dobrze, skopiuj ścieżkę (nie -I) i w oknie terminala uruchom poleceniels
z tą ścieżką, aby sprawdzić, czy nie ma w niej literówki.„_IOSClass_FromClass”, do którego odwołuje się: lub „_OBJCCLASS$_Java” – ścieżki wyszukiwania w bibliotece są nieprawidłowe lub zapomniałeś połączyć bibliotekę emulacji JRE, ustawiając w polu Inne flagi tagu łączącego wartość
-ljre_emul
. Może też być konieczne połączenie dodatkowych bibliotek.Niezdefiniowane symbole: _iconv* – link z wymaganej biblioteki iconv.
Jeśli nadal masz problemy, zadaj pytanie grupie dyskusyjnej j2objc.