כללי build של Xcode

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

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

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

עדכון הגדרות ה-build

  1. לוחצים על הפרויקט ב-Project Navigator כדי לפתוח את Project Editor ולוודא נבחר יעד האפליקציה.
  2. לוחצים על הכרטיסייה Build Settings (הגדרות Build).
  3. מקשרים את ספריית האמולציה של JRE (jre_emul) על ידי הוספה של -ljre_emul ל-Other Linker Banners. זה אמור להיראות כך: קישור ספריית האמולציה של JRE ב-Xcode
  4. לוחצים על הסמל + כדי לבחור באפשרות Add User-Configured Setting (הוספת הגדרה בהגדרת משתמש).
  5. נותנים להגדרה את השם J2OBJC_HOME ומגדירים את הערך שלה למיקום של J2ObjC. הפעולה הזו להיות התיקייה שנובעת מפריסת קובץ ה-ZIP של קובץ ה-ZIP. או התיקייה j2objc/dist, אם הרכבתם מהמקור והרמה הבסיסית (root) שלכם היא j2objc.
  6. בקטע נתיבי חיפוש משנים את הפרטים הבאים:
    • Framework Search Paths מוסיף ${J2OBJC_HOME}/frameworks
    • נתיבי חיפוש בספרייה מוסיפים ${J2OBJC_HOME}/lib (לכל הגדרת build).
    • נתיבי חיפוש של כותרות משתמשים מוסיפים ${J2OBJC_HOME}/include.
  7. יש לאשר את ההגדרות על ידי חיפוש של J2OBJC_HOME. אתם אמורים לראות משהו כזה: הגדרות Build של Xcode

הוספת כלל 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__.

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

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

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

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

  3. לוחצים על הכרטיסייה יצירת כללים.

  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_FILES_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* – קישור בספריית סמל v חובה.

אם הבעיות לא נפתרות, אפשר לפנות ל j2objc-Conversation group.