כללי build של Xcode

רוב סוגי הפרויקטים ב-Xcode תומכים בכללי build, שמאפשרים למפתחים לשנות את אופן היצירה של סוגי קבצים קיימים ולהגדיר את אופן היצירה של סוגי קבצים חדשים. הסקריפטים של J2ObjC מיועדים באופן מכוון להתחבר למערכות build כמו Xcode.

הפרויקט j2objc-sample-reversi הוא דוגמה להוספה של מקורות Java למשחק פשוט ל-iOS.

כדי ליצור build מינימלי, צריך לעדכן את ההגדרות של ה-build ואז להוסיף כלל build של J2ObjC.

עדכון ההגדרות של Build

  1. לוחצים על הפרויקט ב-Project Navigator כדי לפתוח את Project Editor ולוודא שיעד האפליקציה נבחר.
  2. לוחצים על הכרטיסייה הגדרות build.
  3. צריך לקשר את ספריית האמולציה של JRE (jre_emul) על ידי הוספת -ljre_emul לסימונים אחרים של מקשרי תגים. היא אמורה להיראות כך: קישור ספריית האמולציה של JRE ב-Xcode
  4. לוחצים על הסמל + כדי לבחור באפשרות הוספת הגדרה בהגדרת המשתמש.
  5. נותנים להגדרה שם J2OBJC_HOME ומגדירים את הערך שלה למיקום של J2ObjC. זו צריכה להיות התיקייה שנוצרה כתוצאה מפריסת ה-Release zip או התיקייה j2objc/dist, אם הידור מהמקור והשורש הוא j2objc.
  6. בקטע נתיבי חיפוש משנים את הפרטים הבאים:
    • נתיבי חיפוש של framework מוסיפים את ${J2OBJC_HOME}/frameworks
    • נתיבי חיפוש בספרייה מוסיפים את ${J2OBJC_HOME}/lib (לכל הגדרת build).
    • נתיבי חיפוש של כותרות משתמשים מוסיפים את ${J2OBJC_HOME}/include.
  7. כדי לאשר את ההגדרות, צריך לחפש את J2OBJC_HOME. אמורה להופיע כותרת דומה לזו: הגדרות Xcode Build

הוספת כלל build של J2ObjC

  1. מאתרים את ספריית השורש של קובצי המקור ב-Java, שנקרא $source-root. ספריית הבסיס היא הספרייה שמכילה את החבילה העליונה של קובצי המקור.

    • אם אתם משתמשים ב-Git ורוצים לשלוף קובצי Java מפרויקט Git אחר, אתם יכולים להוסיף מודול משנה למעקב אחרי הפרויקט באמצעות מקורות ה-Java שלכם. לדוגמה, נניח שפרויקט ה-Xcode (xcodeproj) נמצא ב-~/dev/MyProject, סביר להניח שיש לכם ספריית MyProject נוספת עם המקור של Objective-C. בספרייה ~/dev/MyProject/MyProject מריצים את git submodule add git@github.com:user/javaproject כדי ליצור ספריית ~/dev/MyProject/MyProject/javaproject עם מקור לפרויקט Java, לצד המקורות של Objective-C. לאחר מכן גוררים את התיקייה הזו לפרויקט ה-Xcode שלכם בקבוצה MyProject, שכוללת שיקוף של מערכת הקבצים ב-Xcode. ${PROJECT_DIR}/MyProject/javaproject/src הוא $source-root.

    • אם מקורות ה-Java נמצאים בקבוצה או בספרייה בפרויקט Xcode, הערך $source-root הוא ${PROJECT_DIR}/__group_or_directory_name__.

    • אם יש לכם ספק, לחצו לחיצה ימנית על הקבוצה או הספרייה ובחרו באפשרות Show in Finder כדי לראות את הספרייה ולהשתמש בנתיב המוחלט.

    • לדוגמה, אם יש לכם חבילת Java foo.bar בספרייה שנקראת ~/myproject/src, קובצי ה-Java של החבילה צריכים להיות ב-~/myproject/src/foo/bar/**.java. כלומר, ~/myproject/src היא ספריית הבסיס של הפרויקט.

    • אם קובצי המקור של Java הם חיצוניים לפרויקט Xcode, עליכם להזין את הנתיב המלא שבו ייעשה שימוש כשרושמים אותם בחלון Terminal.

  2. לוחצים על הפרויקט ב-Project Navigator כדי לפתוח את Project Editor ולוודא שיעד האפליקציה נבחר.

  3. לוחצים על הכרטיסייה Build Rules (כללי ה-Build).

  4. לוחצים על + כדי להוסיף כלל build.

  5. באפשרות תהליך של הכלל החדש, בוחרים באפשרות 'קובצי מקור של Java'. האפשרות שימוש צריכה להיות 'סקריפט מותאם אישית:'.

  6. בתיבת הטקסט של הסקריפט המותאם אישית, מוסיפים את הטקסט הבא (חשוב לזכור להחליף את $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. בחלונית 'קובצי פלט', לוחצים על הלחצן + ומוסיפים: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. לוחצים שוב על הלחצן + ומוסיפים ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m.

בסיום, חלונית ההגדרות אמורה להיראות בערך כך (הערה: החל מ-10.2, Xcode עדיין מגדיר את המשתנה DERIVED_FILE_DIR בדיוק כמו DERIVED_FILE_DIR):

כללי Build של Xcode

קישור ספריות נוספות

בשלב ה-build של הקישור (שלב ה-build של 'Link Binary With Libraries' של Xcode) צריך דגלים ספציפיים ל-J2ObjC, שמשתנים בהתאם לאופן שבו האפליקציה משתמשת במחלקות Java מתורגמות. הרשימה המלאה מפורטת בקטע הגדרות קישור נדרשות. כמה דוגמאות לספריות נוספות שאולי תצטרכו לקשר:

  • כדי להשתמש בחבילה java.util.zip, צריך לקשר את ספריית libz.dylib על ידי הוספת -ljre_zip לסימונים לקישור אחר.
  • כדי ליצור גיבוב (hash) מאובטח, צריך להוסיף את Security Framework לפרויקט.

ניפוי באגים בבעיות build

אם Xcode מדווח על כשל ב-build עם השלבים האלה, פותחים את Issue Navigator ולוחצים על שגיאה כדי לבדוק את הפרטים. יוצגו הפרטים של פקודת שורת הפקודה. ריכזנו כאן כמה שגיאות נפוצות:

  • לא ניתן לפתור את הסיווג (Class) – סביר להניח שה$source-path שבו השתמשת היה שגוי. מחפשים את האפשרות -sourcepath בפקודה שבוצעה ומוודאים שהיא מפנה לספריית הבסיס של קובצי המקור ב-Java.

  • הקובץ"JreEmulation.h" לא נמצא – כנראה שהבעיה היא ערך שגוי של נתיבי חיפוש של כותרות משתמש. מחפשים בפקודת ה-build את האפשרות -I עם הנתיב. אם היא נראית בסדר, מעתיקים את הנתיב (ולא את הסמל -I) ובחלון טרמינל מריצים את ls עם הנתיב הזה, כדי לוודא שאין שגיאת הקלדה.

  • "_IOSClass_FromClass", שיש הפניה אליו מ: או מ-"_OBJCCLASS$_Java" - נתיבי החיפוש בספרייה שגויים או ששכחת לקשר את ספריית האמולציה של JRE על ידי הגדרת סימוני קישור אחרים לערך -ljre_emul. יכול להיות שתצטרכו גם לקשר ספריות נוספות.

  • סמלים לא מוגדרים: _iconv* – הקישור מופיע בספרייה הדרושה iconv.

אם אתם עדיין נתקלים בבעיות, שאלו את j2objc-discuss group.