বেশিরভাগ Xcode প্রকল্পের প্রকারগুলি বিল্ড নিয়মগুলিকে সমর্থন করে, যা বিকাশকারীদের বিদ্যমান ফাইল প্রকারগুলি কীভাবে তৈরি করা হয় তা সংশোধন করতে এবং নতুন ফাইলের প্রকারগুলি কীভাবে তৈরি করা হয় তা সংজ্ঞায়িত করতে দেয়। J2ObjC স্ক্রিপ্টগুলি ইচ্ছাকৃতভাবে Xcode এর মতো বিল্ড সিস্টেমে প্লাগ করার জন্য ডিজাইন করা হয়েছে।
j2objc-sample-reversi প্রকল্পটি একটি সাধারণ iOS গেমে কীভাবে জাভা উত্স যোগ করতে হয় তার একটি উদাহরণ।
একটি ন্যূনতম বিল্ডের জন্য বিল্ড সেটিংস আপডেট করতে হবে এবং তারপরে একটি J2ObjC বিল্ড নিয়ম যোগ করতে হবে।
বিল্ড সেটিংস আপডেট করুন
- প্রজেক্ট এডিটর খুলতে প্রজেক্ট নেভিগেটরে প্রজেক্টে ক্লিক করুন এবং নিশ্চিত করুন যে অ্যাপ্লিকেশন টার্গেট নির্বাচন করা হয়েছে।
- বিল্ড সেটিংস ট্যাবে ক্লিক করুন।
- অন্যান্য লিঙ্কার ফ্ল্যাগগুলিতে
-ljre_emulযোগ করে JRE এমুলেশন লাইব্রেরি (jre_emul) লিঙ্ক করুন। এটি এই মত হওয়া উচিত:
- + থেকে ক্লিক করুন এবং ব্যবহারকারী-সংজ্ঞায়িত সেটিং যুক্ত করুন নির্বাচন করুন।
-
J2OBJC_HOMEসেটিংটির নাম দিন এবং এর মান J2ObjC এর অবস্থানে সেট করুন। যদি আপনি উৎস থেকে কম্পাইল করেন এবং আপনার রুটটিj2objcহয় তাহলে রিলিজ জিপ বাj2objc/distফোল্ডার আনজিপ করার ফলে এটি ফোল্ডার হতে হবে। - অনুসন্ধান পথের অধীনে নিম্নলিখিতগুলি সংশোধন করুন:
- ফ্রেমওয়ার্ক সার্চ পাথ
${J2OBJC_HOME}/frameworksযোগ করে - লাইব্রেরি অনুসন্ধান পাথ যোগ করে
${J2OBJC_HOME}/lib(প্রতিটি বিল্ড কনফিগারেশনের জন্য)। - ইউজার হেডার সার্চ পাথ
${J2OBJC_HOME}/includeযোগ করে।
- ফ্রেমওয়ার্ক সার্চ পাথ
-
J2OBJC_HOMEঅনুসন্ধান করে আপনার সেটিংস নিশ্চিত করুন। আপনি এই অনুরূপ কিছু দেখতে হবে:
একটি J2ObjC বিল্ড নিয়ম যোগ করা হচ্ছে
আপনার জাভা সোর্স ফাইলের রুট ডিরেক্টরি নির্ধারণ করুন, যাকে আমরা
$source-rootবলব। রুট ডিরেক্টরি হল সেই ডিরেক্টরি যাতে আপনার সোর্স ফাইলের শীর্ষ প্যাকেজ থাকে।আপনি যদি গিট ব্যবহার করেন এবং অন্য গিট প্রকল্প থেকে আপনার জাভা ফাইলগুলি টানতে চান তবে আপনি আপনার জাভা উত্সগুলির সাথে প্রকল্পটি ট্র্যাক করার জন্য একটি সাবমডিউল যুক্ত করতে পারেন। উদাহরণস্বরূপ, ধরুন আপনার Xcode প্রজেক্ট (xcodeproj)
~/dev/MyProjectএ রয়েছে তাহলে আপনার উদ্দেশ্য-সি উত্স সহ আপনার সম্ভবত অন্য একটিMyProjectডিরেক্টরি থাকতে পারে।~/dev/MyProject/MyProjectডিরেক্টরিতেgit submodule add git@github.com:user/javaprojectএকটি~/dev/MyProject/MyProject/javaprojectডিরেক্টরি তৈরি করতে আপনার জাভা প্রকল্পের জন্য উৎস সহ আপনার উদ্দেশ্য-সি উত্সের পাশে। . তারপরে আপনি সেই ফোল্ডারটিকেMyProjectগ্রুপের অধীনে আপনার Xcode প্রকল্পে টেনে আনতে পারেন, যেখানে আপনার ফাইল সিস্টেমের Xcode মিররিং রয়েছে।${PROJECT_DIR}/MyProject/javaproject/srcহল$source-root।যদি আপনার জাভা উত্সগুলি আপনার Xcode প্রকল্পের একটি গ্রুপ বা ডিরেক্টরিতে থাকে,
$source-rootহল${PROJECT_DIR}/__group_or_directory_name__।যদি সন্দেহ হয়, সেই গ্রুপ বা ডিরেক্টরিতে ডান ক্লিক করুন এবং ডিরেক্টরিটি দেখতে এবং পরম পথ ব্যবহার করতে ফাইন্ডারে দেখান নির্বাচন করুন।
উদাহরণস্বরূপ, আপনার যদি
~/myproject/srcনামক একটি ডিরেক্টরিতে একটি Java প্যাকেজfoo.barথাকে, তাহলে সেই প্যাকেজের জাভা ফাইলগুলি~/myproject/src/foo/bar/**.javaমধ্যে থাকা উচিত -- এর মানে~/myproject/srcআপনার প্রকল্পের জন্য রুট ডিরেক্টরি।যদি জাভা সোর্স ফাইলগুলি Xcode প্রকল্পের বাহ্যিক হয়, একটি টার্মিনাল উইন্ডোতে তালিকাভুক্ত করার সময় ব্যবহৃত সম্পূর্ণ পথটি প্রবেশ করান।
প্রজেক্ট এডিটর খুলতে প্রজেক্ট নেভিগেটরে প্রজেক্টে ক্লিক করুন এবং নিশ্চিত করুন যে অ্যাপ্লিকেশন টার্গেট নির্বাচন করা হয়েছে।
বিল্ড রুলস ট্যাবে ক্লিক করুন।
একটি বিল্ড নিয়ম যোগ করতে + ক্লিক করুন।
নতুন নিয়মের প্রক্রিয়া বিকল্পের জন্য, "জাভা উৎস ফাইল" নির্বাচন করুন। ব্যবহারের বিকল্পটি "কাস্টম স্ক্রিপ্ট:" হওয়া উচিত।
কাস্টম স্ক্রিপ্ট টেক্সট বক্সে, নিম্নলিখিত যোগ করুন (
$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 এর মতই সংজ্ঞায়িত করে যা পিছনের সামঞ্জস্যের জন্য):

অতিরিক্ত লাইব্রেরি লিঙ্ক করা
লিঙ্ক বিল্ড স্টেপ (এক্সকোডের "লিঙ্ক বাইনারি উইথ লাইব্রেরি" বিল্ড ফেজ) এর জন্য J2ObjC-নির্দিষ্ট পতাকা প্রয়োজন, যা আপনার অ্যাপ্লিকেশন কীভাবে অনুবাদ করা জাভা ক্লাসগুলি ব্যবহার করে তার উপর নির্ভর করে। একটি সম্পূর্ণ তালিকার জন্য প্রয়োজনীয় লিঙ্ক সেটিংস দেখুন। এখানে কয়েকটি উদাহরণ রয়েছে যা আপনাকে অতিরিক্ত লাইব্রেরি লিঙ্ক করতে হবে:
-
java.util.zipপ্যাকেজটি ব্যবহার করার জন্য আপনাকে অবশ্যই আপনার অন্যান্য লিঙ্কার ফ্ল্যাগগুলিতে-ljre_zipযোগ করে libz.dylib লাইব্রেরি লিঙ্ক করতে হবে। - নিরাপদ হ্যাশ জেনারেশন করতে, আপনাকে অবশ্যই আপনার প্রোজেক্টে সিকিউরিটি ফ্রেমওয়ার্ক যোগ করতে হবে।
ডিবাগিং বিল্ড সমস্যা
যদি Xcode এই পদক্ষেপগুলির সাথে একটি বিল্ড ব্যর্থতার রিপোর্ট করে, তাহলে ইস্যু নেভিগেটর খুলুন এবং বিশদ পরিদর্শন করতে একটি ত্রুটিতে ক্লিক করুন। এটি কী কমান্ড-লাইন বিবৃতি কার্যকর করা হয়েছিল তার বিশদ বিবরণ দেখাবে। এখানে কয়েকটি সাধারণ ত্রুটি রয়েছে:
ক্লাস সমাধান করা যাবে না - সম্ভবত, আপনি যে
$source-pathব্যবহার করেছেন সেটি ভুল ছিল। এক্সিকিউটেড কমান্ডে-sourcepathঅপশনটি দেখুন এবং নিশ্চিত করুন যে এটি আপনার জাভা সোর্স ফাইলের রুট ডিরেক্টরিতে নির্দেশ করে।"JreEmulation.h" ফাইল পাওয়া যায়নি - সম্ভবত, সমস্যাটি একটি খারাপ ব্যবহারকারী হেডার অনুসন্ধান পাথ মান। পাথ সহ
-Iবিকল্পের জন্য বিল্ড কমান্ড অনুসন্ধান করুন; যদি এটি ঠিক মনে হয়, পাথটি অনুলিপি করুন (-I নয়) এবং একটি টার্মিনাল উইন্ডোতে সেই পাথের সাথেlsচালান যাচাই করতে কোনও টাইপো নেই।"_IOSClass_FromClass", থেকে রেফারেন্স করা হয়েছে: অথবা "_OBJC ক্লাস $_Java" - হয় লাইব্রেরি অনুসন্ধান পাথগুলি ভুল অথবা আপনি
-ljre_emulএ অন্যান্য লিঙ্কার ফ্ল্যাগ সেট করে JRE এমুলেশন লাইব্রেরি লিঙ্ক করতে ভুলে গেছেন। আপনাকে অতিরিক্ত লাইব্রেরি লিঙ্ক করতে হতে পারে।অনির্ধারিত চিহ্ন: _iconv* - প্রয়োজনীয় iconv লাইব্রেরিতে লিঙ্ক।
আপনার যদি এখনও সমস্যা হয়, তাহলে j2objc-আলোচনা গ্রুপকে জিজ্ঞাসা করুন।