এক্সকোড বিল্ড নিয়ম

বেশিরভাগ Xcode প্রকল্পের প্রকারগুলি বিল্ড নিয়মগুলিকে সমর্থন করে, যা বিকাশকারীদের বিদ্যমান ফাইল প্রকারগুলি কীভাবে তৈরি করা হয় তা সংশোধন করতে এবং নতুন ফাইলের প্রকারগুলি কীভাবে তৈরি করা হয় তা সংজ্ঞায়িত করতে দেয়। J2ObjC স্ক্রিপ্টগুলি ইচ্ছাকৃতভাবে Xcode এর মতো বিল্ড সিস্টেমে প্লাগ করার জন্য ডিজাইন করা হয়েছে।

j2objc-sample-reversi প্রকল্পটি একটি সাধারণ iOS গেমে কীভাবে জাভা উত্স যোগ করতে হয় তার একটি উদাহরণ।

একটি ন্যূনতম বিল্ডের জন্য বিল্ড সেটিংস আপডেট করতে হবে এবং তারপরে একটি J2ObjC বিল্ড নিয়ম যোগ করতে হবে।

বিল্ড সেটিংস আপডেট করুন

  1. প্রজেক্ট এডিটর খুলতে প্রজেক্ট নেভিগেটরে প্রজেক্টে ক্লিক করুন এবং নিশ্চিত করুন যে অ্যাপ্লিকেশন টার্গেট নির্বাচন করা হয়েছে।
  2. বিল্ড সেটিংস ট্যাবে ক্লিক করুন।
  3. অন্যান্য লিঙ্কার ফ্ল্যাগগুলিতে -ljre_emul যোগ করে JRE এমুলেশন লাইব্রেরি ( jre_emul ) লিঙ্ক করুন। এটিকে ঐটির মত দেখতে হবে: Xcode এ JRE এমুলেশন লাইব্রেরি লিঙ্ক করা
  4. + থেকে ক্লিক করুন এবং ব্যবহারকারী-সংজ্ঞায়িত সেটিং যুক্ত করুন নির্বাচন করুন।
  5. J2OBJC_HOME সেটিংটির নাম দিন এবং এর মান J2ObjC এর অবস্থানে সেট করুন। যদি আপনি উৎস থেকে কম্পাইল করেন এবং আপনার রুটটি j2objc হয় তাহলে রিলিজ জিপ বা j2objc/dist ফোল্ডার আনজিপ করার ফলে এটি ফোল্ডার হতে হবে।
  6. অনুসন্ধান পথের অধীনে নিম্নলিখিতগুলি সংশোধন করুন:
    • ফ্রেমওয়ার্ক সার্চ পাথ ${J2OBJC_HOME}/frameworks যোগ করে
    • লাইব্রেরি অনুসন্ধান পাথ যোগ করে ${J2OBJC_HOME}/lib (প্রতিটি বিল্ড কনফিগারেশনের জন্য)।
    • ইউজার হেডার সার্চ পাথ ${J2OBJC_HOME}/include যোগ করে।
  7. J2OBJC_HOME অনুসন্ধান করে আপনার সেটিংস নিশ্চিত করুন। আপনি এই অনুরূপ কিছু দেখতে হবে: এক্সকোড বিল্ড সেটিংস

একটি J2ObjC বিল্ড নিয়ম যোগ করা হচ্ছে

  1. আপনার জাভা সোর্স ফাইলের রুট ডিরেক্টরি নির্ধারণ করুন, যাকে আমরা $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 প্রকল্পের বাহ্যিক হয়, একটি টার্মিনাল উইন্ডোতে তালিকাভুক্ত করার সময় ব্যবহৃত সম্পূর্ণ পথটি প্রবেশ করান।

  2. প্রজেক্ট এডিটর খুলতে প্রজেক্ট নেভিগেটরে প্রজেক্টে ক্লিক করুন এবং নিশ্চিত করুন যে অ্যাপ্লিকেশন টার্গেট নির্বাচন করা হয়েছে।

  3. বিল্ড রুলস ট্যাবে ক্লিক করুন।

  4. একটি বিল্ড নিয়ম যোগ করতে + ক্লিক করুন।

  5. নতুন নিয়মের প্রক্রিয়া বিকল্পের জন্য, "জাভা উৎস ফাইল" নির্বাচন করুন। ব্যবহারের বিকল্পটি "কাস্টম স্ক্রিপ্ট:" হওয়া উচিত।

  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 এর মতই সংজ্ঞায়িত করে যা পিছনের সামঞ্জস্যের জন্য):

এক্সকোড বিল্ড নিয়ম

অতিরিক্ত লাইব্রেরি লিঙ্ক করা

লিঙ্ক বিল্ড স্টেপ (এক্সকোডের "লিঙ্ক বাইনারি উইথ লাইব্রেরি" বিল্ড ফেজ) এর জন্য 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-আলোচনা গ্রুপকে জিজ্ঞাসা করুন।