قوانین ساخت Xcode

اکثر انواع پروژه های Xcode از قوانین ساخت پشتیبانی می کنند، که به توسعه دهندگان اجازه می دهد تا نحوه ساخت انواع فایل های موجود را تغییر دهند و نحوه ساخت انواع فایل های جدید را تعریف کنند. اسکریپت های J2ObjC عمداً برای اتصال به سیستم های ساختنی مانند Xcode طراحی شده اند.

پروژه j2objc-sample-reversi نمونه ای از نحوه اضافه کردن منابع جاوا به یک بازی ساده iOS است.

یک ساخت حداقل نیاز به به روز رسانی تنظیمات ساخت و سپس اضافه کردن یک قانون ساخت J2ObjC دارد.

تنظیمات ساخت را به روز کنید

  1. روی پروژه در Project Navigator کلیک کنید تا ویرایشگر پروژه باز شود و مطمئن شوید که هدف برنامه انتخاب شده است.
  2. روی تب Build Settings کلیک کنید.
  3. کتابخانه شبیه‌سازی JRE ( jre_emul ) را با افزودن -ljre_emul به سایر پرچم‌های پیوند دهنده پیوند دهید. می بایست شبیه به این باشه: پیوند دادن کتابخانه شبیه سازی JRE در Xcode
  4. روی + to کلیک کنید و Add User-Defined Setting را انتخاب کنید.
  5. نام تنظیم را J2OBJC_HOME بگذارید و مقدار آن را روی مکان J2ObjC قرار دهید. اگر از منبع کامپایل کرده‌اید و ریشه شما j2objc است، این باید یا پوشه‌ای باشد که در نتیجه از حالت فشرده خارج کردن فایل فشرده منتشر شده است یا پوشه j2objc/dist .
  6. در قسمت Search Paths موارد زیر را تغییر دهید:
    • مسیرهای جستجوی چارچوب ${J2OBJC_HOME}/frameworks اضافه می‌کنند
    • مسیرهای جستجوی کتابخانه ${J2OBJC_HOME}/lib (برای هر پیکربندی ساخت) اضافه می‌کنند.
    • مسیرهای جستجوی سرصفحه کاربر ${J2OBJC_HOME}/include اضافه می‌کنند.
  7. تنظیمات خود را با جستجوی J2OBJC_HOME تأیید کنید. شما باید چیزی شبیه به این را ببینید: تنظیمات Xcode Build

اضافه کردن یک قانون ساخت J2ObjC

  1. دایرکتوری ریشه فایل های منبع جاوا خود را که ما آن را $source-root می نامیم، تعیین کنید. دایرکتوری ریشه دایرکتوری است که حاوی بسته بالای فایل های منبع شما است.

    • اگر از git استفاده می‌کنید و می‌خواهید فایل‌های جاوا خود را از یک پروژه git دیگر بیرون بکشید، می‌توانید یک زیر ماژول برای ردیابی پروژه با منابع جاوا خود اضافه کنید. به عنوان مثال، فرض کنید پروژه Xcode شما (xcodeproj) در ~/dev/MyProject باشد، احتمالاً دایرکتوری MyProject دیگری با منبع Objective-C خود دارید. در دایرکتوری ~/dev/MyProject/MyProject git submodule add git@github.com:user/javaproject تا یک دایرکتوری ~/dev/MyProject/MyProject/javaproject با منبع برای پروژه جاوا شما درست در کنار منابع Objective-C ایجاد کنید. . سپس می توانید آن پوشه را به پروژه Xcode خود در زیر گروه MyProject بکشید، که Xcode منعکس کننده سیستم فایل شما است. ${PROJECT_DIR}/MyProject/javaproject/src $source-root است.

    • اگر منابع جاوا شما در یک گروه یا دایرکتوری در پروژه Xcode شما هستند، $source-root ${PROJECT_DIR}/__group_or_directory_name__ است.

    • اگر شک دارید روی آن گروه یا دایرکتوری کلیک راست کرده و Show in Finder را انتخاب کنید تا دایرکتوری را ببینید و از مسیر مطلق استفاده کنید.

    • به عنوان مثال، اگر یک بسته جاوا foo.bar در دایرکتوری به نام ~/myproject/src دارید، فایل های جاوا آن بسته باید در ~/myproject/src/foo/bar/**.java باشد -- این به معنای ~/myproject/src است. ~/myproject/src دایرکتوری اصلی پروژه شما است.

    • اگر فایل های منبع جاوا خارج از پروژه Xcode هستند، مسیر کاملی را که هنگام فهرست کردن آنها در پنجره ترمینال استفاده می شود وارد کنید.

  2. روی پروژه در Project Navigator کلیک کنید تا ویرایشگر پروژه باز شود و مطمئن شوید که هدف برنامه انتخاب شده است.

  3. روی تب Build Rules کلیک کنید.

  4. برای افزودن یک قانون ساخت، روی + کلیک کنید.

  5. برای گزینه Process قانون جدید، "فایل های منبع جاوا" را انتخاب کنید. گزینه Using باید «اسکریپت سفارشی:» باشد.

  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 برای سازگاری با عقب تعریف می‌کند):

قوانین ساخت Xcode

پیوند دادن کتابخانه های اضافی

مرحله ساخت پیوند (مرحله ساخت "Link Binary With Libraries" Xcode) به پرچم های خاص J2ObjC نیاز دارد که بسته به نحوه استفاده برنامه شما از کلاس های جاوا ترجمه شده متفاوت است. برای فهرست کامل به تنظیمات پیوند مورد نیاز مراجعه کنید. در اینجا چند نمونه آورده شده است که چه کتابخانه های دیگری را ممکن است نیاز داشته باشید که پیوند دهید:

  • برای استفاده از بسته java.util.zip باید کتابخانه libz.dylib را با افزودن -ljre_zip به سایر پرچم‌های پیوند دهنده خود پیوند دهید.
  • برای ایجاد هش امن، باید چارچوب امنیتی را به پروژه خود اضافه کنید.

اشکال زدایی مشکلات ساخت

اگر Xcode با انجام این مراحل یک شکست ساخت را گزارش کرد، Issue Navigator را باز کنید و روی یک خطا کلیک کنید تا جزئیات را بررسی کنید. این جزئیات دستور خط فرمان اجرا شده را نشان می دهد. در اینجا چند خطای رایج وجود دارد:

  • کلاس قابل حل نیست - به احتمال زیاد، $source-path که استفاده کردید نادرست بوده است. به دنبال گزینه -sourcepath در دستور اجرا شده باشید و مطمئن شوید که به دایرکتوری ریشه فایل های منبع جاوا شما اشاره می کند.

  • فایل "JreEmulation.h" یافت نشد - به احتمال زیاد، مشکل مقدار نامناسب User Header Search Paths است. دستور build را برای گزینه -I با مسیر جستجو کنید. اگر مشکلی به نظر می رسد، مسیر را کپی کنید (نه -I) و در پنجره ترمینال ls با آن مسیر اجرا کنید تا بررسی کنید که اشتباه تایپی وجود ندارد.

  • "_IOSClass_FromClass"، ارجاع شده از: یا "_OBJC CLASS $_Java" - یا مسیرهای جستجوی کتابخانه نادرست است یا فراموش کرده اید که کتابخانه شبیه سازی JRE را با تنظیم Other Linker Flags روی -ljre_emul پیوند دهید. همچنین ممکن است لازم باشد کتابخانه های دیگری را پیوند دهید.

  • نمادهای تعریف نشده: _iconv* - پیوند در کتابخانه iconv مورد نیاز .

اگر همچنان مشکل دارید، از گروه j2objc-discuss بپرسید.