اکثر انواع پروژه های 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/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 هستند، مسیر کاملی را که هنگام فهرست کردن آنها در پنجره ترمینال استفاده می شود وارد کنید.
روی پروژه در 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 بپرسید.