เริ่มต้นใช้งาน

ขั้นแรก ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

หากต้องการแปลไฟล์ต้นฉบับ Java (เช่น Hello.java)

public class Hello {
  public static void main(String[] args) {
    System.out.println("hello, world");
  }
}
j2objc Hello.java
translating Hello.java
Translated 1 file: 0 errors, 0 warnings

วิธีคอมไพล์ไฟล์ที่แปลแล้ว

j2objcc -c Hello.m

j2objcc คือสคริปต์ Wrapper ที่จะเรียกใช้คอมไพเลอร์ C (โดยทั่วไปจะเป็น clang หรือ LLVM, คอมไพเลอร์ C/C++/Objective-C ของ Apple) วิธีสร้างไฟล์ปฏิบัติการ

j2objcc -o hello Hello.o
./hello Hello
hello, world

j2objcc จะส่งต่อตัวเลือกที่คุณระบุสำหรับคอมไพเลอร์ Objective-C เช่น หากต้องการแปลภาษาและสร้างด้วยสัญลักษณ์การแก้ไขข้อบกพร่อง ให้ใช้แฟล็ก -g ดังนี้

j2objcc -g -o hello Hello.m

คำถามที่พบบ่อย

เวลาที่ฉันเรียกใช้ j2objcc จะบ่นว่าไม่พบ "Foundation/Foundation.h"

หากการคอมไพล์ไม่สำเร็จเนื่องจากไม่พบ Foundation/Foundation.h ปัญหาคือไม่พบ iOS SDK (ซึ่งก็คือตำแหน่งของส่วนหัว)

  1. ตรวจสอบว่าคุณติดตั้ง Xcode แล้ว
  2. ติดตั้งเครื่องมือบรรทัดคำสั่งโดยเรียกใช้ xcode-select --install
  3. เรียกใช้ xcodebuild -showsdks ซึ่งควรแสดง SDK อย่างน้อย 1 รายการสำหรับ OS X, iOS และ iOS Simulator
  4. หากไม่สำเร็จ ให้ลบแอปพลิเคชัน Xcode และไปที่ขั้นตอนที่ 1

j2objcc จะรับการรายงานปัญหาใดบ้าง

สคริปต์ j2objcc เป็นเพียง Wrapper รอบๆ คอมไพเลอร์ Objective-C, clang เรียกใช้ man cc หรือ man clang เพื่อแสดงตัวเลือก

เมื่อคอมไพล์ด้วย j2objcc ไม่พบไฟล์ส่วนหัว (.h) ของโครงการของฉัน

คอมไพเลอร์จำเป็นต้องทราบไดเรกทอรีที่มีไฟล์ที่แปลแล้ว โดยใช้ -I <directory> ดังนั้นหากสร้างไฟล์ด้วย j2objc -d foo/bar ... คำสั่ง j2objcc จะต้องใช้ -Ifoo/bar หากไม่มีการระบุไดเรกทอรีเอาต์พุตในคำสั่ง j2objc คุณจะต้องเพิ่ม -I.

ฉันจะทำงานบน Windows หรือ Linux ได้อย่างไร

J2ObjC เป็นเครื่องมือ iOS ที่ใช้สำหรับการพัฒนาบน Mac OS X คุณจะคอมไพล์โค้ดที่แปลแล้วไม่ได้เนื่องจากต้องใช้ OS X หรือ iOS SDK จาก Apple ซึ่งต้องใช้ SDK ของโค้ดดังกล่าวจะใช้ใน Mac เท่านั้น

อย่างไรก็ตาม เนื่องจากโปรแกรมแปล J2ObjC เป็น Java เพียงอย่างเดียว จึงสามารถทำการแปลบนระบบอื่นๆ ได้ ใน Linux สคริปต์ j2objc ควรทำงานเหมือนเดิม การใช้ Windows ต้องใช้ CygWin หรือเรียกใช้ Java โดยตรง หากต้องการเรียกใช้นักแปลโดยไม่ใช้สคริปต์ j2objc ให้ใช้คำสั่งต่อไปนี้ โดยที่ J2OBJC_DIR คือไดเรกทอรีที่มีการแตกไฟล์การกระจาย J2ObjC ไว้:

java -Xbootclasspath:\lib\jre_emul.jar -jar J2OBJC_DIR\lib\j2objc.jar [j2objc-flags] [source files]