Xcode থেকে Bazel-এ স্থানান্তরিত হচ্ছে

এই পৃষ্ঠাটি বর্ণনা করে কিভাবে Bazel এর সাথে একটি Xcode প্রকল্প তৈরি বা পরীক্ষা করা যায়। এটি Xcode এবং Bazel এর মধ্যে পার্থক্য বর্ণনা করে এবং একটি Xcode প্রকল্পকে একটি Bazel প্রকল্পে রূপান্তর করার পদক্ষেপগুলি প্রদান করে। এটি সাধারণ ত্রুটিগুলি সমাধানের জন্য সমস্যা সমাধানের সমাধানও প্রদান করে।

Xcode এবং Bazel এর মধ্যে পার্থক্য

  • Bazel আপনাকে প্রতিটি বিল্ড টার্গেট এবং এর নির্ভরতা এবং বিল্ড নিয়মের মাধ্যমে সংশ্লিষ্ট বিল্ড সেটিংস স্পষ্টভাবে উল্লেখ করতে হবে।

  • Bazel-এর জন্য সমস্ত ফাইল প্রয়োজন যার উপর প্রকল্পটি ওয়ার্কস্পেস ডিরেক্টরির মধ্যে উপস্থিত থাকা বা WORKSPACE ফাইলে আমদানি হিসাবে নির্দিষ্ট করা নির্ভর করে৷

  • Bazel এর সাথে Xcode প্রকল্পগুলি তৈরি করার সময়, BUILD ফাইল(গুলি) সত্যের উৎস হয়ে ওঠে। আপনি যদি Xcode-এ প্রোজেক্টে কাজ করেন, তাহলে আপনাকে অবশ্যই Xcode প্রোজেক্টের একটি নতুন সংস্করণ তৈরি করতে হবে যা BUILD ফাইলগুলির সাথে তুলসি ব্যবহার করে মেলে যখনই আপনি BUILD ফাইলগুলি আপডেট করবেন। আপনি যদি bazel build এবং bazel test কমান্ডগুলি এই নির্দেশিকায় পরে বর্ণিত নির্দিষ্ট সীমাবদ্ধতার সাথে বিল্ড এবং পরীক্ষা করার ক্ষমতা প্রদান করে।

  • বিল্ড কনফিগারেশন স্কিমাগুলির মধ্যে পার্থক্যের কারণে, যেমন ডিরেক্টরি লেআউট বা বিল্ড ফ্ল্যাগ, এক্সকোড বিল্ডের "বড় ছবি" সম্পর্কে পুরোপুরি সচেতন নাও হতে পারে এবং এইভাবে কিছু এক্সকোড বৈশিষ্ট্য কাজ নাও করতে পারে। যথা:

    • তুলসীতে রূপান্তরের জন্য আপনি যে লক্ষ্যগুলি নির্বাচন করেছেন তার উপর নির্ভর করে, Xcode সঠিকভাবে প্রকল্পের উত্সকে সূচী করতে সক্ষম নাও হতে পারে৷ এটি Xcode-এ কোড সমাপ্তি এবং নেভিগেশনকে প্রভাবিত করে, যেহেতু Xcode প্রকল্পের সমস্ত সোর্স কোড দেখতে সক্ষম হবে না।

    • স্ট্যাটিক বিশ্লেষণ, ঠিকানা স্যানিটাইজার এবং থ্রেড স্যানিটাইজারগুলি কাজ নাও করতে পারে, যেহেতু ব্যাজেল সেই বৈশিষ্ট্যগুলির জন্য এক্সকোড আশা করে এমন আউটপুট তৈরি করে না।

    • আপনি যদি তুলসীর সাথে একটি Xcode প্রকল্প তৈরি করেন এবং Xcode থেকে পরীক্ষা চালানোর জন্য সেই প্রকল্পটি ব্যবহার করেন, Xcode Bazel এর পরিবর্তে পরীক্ষা চালাবে। Bazel দিয়ে পরীক্ষা চালানোর জন্য, bazel test কমান্ড নিজে চালান।

তুমি শুরু করার আগে

আপনি শুরু করার আগে, নিম্নলিখিতগুলি করুন:

  1. আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে Bazel ইনস্টল করুন

  2. আপনি Bazel এবং এর ধারণার সাথে পরিচিত না হলে, iOS অ্যাপ টিউটোরিয়ালটি সম্পূর্ণ করুন। আপনার ওয়ার্কস্পেস এবং BUILD ফাইল সহ WORKSPACE ওয়ার্কস্পেস, সেইসাথে লক্ষ্য, বিল্ড নিয়ম এবং ব্যাজেল প্যাকেজগুলির ধারণাগুলি বোঝা উচিত।

  3. প্রকল্পের নির্ভরতা বিশ্লেষণ এবং বুঝতে.

প্রকল্প নির্ভরতা বিশ্লেষণ করুন

Xcode থেকে ভিন্ন, Bazel আপনাকে BUILD ফাইলের প্রতিটি লক্ষ্যের জন্য সমস্ত নির্ভরতা স্পষ্টভাবে ঘোষণা করতে হবে।

বাহ্যিক নির্ভরতা সম্পর্কে আরও তথ্যের জন্য, বাহ্যিক নির্ভরতাগুলির সাথে কাজ করা দেখুন।

Bazel এর সাথে একটি Xcode প্রকল্প তৈরি বা পরীক্ষা করুন

Bazel এর সাথে একটি Xcode প্রকল্প তৈরি বা পরীক্ষা করতে, নিম্নলিখিতগুলি করুন:

  1. WORKSPACE ফাইল তৈরি করুন

  2. (পরীক্ষামূলক) CocoaPods নির্ভরতা একীভূত করুন

  3. একটি BUILD ফাইল তৈরি করুন:

    অ্যাপ্লিকেশন লক্ষ্য যোগ করুন

    খ. (ঐচ্ছিক) পরীক্ষার লক্ষ্য(গুলি) যোগ করুন

    গ. লাইব্রেরি টার্গেট যোগ করুন

  4. (ঐচ্ছিক) বিল্ড দানাদার করুন

  5. বিল্ড চালান

  6. তুলসী দিয়ে এক্সকোড প্রকল্প তৈরি করুন

ধাপ 1: WORKSPACE ফাইল তৈরি করুন

একটি নতুন ডিরেক্টরিতে একটি WORKSPACE ফাইল তৈরি করুন৷ এই ডিরেক্টরিটি Bazel ওয়ার্কস্পেস রুট হয়ে যায়। যদি প্রকল্পটি কোন বাহ্যিক নির্ভরতা ব্যবহার না করে, তাহলে এই ফাইলটি খালি হতে পারে। যদি প্রকল্পটি ফাইল বা প্যাকেজগুলির উপর নির্ভর করে যেগুলি প্রকল্পের ডিরেক্টরিগুলির একটিতে নেই, তাহলে WORKSPACE ফাইলে এই বাহ্যিক নির্ভরতাগুলি নির্দিষ্ট করুন৷

ধাপ 2: (পরীক্ষামূলক) CocoaPods নির্ভরতা একীভূত করুন

CocoaPods নির্ভরতাগুলিকে Bazel ওয়ার্কস্পেসে একীভূত করতে, আপনাকে অবশ্যই সেগুলিকে Bazel প্যাকেজে রূপান্তর করতে হবে যা CocoaPods নির্ভরতা রূপান্তরিত করা হয়েছে।

ধাপ 3: একটি BUILD ফাইল তৈরি করুন

একবার আপনি ওয়ার্কস্পেস এবং বাহ্যিক নির্ভরতাগুলি সংজ্ঞায়িত করলে, আপনাকে একটি BUILD ফাইল তৈরি করতে হবে যা বেজেলকে বলে যে প্রকল্পটি কীভাবে গঠন করা হয়েছে। Bazel ওয়ার্কস্পেসের মূলে BUILD ফাইলটি তৈরি করুন এবং নিম্নরূপ প্রকল্পের একটি প্রাথমিক বিল্ড করতে এটি কনফিগার করুন:

টিপ: প্যাকেজ এবং অন্যান্য Bazel ধারণা সম্পর্কে আরও জানতে, কর্মক্ষেত্র, প্যাকেজ এবং লক্ষ্যগুলি দেখুন৷

ধাপ 3a: অ্যাপ্লিকেশন লক্ষ্য যোগ করুন

একটি macos_application বা একটি ios_application নিয়ম লক্ষ্য যোগ করুন। এই লক্ষ্য যথাক্রমে একটি macOS বা iOS অ্যাপ্লিকেশন বান্ডিল তৈরি করে। লক্ষ্যে, ন্যূনতম নিম্নলিখিতগুলি নির্দিষ্ট করুন:

  • bundle_id - বাইনারিটির বান্ডেল আইডি (অ্যাপের নাম অনুসরণ করে বিপরীত-ডিএনএস পাথ)।

  • provisioning_profile - আপনার Apple বিকাশকারী অ্যাকাউন্ট থেকে প্রভিশনিং প্রোফাইল (যদি একটি iOS ডিভাইস ডিভাইসের জন্য তৈরি করা হয়)।

  • families (শুধুমাত্র iOS) - আইফোন, আইপ্যাড বা উভয়ের জন্য অ্যাপ্লিকেশন তৈরি করতে হবে কিনা।

  • infoplists - চূড়ান্ত Info.plist ফাইলে মার্জ করার জন্য .plist ফাইলের তালিকা।

  • minimum_os_version - macOS বা iOS এর ন্যূনতম সংস্করণ যা অ্যাপ্লিকেশন সমর্থন করে। এটি নিশ্চিত করে যে Bazel সঠিক API স্তরের সাথে অ্যাপ্লিকেশন তৈরি করে।

ধাপ 3b: (ঐচ্ছিক) পরীক্ষার লক্ষ্য(গুলি) যোগ করুন

Bazel এর Apple বিল্ড নিয়মগুলি iOS এবং macOS-এ লাইব্রেরি-ভিত্তিক ইউনিট পরীক্ষা চালানোর পাশাপাশি MacOS-এ অ্যাপ্লিকেশন-ভিত্তিক পরীক্ষাগুলিকে সমর্থন করে। যেকোনও প্ল্যাটফর্মে iOS বা UI পরীক্ষার অ্যাপ্লিকেশন-ভিত্তিক পরীক্ষার জন্য, Bazel পরীক্ষার আউটপুট তৈরি করবে তবে পরীক্ষাগুলি অবশ্যই Xcode-এর মধ্যে তুলসী দিয়ে তৈরি একটি প্রকল্পের মাধ্যমে চালাতে হবে। নিম্নরূপ পরীক্ষার লক্ষ্য যোগ করুন:

  • macos_unit_test এ লাইব্রেরি-ভিত্তিক এবং অ্যাপ্লিকেশন-ভিত্তিক ইউনিট পরীক্ষা চালানোর জন্য macos_unit_test।

  • iOS-এ লাইব্রেরি-ভিত্তিক ইউনিট পরীক্ষা চালানোর জন্য ios_unit_test । iOS সিমুলেটর প্রয়োজন এমন পরীক্ষার জন্য, Bazel পরীক্ষার আউটপুট তৈরি করবে কিন্তু পরীক্ষা চালাবে না। আপনাকে অবশ্যই তুলসীর সাথে একটি এক্সকোড প্রকল্প তৈরি করতে হবে এবং এক্সকোডের মধ্যে থেকে পরীক্ষা চালাতে হবে।

  • Xcode ব্যবহার করে iOS সিমুলেটরে ব্যবহারকারী ইন্টারফেস পরীক্ষা চালানোর জন্য প্রয়োজনীয় আউটপুট তৈরি করতে ios_ui_test । আপনাকে অবশ্যই তুলসীর সাথে একটি এক্সকোড প্রকল্প তৈরি করতে হবে এবং এক্সকোডের মধ্যে থেকে পরীক্ষা চালাতে হবে। Bazel নেটিভভাবে UI পরীক্ষা চালাতে পারে না।

সর্বনিম্ন, minimum_os_version বৈশিষ্ট্যের জন্য একটি মান নির্দিষ্ট করুন। অন্যান্য প্যাকেজিং অ্যাট্রিবিউট, যেমন bundle_identifier এবং infoplists , সবচেয়ে বেশি ব্যবহৃত মানগুলিতে ডিফল্ট, নিশ্চিত করুন যে সেই ডিফল্টগুলি প্রকল্পের সাথে সামঞ্জস্যপূর্ণ এবং প্রয়োজন অনুসারে তাদের সামঞ্জস্য করুন। iOS সিমুলেটর প্রয়োজন এমন পরীক্ষার জন্য, test_host অ্যাট্রিবিউটের মান হিসাবে ios_application টার্গেটের নামও উল্লেখ করুন।

ধাপ 3c: লাইব্রেরি টার্গেট যোগ করুন

প্রতিটি অবজেক্টিভ সি লাইব্রেরির জন্য একটি objc_library টার্গেট এবং প্রতিটি Swift লাইব্রেরির জন্য একটি swift_library টার্গেট যোগ করুন যার উপর অ্যাপ্লিকেশন এবং/অথবা পরীক্ষা নির্ভর করে।

নিম্নরূপ লাইব্রেরি লক্ষ্য যোগ করুন:

  • অ্যাপ্লিকেশন লক্ষ্যমাত্রার নির্ভরতা হিসাবে অ্যাপ্লিকেশন লাইব্রেরি লক্ষ্য যোগ করুন।

  • পরীক্ষার লক্ষ্যে নির্ভরতা হিসাবে পরীক্ষা লাইব্রেরি লক্ষ্য যোগ করুন।

  • srcs অ্যাট্রিবিউটে বাস্তবায়নের উত্সগুলি তালিকাভুক্ত করুন।

  • hdrs অ্যাট্রিবিউটে শিরোনাম তালিকাভুক্ত করুন।

বিল্ড নিয়ম সম্পর্কে আরও তথ্যের জন্য, Bazel এর জন্য Apple নিয়ম দেখুন।

এই মুহুর্তে, বিল্ডটি পরীক্ষা করা একটি ভাল ধারণা:

bazel build //:<application_target>

ধাপ 4: (ঐচ্ছিক) বিল্ডটি দানাদার করুন

যদি প্রকল্পটি বড় হয়, বা এটি বৃদ্ধির সাথে সাথে এটিকে একাধিক বেজেল প্যাকেজে ভাগ করার কথা বিবেচনা করুন। এই বর্ধিত গ্রানুলারিটি প্রদান করে:

  • বিল্ডের বর্ধিত বৃদ্ধি,

  • নির্মাণ কাজের বর্ধিত সমান্তরালকরণ,

  • ভবিষ্যতের ব্যবহারকারীদের জন্য আরও ভাল রক্ষণাবেক্ষণযোগ্যতা,

  • লক্ষ্য এবং প্যাকেজ জুড়ে সোর্স কোড দৃশ্যমানতার উপর আরও ভাল নিয়ন্ত্রণ। এটি পাবলিক API-এ ফাঁস হওয়া বাস্তবায়নের বিবরণ ধারণকারী লাইব্রেরির মতো সমস্যাগুলি প্রতিরোধ করে।

প্রকল্পটি দানাদার করার জন্য টিপস:

  • প্রতিটি লাইব্রেরীকে তার নিজস্ব ব্যাজেল প্যাকেজে রাখুন। যাদের জন্য সবচেয়ে কম নির্ভরতা প্রয়োজন তাদের দিয়ে শুরু করুন এবং নির্ভরতা বৃক্ষ পর্যন্ত আপনার পথে কাজ করুন।

  • আপনি BUILD ফাইল যোগ করুন এবং লক্ষ্য নির্দিষ্ট করুন, এই নতুন লক্ষ্যগুলি তাদের উপর নির্ভরশীল লক্ষ্যগুলির deps বৈশিষ্ট্যগুলিতে যোগ করুন।

  • glob() ফাংশন প্যাকেজের সীমানা অতিক্রম করে না, তাই প্যাকেজের সংখ্যা বাড়ার সাথে সাথে glob() এর সাথে মিলে যাওয়া ফাইলগুলি সঙ্কুচিত হবে।

  • একটি main ডিরেক্টরিতে একটি BUILD ফাইল যোগ করার সময়, সংশ্লিষ্ট test ডিরেক্টরিতে একটি BUILD ফাইল যোগ করুন।

  • প্যাকেজ জুড়ে সুস্থ দৃশ্যমানতা সীমা প্রয়োগ করুন।

  • BUILD ফাইলগুলিতে প্রতিটি বড় পরিবর্তনের পরে প্রকল্পটি তৈরি করুন এবং বিল্ড ত্রুটিগুলি আপনি তাদের সম্মুখীন হওয়ার সাথে সাথে ঠিক করুন৷

ধাপ 5: বিল্ড চালান

সম্পূর্ণরূপে স্থানান্তরিত বিল্ডটি চালান যাতে এটি কোনও ত্রুটি বা সতর্কতা ছাড়াই সম্পূর্ণ হয়। প্রতিটি অ্যাপ্লিকেশন চালান এবং যেকোন ত্রুটির উৎস খুঁজে পেতে স্বতন্ত্রভাবে লক্ষ্য পরীক্ষা করুন।

উদাহরণ স্বরূপ:

bazel build //:my-target

ধাপ 6: তুলসী দিয়ে এক্সকোড প্রকল্প তৈরি করুন

Bazel দিয়ে নির্মাণ করার সময়, WORKSPACE এবং BUILD ফাইলগুলি বিল্ড সম্পর্কে সত্যের উৎস হয়ে ওঠে। এক্সকোডকে এটি সম্পর্কে সচেতন করতে, আপনাকে তুলসী ব্যবহার করে একটি বেজেল-সামঞ্জস্যপূর্ণ এক্সকোড প্রকল্প তৈরি করতে হবে।

সমস্যা সমাধান

Bazel ত্রুটি দেখা দিতে পারে যখন এটি নির্বাচিত Xcode সংস্করণের সাথে সিঙ্কের বাইরে চলে যায়, যেমন আপনি একটি আপডেট প্রয়োগ করেন। আপনি যদি এক্সকোডের সাথে ত্রুটির সম্মুখীন হন তবে চেষ্টা করার জন্য এখানে কিছু জিনিস রয়েছে, উদাহরণস্বরূপ "একটি Apple CROSSTOOL ব্যবহার করার জন্য Xcode সংস্করণ অবশ্যই নির্দিষ্ট করা উচিত"৷

  • ম্যানুয়ালি এক্সকোড চালান এবং যেকোনো শর্তাবলী স্বীকার করুন।

  • সঠিক সংস্করণ নির্দেশ করতে, লাইসেন্স গ্রহণ করতে এবং বেজেলের অবস্থা পরিষ্কার করতে Xcode নির্বাচন ব্যবহার করুন।

  sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  sudo xcodebuild -license
  bazel sync --configure
  • যদি এটি কাজ না করে, আপনি bazel clean --expunge চালানোর চেষ্টা করতে পারেন।