اکثر انواع پروژه های Xcode از قوانین ساخت پشتیبانی می کنند، که به توسعه دهندگان اجازه می دهد تا نحوه ساخت انواع فایل های موجود را تغییر دهند و نحوه ساخت انواع فایل های جدید را تعریف کنند. اسکریپت های J2ObjC عمداً برای اتصال به سیستم های ساختنی مانند Xcode طراحی شده اند.
پروژه j2objc-sample-reversi نمونه ای از نحوه اضافه کردن منابع جاوا به یک بازی ساده iOS است.
یک ساخت حداقل نیاز به به روز رسانی تنظیمات ساخت و سپس اضافه کردن یک قانون ساخت J2ObjC دارد.
تنظیمات ساخت را به روز کنید
- روی پروژه در Project Navigator کلیک کنید تا ویرایشگر پروژه باز شود و مطمئن شوید که هدف برنامه انتخاب شده است.
- روی تب Build Settings کلیک کنید.
- کتابخانه شبیهسازی JRE (
jre_emul) را با افزودن-ljre_emulبه سایر پرچمهای پیوند دهنده پیوند دهید. باید به این شکل باشد:
- روی + to کلیک کنید و Add User-Defined Setting را انتخاب کنید.
- نام تنظیم را
J2OBJC_HOMEبگذارید و مقدار آن را روی مکان J2ObjC قرار دهید. اگر از منبع کامپایل کردهاید و ریشه شماj2objcاست، این باید یا پوشهای باشد که در نتیجه از حالت فشرده خارج کردن فایل فشرده منتشر شده است یا پوشهj2objc/dist. - در قسمت Search Paths موارد زیر را تغییر دهید:
- مسیرهای جستجوی چارچوب
${J2OBJC_HOME}/frameworksاضافه میکنند - مسیرهای جستجوی کتابخانه
${J2OBJC_HOME}/lib(برای هر پیکربندی ساخت) اضافه میکنند. - مسیرهای جستجوی سرصفحه کاربر
${J2OBJC_HOME}/includeاضافه میکنند.
- مسیرهای جستجوی چارچوب
- تنظیمات خود را با جستجوی
J2OBJC_HOMEتأیید کنید. شما باید چیزی شبیه به این را ببینید:
اضافه کردن یک قانون ساخت J2ObjC
دایرکتوری ریشه فایل های منبع جاوا خود را که ما آن را
$source-rootمی نامیم، تعیین کنید. دایرکتوری ریشه دایرکتوری است که حاوی بسته بالای فایل های منبع شما است.اگر از git استفاده میکنید و میخواهید فایلهای جاوا خود را از یک پروژه git دیگر بیرون بکشید، میتوانید یک زیرماژول برای ردیابی پروژه با منابع جاوا خود اضافه کنید. به عنوان مثال، فرض کنید پروژه Xcode شما (xcodeproj) در
~/dev/MyProjectباشد، احتمالاً دایرکتوریMyProjectدیگری با منبع Objective-C خود دارید. در دایرکتوری~/dev/MyProject/MyProjectgit 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 هستند، مسیر کاملی را که هنگام فهرست کردن آنها در پنجره ترمینال استفاده می شود وارد کنید.
روی پروژه در Project Navigator کلیک کنید تا ویرایشگر پروژه باز شود و مطمئن شوید که هدف برنامه انتخاب شده است.
روی تب Build Rules کلیک کنید.
برای افزودن یک قانون ساخت، روی + کلیک کنید.
برای گزینه Process قانون جدید، "فایل های منبع جاوا" را انتخاب کنید. گزینه Using باید «اسکریپت سفارشی:» باشد.
در جعبه متن اسکریپت سفارشی، موارد زیر را اضافه کنید (به یاد داشته باشید که
$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};در پانل فایلهای خروجی، روی دکمه + کلیک کنید و اضافه کنید:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.دوباره روی دکمه + کلیک کنید و
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.mرا اضافه کنید.
وقتی کارتان تمام شد، پانل تنظیمات باید چیزی شبیه به این باشد (توجه داشته باشید: از 10.2، Xcode همچنان متغیر DERIVED_FILES_DIR را مانند DERIVED_FILE_DIR برای سازگاری با عقب تعریف میکند):

پیوند دادن کتابخانه های اضافی
مرحله ساخت پیوند (مرحله ساخت "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 بپرسید.