תחילת העבודה

קודם כל,

כדי לתרגם קובץ מקור ב-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, הבעיה היא שה-SDK ל-iOS לא נמצא (כאן נמצאת הכותרת).

  1. מוודאים ש-Xcode מותקן במכשיר.
  2. מריצים את xcode-select --install כדי להתקין את כלי שורת הפקודה.
  3. מריצים את xcodebuild -showsdks שאמורה להציג לפחות SDK אחד ל-OS X, ל-iOS ולסימולטור ל-iOS.
  4. אם הפעולה הזו נכשלת, מוחקים את אפליקציית Xcode ועוברים לשלב 1.

אילו סימונים דגלים j2objcc?

הסקריפט j2objcc הוא רק wrapper סביב מהדר Objective-C, קלאנג. מריצים את הפקודה 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]