Aturan Build Xcode

Sebagian besar jenis project Xcode mendukung aturan build, yang memungkinkan developer mengubah cara pembuatan jenis file yang ada dan menentukan cara pembuatan jenis file baru. Skrip J2ObjC sengaja dirancang untuk dihubungkan ke sistem build seperti Xcode.

Project j2objc-sample-reversi adalah contoh cara menambahkan sumber Java ke game iOS sederhana.

Build minimal memerlukan pembaruan setelan build, lalu penambahan aturan build J2ObjC.

Memperbarui Setelan Build

  1. Klik project di Project Navigator untuk membuka Project Editor dan memastikan target aplikasi dipilih.
  2. Klik tab Build Settings.
  3. Tautkan library emulasi JRE (jre_emul) dengan menambahkan -ljre_emul ke Other Linker Flags. Konfigurasinya akan terlihat seperti ini: Menautkan Library Emulation JRE di Xcode
  4. Klik + dan pilih Add User-Defined Settings.
  5. Beri nama setelan J2OBJC_HOME dan tetapkan nilainya ke lokasi J2ObjC. File ini harus berupa folder yang dihasilkan dari ekstrak zip rilis atau folder j2objc/dist jika Anda mengompilasi dari sumber dan root Anda adalah j2objc.
  6. Di bagian Jalur Penelusuran, ubah hal berikut:
    • Framework Search Path menambahkan ${J2OBJC_HOME}/frameworks
    • Jalur Penelusuran Library menambahkan ${J2OBJC_HOME}/lib (untuk setiap konfigurasi build).
    • Jalur Penelusuran Header Pengguna menambahkan ${J2OBJC_HOME}/include.
  7. Konfirmasi setelan Anda dengan menelusuri J2OBJC_HOME. Anda akan melihat sesuatu yang mirip dengan ini: Setelan Build Xcode

Menambahkan Aturan Build J2ObjC

  1. Tentukan direktori utama file sumber Java, yang akan kita sebut $source-root. Direktori utama adalah direktori yang berisi paket teratas file sumber Anda.

    • Jika Anda menggunakan git dan ingin mengambil file Java dari project git lain, Anda dapat menambahkan submodul yang melacak project dengan sumber Java Anda. Misalnya, anggap project Xcode (xcodeproj) Anda berada di ~/dev/MyProject, kemungkinan Anda memiliki direktori MyProject lain dengan sumber Objective-C. Dalam direktori ~/dev/MyProject/MyProject, jalankan git submodule add git@github.com:user/javaproject untuk membuat direktori ~/dev/MyProject/MyProject/javaproject dengan sumber untuk project Java Anda tepat di samping sumber Objective-C. Selanjutnya, Anda dapat menarik folder tersebut ke project Xcode di bawah grup MyProject, dengan Xcode yang mencerminkan sistem file Anda. ${PROJECT_DIR}/MyProject/javaproject/src adalah $source-root.

    • Jika sumber Java Anda berada dalam grup atau direktori di project Xcode, $source-root adalah ${PROJECT_DIR}/__group_or_directory_name__.

    • Jika ragu, klik kanan pada grup atau direktori tersebut, lalu pilih Show in Finder untuk melihat direktori dan gunakan jalur absolut.

    • Misalnya, jika Anda memiliki paket Java foo.bar dalam direktori bernama ~/myproject/src, file Java paket tersebut harus berada di ~/myproject/src/foo/bar/**.java. Artinya, ~/myproject/src adalah direktori utama project Anda.

    • Jika file sumber Java berada di luar project Xcode, masukkan jalur lengkap yang digunakan saat mencantumkannya di jendela Terminal.

  2. Klik project di Project Navigator untuk membuka Project Editor dan memastikan target aplikasi dipilih.

  3. Klik tab Build Rules.

  4. Klik tanda + untuk menambahkan aturan build.

  5. Untuk opsi Proses aturan baru, pilih "Java source files". Opsi Menggunakan harus "Skrip kustom:".

  6. Dalam kotak teks skrip kustom, tambahkan yang berikut (ingat untuk mengganti $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. Di panel Output Files, klik tombol + dan tambahkan: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. Klik tombol + lagi, lalu tambahkan ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m.

Setelah selesai, panel setelan akan terlihat seperti ini (catatan: mulai tanggal 10.2, Xcode masih menentukan variabel DERIVED_FILES_DIR sama seperti DERIVED_FILE_DIR untuk kompatibilitas mundur):

Aturan Build Xcode

Menautkan Library Tambahan

Langkah build link (fase build "Link Binary With Libraries" Xcode) memerlukan flag khusus J2ObjC, yang bervariasi bergantung pada cara aplikasi Anda menggunakan class Java yang telah diterjemahkan. Untuk mengetahui daftar lengkapnya, lihat Setelan Link yang Diperlukan. Berikut beberapa contoh library tambahan yang mungkin perlu Anda tautkan:

  • Untuk menggunakan paket java.util.zip, Anda harus menautkan library libz.dylib dengan menambahkan -ljre_zip ke Other Linker Flags.
  • Untuk melakukan pembuatan hash yang aman, Anda harus menambahkan Framework Keamanan ke project Anda.

Men-debug Masalah Build

Jika Xcode melaporkan kegagalan build dengan langkah-langkah ini, buka Issue Navigator dan klik error untuk memeriksa detailnya. {i>Function<i} ini akan menunjukkan detail mengenai pernyataan baris perintah yang dijalankan. Berikut ini beberapa kesalahan umum:

  • Class tidak dapat diselesaikan - Kemungkinan besar, $source-path yang Anda gunakan salah. Cari opsi -sourcepath dalam perintah yang dieksekusi dan pastikan opsi tersebut menunjuk ke direktori root file sumber Java Anda.

  • File"JreEmulation.h" not found - Kemungkinan besar, masalahnya adalah nilai User Header Search Paths yang buruk. Telusuri perintah build untuk menemukan opsi -I beserta jalur tersebut; jika tidak bermasalah, salin jalur tersebut (bukan -I) dan jalankan ls dengan jalur tersebut di jendela terminal untuk memastikan tidak ada kesalahan ketik.

  • "_IOSClass_FromClass", yang direferensikan dari: atau "_OBJCCLASS$_Java" - Library Search Paths-nya salah atau Anda lupa menautkan library emulasi JRE dengan menetapkan Other Linker Flags ke -ljre_emul. Anda mungkin juga perlu menautkan pustaka tambahan.

  • Simbol yang tidak ditentukan: _iconv* - Link di library iconv yang diperlukan.

Jika Anda masih mengalami masalah, tanyakan ke grup j2objc-discuss.