Sebagian besar jenis project Xcode mendukung aturan build, yang memungkinkan developer memodifikasi bagaimana jenis file yang ada dibuat, dan untuk menentukan bagaimana jenis file baru dibangun. 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 update setelan build, lalu penambahan aturan build J2ObjC.
Memperbarui Setelan Build
- Klik project di Project Navigator untuk membuka Project Editor dan pastikan target aplikasi dipilih.
- Klik tab Build Settings.
- Tautkan library emulasi JRE (
jre_emul
) dengan menambahkan-ljre_emul
ke Flag Penaut Lainnya. Tampilannya akan terlihat seperti ini: - Klik tanda + dan pilih Tambahkan Setelan Buatan Pengguna.
- Beri nama setelan
J2OBJC_HOME
dan tetapkan nilainya ke lokasi J2ObjC. Seharusnya bisa berupa folder yang dihasilkan dari ekstrak zip rilis atau folderj2objc/dist
jika Anda mengompilasi dari sumber dan root Anda adalahj2objc
. - Di bagian Jalur Penelusuran, ubah hal berikut:
- Jalur Penelusuran Framework menambahkan
${J2OBJC_HOME}/frameworks
- Jalur Penelusuran Library menambahkan
${J2OBJC_HOME}/lib
(untuk setiap konfigurasi build). - Jalur Penelusuran Header Pengguna menambahkan
${J2OBJC_HOME}/include
.
- Jalur Penelusuran Framework menambahkan
- Konfirmasi setelan Anda dengan menelusuri
J2OBJC_HOME
. Anda akan melihat sesuatu yang mirip dengan ini:
Menambahkan Aturan Build J2ObjC
Tentukan direktori {i>root<i} dari file sumber Java Anda, yang akan kita panggil
$source-root
. Direktori {i>root<i} adalah direktori yang berisi direktori yang file sumber Anda.Jika Anda menggunakan git dan ingin menarik file Java Anda dari project git lain, Anda dapat menambahkan submodul yang melacak project dengan Java Anda sumber. Misalnya, anggaplah proyek Xcode (xcodeproj) Anda berada di
~/dev/MyProject
, maka Anda kemungkinan memiliki direktoriMyProject
lain dengan sumber Objective-C Anda. Di kolom Direktori~/dev/MyProject/MyProject
menjalankangit submodule add git@github.com:user/javaproject
untuk membuat direktori~/dev/MyProject/MyProject/javaproject
dengan sumber untuk project Java Anda di samping sumber Objective-C Anda. Anda kemudian dapat menarik folder tersebut ke dalam project Xcode Anda dalam grupMyProject
, yang memiliki Xcode mencerminkan sistem file Anda.${PROJECT_DIR}/MyProject/javaproject/src
adalah$source-root
.Jika sumber Java Anda berada di grup atau direktori di project Xcode,
$source-root
adalah${PROJECT_DIR}/__group_or_directory_name__
.Jika ragu, klik kanan pada grup atau direktori itu dan pilih {i>Show in Finder<i} untuk melihat direktori dan menggunakan jalur absolut.
Misalnya, jika Anda memiliki paket Java
foo.bar
dalam direktori bernama~/myproject/src
, file Java paket itu seharusnya dalam~/myproject/src/foo/bar/**.java
-- artinya~/myproject/src
adalah direktori utama untuk project Anda.Jika file sumber Java berada di luar project Xcode, masukkan jalur lengkap yang digunakan saat mencantumkannya di jendela Terminal.
Klik project di Project Navigator untuk membuka Project Editor dan pastikan target aplikasi dipilih.
Klik tab Build Rules.
Klik + untuk menambahkan aturan build.
Untuk opsi Process aturan baru, pilih "Java source files". Opsi Menggunakan harus "Skrip kustom:".
Dalam kotak teks skrip kustom, tambahkan hal berikut (jangan lupa 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};
Di panel File Output, klik tombol + dan tambahkan:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.Klik tombol + lagi, lalu tambahkan
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
.
Setelah selesai, panel pengaturan akan terlihat seperti ini (catatan: mulai 10.2, Xcode masih mendefinisikan DERIVED_FILES_DIR sama dengan DERIVED_FILE_DIR untuk kompatibilitas mundur):
Menautkan Library Tambahan
Langkah pembangunan tautan (fase pembangunan "Link Binary With Libraries" Xcode) membutuhkan Flag khusus J2ObjC, yang bervariasi bergantung pada cara aplikasi Anda menggunakan class Java yang telah diterjemahkan. Untuk daftar lengkapnya, lihat Setelan Link yang Diperlukan. Berikut beberapa contoh library tambahan apa yang mungkin perlu Anda tautkan:
- Untuk menggunakan paket
java.util.zip
, Anda harus menautkan library libz.dylib dengan menambahkan-ljre_zip
ke Tanda Penaut Lainnya. - Untuk melakukan pembuatan hash yang aman, Anda harus menambahkan Framework Keamanan ke project.
Men-debug Masalah Build
Jika Xcode melaporkan kegagalan build dengan langkah-langkah ini, buka Issue Navigator dan klik {i>error<i} untuk memeriksa detailnya. Ini akan menampilkan detail mengenai baris perintah telah dieksekusi. Berikut ini beberapa error umum:
Class tidak dapat diselesaikan - Kemungkinan besar,
$source-path
yang Anda gunakan salah. Cari opsi-sourcepath
pada perintah yang dijalankan dan pastikan opsi tersebut mengarah ke direktori utama file sumber Java Anda."JreEmulation.h" file tidak ditemukan - Kemungkinan besar, masalahnya adalah Penelusuran Header Pengguna yang buruk Jalur. Telusuri perintah build untuk opsi
-I
dengan jalur; jika terlihat oke, salin jalur (bukan -I) dan di jendela terminal, jalankanls
dengan jalur tersebut untuk memverifikasi di sana bukanlah kesalahan ketik."_IOSClass_FromClass", direferensikan from: atau "_OBJCCLASS$_Java" - Baik berupa Library Jalur Penelusuran salah atau Anda lupa menautkan library emulasi JRE dengan menetapkan Lainnya Flag Penaut ke
-ljre_emul
. Anda mungkin juga perlu menautkan library tambahan.Simbol yang tidak ditentukan: _iconv* - Link di library iconv yang diperlukan.
Jika Anda masih mengalami masalah, tanyakan grup j2objc-discuss.