টিএল; ডিআর;
সেট করুন "বিল্ড সক্রিয় আর্কিটেকচার শুধু ( ONLY_ACTIVE_ARCH
)" থেকে হ্যাঁ আপনার লাইব্রেরি / অ্যাপ্লিকেশগুলিকে, এমনকি জন্য মুক্তির মোড।
সমস্যার মূল কারণ চিহ্নিত করার চেষ্টা করার সময় আমি এক্সকোড 12 সম্পর্কে কিছু মজার তথ্য উপলব্ধি করেছিলাম।
এক্সকোড 12 আসলে অ্যাপল সিলিকনের জন্য পদক্ষেপ যা দুর্ভাগ্যক্রমে এখনও পাওয়া যায় নি। তবে সেই প্ল্যাটফর্মের সাথে আমরা আর্ম 64 ভিত্তিক ম্যাকোস পেতে যাচ্ছি যেখানে সিমুলেটরগুলি বর্তমান ইন্টেল ভিত্তিক x86_64 আর্কিটেকচারের বিপরীতে আর্ম 64 আর্কিটেকচারে চালাবেন।
এক্সকোড সাধারণত এর লাইব্রেরি / অ্যাপ্লিকেশনগুলি তৈরি করতে "রান ডেস্টিনেশন" এর উপর নির্ভর করে। সুতরাং যখন কোনও সিমুলেটরটিকে "রান গন্তব্য" হিসাবে বেছে নেওয়া হয়, এটি উপলব্ধ সিমুলেটর আর্কিটেকচারের জন্য অ্যাপ্লিকেশন তৈরি করে এবং যখন কোনও ডিভাইসটিকে "রান ডেস্টিনেশন" হিসাবে বেছে নেওয়া হয় তখন এটি ডিভাইস সমর্থন করে এমন আর্কিটেকচারের জন্য তৈরি করে ( arm*
)।
xcodebuild
, এক্সকোডে 12+ বিল্ড সিস্টেমটি arm64
সিমুলেটারের জন্য একটি বৈধ আর্কিটেকচার হিসাবে বিবেচনা করে । সুতরাং যখন কোনও সিমুলেটরটি রান গন্তব্য হিসাবে বেছে নেওয়া হয়, এটি সম্ভাব্যভাবে আপনার লিবস / অ্যাপ্লিকেশনগুলি arm64
ভিত্তিক সিমুলেটরগুলির সাথে সংকলন / লিঙ্ক করার চেষ্টা করতে পারে (এখনও উপলভ্য নয়)। সুতরাং এটি < clang(++)
স্ট্রিটেকচার arm64-apple-ios13.0-simulator
> - <os> - <sdk> - <প্ল্যাটফর্ম> ফর্ম্যাটের মতো কিছু-বাজারের পতাকা পাঠায় এবং ঝাঁকুনিটি আর্ম 64 ভিত্তিক সিমুলেটারের বিরুদ্ধে তৈরি / লিঙ্ক তৈরির চেষ্টা করে যা শেষ পর্যন্ত ইন্টেল ভিত্তিক ম্যাকটিতে ব্যর্থ হয়।
তবে xcodebuild
এটি কেবল মুক্তি বিল্ডগুলির জন্য চেষ্টা করে। কেন? কারণ, "বিল্ড অ্যাক্টিভ আর্কিটেকচার অলি ( ONLY_ACTIVE_ARCH
)" বিল্ড সেটিংস সাধারণত "মুক্তি" কনফিগারেশনের জন্য "না" তে সেট করা থাকে। এবং তার অর্থ xcodebuild
মুক্তির বিল্ডগুলির জন্য নির্বাচিত রান গন্তব্যের জন্য আপনার libs / অ্যাপ্লিকেশনগুলির সমস্ত আর্কিটেকচারাল রূপগুলি তৈরি করার চেষ্টা করবে। এবং সিমুলেটর চালানোর গন্তব্যের জন্য, এটি উভয় x86_64
এবং arm64
এখন অন্তর্ভুক্ত থাকবে , যেহেতু arm64
এক্সকোডে 12++ সিমুলেটরদের জন্য অ্যাপল সিলিকন সমর্থন করার জন্য একটি সমর্থিত আর্কিটেকচারও ।
সহজ কথায় বলতে গেলে, এক্সকোড আপনার অ্যাপ্লিকেশনটি যে কোনও সময় এটি কমান্ড লাইনটি ব্যবহার করার চেষ্টা করবে xcodebuild
, (যা বিল্ড প্রকাশের ক্ষেত্রে ডিফল্ট হবে, আপনার প্রকল্পের সেটিংয়ের সাধারণ ট্যাবটি দেখুন) বা অন্যথায় মুক্তি মোডে ব্যর্থ হবে will সুতরাং এই ইস্যুটির একটি সাধারণ কাজটি হ'ল আপনার লাইব্রেরি / অ্যাপ্লিকেশনগুলিতে এমনকি "রিলিজ মোড ONLY_ACTIVE_ARCH
" এর জন্য "বিল্ড অ্যাক্টিভ আর্কিটেকচার কেবল ( )" হ্যাঁ সেট করা ।
লাইব্রেরিগুলি পড হিসাবে অন্তর্ভুক্ত করা হয় এবং আপনার অ্যাক্সেস থাকলে আপনি .podspec
কেবল সেট করতে পারেন:
spec.pod_target_xcconfig = {'কেবলমাত্র_অ্যাক্টিভE_ मार्च' => 'হ্যাঁ'}
spec.user_target_xcconfig = {'কেবলমাত্র_অ্যাক্টিভE_ मार्च' => 'হ্যাঁ' recommended # প্রস্তাবিত নয়
আমি ব্যক্তিগতভাবে দ্বিতীয় লাইনটি পছন্দ করি না কারণ পোডগুলি লক্ষ্য প্রকল্পটিকে দূষিত না করে এবং এটি নিজেই লক্ষ্য সেটিংসে ওভাররাইড হয়ে যায়। সুতরাং কোনও উপায়ে সেটিংটি ওভাররাইড করা ভোক্তা প্রকল্পের দায়িত্ব হওয়া উচিত। যাইহোক, পডস্পেকস সফল লিটিংয়ের জন্য এটি প্রয়োজনীয় হতে পারে।
তবে, যদি আপনার অ্যাক্সেস না থাকে .podspec
তবে পোডগুলি ইনস্টলের সময় আপনি সর্বদা সেটিংস আপডেট করতে পারেন:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
end
end
end
একটা জিনিস আমি উদ্বিগ্ন ছিলাম যে যখন আমরা আসলে লিবস / অ্যাপ্লিকেশনগুলি সংরক্ষণাগারভুক্ত করব তখন এর কী প্রভাব পড়বে। আর্কাইভ করার সময় অ্যাপ্লিকেশনগুলি সাধারণত "রিলিজ" কনফিগারেশন নেয় এবং যেহেতু এটি বর্তমান চলমান গন্তব্যটির সক্রিয় আর্কিটেকচার বিবেচনা করে একটি রিলিজ বিল্ড তৈরি করবে, এই পদ্ধতির সাহায্যে আমরা টার্গেট বিল্ড থেকে আর্মভ,, আর্মভ s এস ইত্যাদির টুকরোগুলি হারাতে পারি। তবে, আমি নথীকরণটি লক্ষ্য করেছি (সংযুক্ত ছবিতে হাইলাইট করা হয়েছে) যে যখন আমরা "জেনেরিক আইওএস ডিভাইস / যেকোন ডিভাইস" রানের গন্তব্য হিসাবে বেছে নিই তখন এই সেটিংটি উপেক্ষা করা হবে, কারণ এটি কোনও নির্দিষ্ট আর্কিটেকচারকে সংজ্ঞায়িত করে না। সুতরাং আমি অনুমান করি যে আমরা যদি আমাদের অ্যাপটিকে রান গন্তব্য হিসাবে বেছে নিয়ে সংরক্ষণাগারভুক্ত করি তবে আমাদের ভাল হওয়া উচিত।