Reguły kompilacji Xcode

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

  1. Kliknij projekt w nawigatorze projektów, aby otworzyć edytora projektów i sprawdź, czy wybrano miejsce docelowe aplikacji.
  2. Kliknij kartę Ustawienia kompilacji.
  3. Połącz bibliotekę emulacji JRE (jre_emul), dodając -ljre_emul do innych flag łączących. Powinien wyglądać tak: Łączenie biblioteki emulacji JRE w Xcode
  4. Kliknij + i wybierz Dodaj ustawienie zdefiniowane przez użytkownika.
  5. 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 folder j2objc/dist, jeśli skompilujesz plik ze źródła, a katalog główny to j2objc.
  6. 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.
  7. Potwierdź ustawienia, wyszukując hasło J2OBJC_HOME. Zobaczysz tekst podobny do tego: Ustawienia kompilacji Xcode

Dodawanie reguły kompilacji J2ObjC

  1. 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 katalog MyProject 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 grupie MyProject, 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.

  2. Kliknij projekt w nawigatorze projektów, aby otworzyć edytora projektów i sprawdź, czy wybrano miejsce docelowe aplikacji.

  3. Kliknij kartę Build Rules (Reguły kompilacji).

  4. Kliknij +, aby dodać regułę kompilacji.

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

  6. 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};
    
  7. W panelu Pliki wyjściowe kliknij przycisk + i dodaj: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

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

Reguły kompilacji Xcode

Łą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 polecenie ls 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.