Większość typów projektów Xcode obsługuje reguły kompilacji, które umożliwiają programistom modyfikowanie tworzenia istniejących typów plików i definiowania nowych. Skrypty J2ObjC zostały celowo stworzone z myślą o włączaniu skryptów w systemach kompilacji, takich jak Xcode.
Projekt j2objc-sample-reversi to przykład dodawania źródeł w Javie do prostej gry na iOS.
Minimalna kompilacja wymaga aktualizacji ustawień kompilacji, a następnie dodania reguły kompilacji J2ObjC.
Aktualizowanie ustawień kompilacji
- Kliknij projekt w nawigatorze projektów, aby otworzyć edytora projektów i sprawdź, czy wybrano miejsce docelowe aplikacji.
- Kliknij kartę Ustawienia kompilacji.
- Połącz bibliotekę emulacji JRE (
jre_emul
), dodając-ljre_emul
do innych flag łączących. Powinien wyglądać tak: - Kliknij + i wybierz Dodaj ustawienie zdefiniowane przez użytkownika.
- Nazwij ustawienie
J2OBJC_HOME
, a jako jego wartość ustaw lokalizację J2ObjC. To powinno może to być folder powstały po rozpakowaniu pliku ZIP lub folderj2objc/dist
, jeśli skompilujesz plik ze źródła, a katalog główny toj2objc
. - W sekcji Ścieżki wyszukiwania zmodyfikuj te elementy:
- Ścieżki wyszukiwania ramek dodaj:
${J2OBJC_HOME}/frameworks
- Ścieżki wyszukiwania bibliotek dodają
${J2OBJC_HOME}/lib
(dla każdej konfiguracji kompilacji). - Ścieżki wyszukiwania nagłówków użytkowników dodają wartość
${J2OBJC_HOME}/include
.
- Ścieżki wyszukiwania ramek dodaj:
- Potwierdź ustawienia, wyszukując hasło
J2OBJC_HOME
. Zobaczysz tekst podobny do tego:
Dodawanie reguły kompilacji J2ObjC
Określ katalog główny plików źródłowych Javy, które będziemy nazywać
$source-root
Katalog główny to katalog zawierający górną część plików źródłowych.Jeśli korzystasz z git i chcesz pobrać pliki Java z innego projektu git, możesz dodaj moduł podrzędny śledzący projekt za pomocą Javy źródeł. Na przykład załóżmy, że Twój projekt Xcode (xcodeproj) znajduje się w lokalizacji
~/dev/MyProject
, prawdopodobnie masz inny katalogMyProject
ze źródłem Objective-C. W Uruchomienie katalogu~/dev/MyProject/MyProject
git submodule add git@github.com:user/javaproject
utwórz katalog~/dev/MyProject/MyProject/javaproject
ze źródłem dla projektu w Javie obok źródeł Objective-C. Następnie możesz przeciągnąć ten folder do projektu Xcode. w grupieMyProject
, w której Xcode powiela system plików.${PROJECT_DIR}/MyProject/javaproject/src
to$source-root
.Jeśli źródła Java znajdują się w grupie lub katalogu w projekcie Xcode, parametr
$source-root
jest${PROJECT_DIR}/__group_or_directory_name__
.W razie wątpliwości kliknij prawym przyciskiem myszy tę grupę lub katalog i wybierz Pokaż w Finderze, aby wyświetlić i użyj ścieżki bezwzględnej.
Jeśli np. masz pakiet Javy
foo.bar
w katalogu o nazwie~/myproject/src
, ten pakiet powinien znajdować się w lokalizacji~/myproject/src/foo/bar/**.java
, co oznacza~/myproject/src
to katalog główny Twojego projektu.Jeśli pliki źródłowe Java są zewnętrzne w stosunku do projektu Xcode, wpisz pełną ścieżkę używaną podczas wpisując je w oknie terminala.
Kliknij projekt w nawigatorze projektów, aby otworzyć edytora projektów i sprawdź, czy wybrano miejsce docelowe aplikacji.
Kliknij kartę Build Rules (Reguły kompilacji).
Kliknij +, aby dodać regułę kompilacji.
W sekcji Proces nowej reguły wybierz „Pliki źródłowe Java”. W sekcji Using (Używanie) powinna być wybrana opcja „Custom script:” (Skrypt niestandardowy:).
W polu tekstowym skryptu niestandardowego wstaw następujący tekst (zastąp
$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
.Ponownie kliknij 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 DERIVED_FILES_DIR tak samo jak DERIVED_FILE_DIR w celu zapewnienia zgodności wstecznej):
Łączenie dodatkowych bibliotek
Etap kompilacji linku (etap kompilacji „Połącz plik binarny z bibliotekami” w Xcode): Flagi J2ObjC, które różnią się w zależności od tego, jak aplikacja wykorzystuje przetłumaczone klasy Java. Pełną listę znajdziesz w artykule Wymagane ustawienia linków. Oto kilka Jakie dodatkowe biblioteki trzeba połączyć:
- Aby używać pakietu
java.util.zip
, musisz połączyć bibliotekę libz.dylib, dodając-ljre_zip
do Twoich innych flag łączących. - Aby móc generować bezpieczne hasze, musisz dodać do projektu platformę zabezpieczeń.
Debugowanie problemów z kompilacją
Jeśli Xcode zgłosi błąd kompilacji w tych krokach, otwórz Issue Navigator i kliknij błąd, aby sprawdzić szczegóły. Spowoduje to wyświetlenie szczegółów wiersza poleceń została wykonana. Oto kilka typowych błędów:
Nie można rozwiązać klasy – najprawdopodobniej użyta wartość
$source-path
była nieprawidłowa. Odszukaj w wykonanym poleceniu opcję-sourcepath
i upewnij się, że wskazuje ona katalogu głównym plików źródłowych Javy.„JreEmulation.h” nie znaleziono pliku – najprawdopodobniej problem polega na nieprawidłowym wyszukiwaniu nagłówków użytkownika”. Paths (Ścieżki). Wyszukaj w poleceniu kompilacji opcję
-I
wraz ze ścieżką. czy wszystko jest w porządku, skopiuj ścieżkę (nie -I) i w oknie terminala uruchom poleceniels
z tą ścieżką, by to potwierdzić. To nie błąd."_IOSClass_FromClass", do której odwołuje się: lub "_OBJCCLASS$_Java" – biblioteka Ścieżki wyszukiwania są nieprawidłowe lub nie udało Ci się połączyć biblioteki emulacji JRE przez ustawienie opcji Inne Flagi łączące:
-ljre_emul
. Konieczne może być też połączenie dodatkowych bibliotek.Niezdefiniowane symbole: _iConv* – link w wymaganej bibliotece iConv.
Jeśli nadal masz problemy, poproś j2objc-initiative.