আমি যখন আমার এক্সকোড প্রকল্পটি চালানোর চেষ্টা করি তখন এটি আমার কাছে সদৃশ চিহ্ন রয়েছে বলে উল্লেখ করে একটি ত্রুটিযুক্ত হয়ে ব্যর্থ হয়। আমি অনলাইনে দেখেছি যেখানে এই সদৃশগুলি পাওয়া যায় তবে ভাগ্য হয়নি:
এটা ঠিক করার কোন ধারনা তোমার আছ?
আমি যখন আমার এক্সকোড প্রকল্পটি চালানোর চেষ্টা করি তখন এটি আমার কাছে সদৃশ চিহ্ন রয়েছে বলে উল্লেখ করে একটি ত্রুটিযুক্ত হয়ে ব্যর্থ হয়। আমি অনলাইনে দেখেছি যেখানে এই সদৃশগুলি পাওয়া যায় তবে ভাগ্য হয়নি:
এটা ঠিক করার কোন ধারনা তোমার আছ?
উত্তর:
আমার জন্য এটি "নো কমন ব্লকস" সংকলক সেটিংসটি নংতে স্যুইচ করতে সহায়তা করেছে: এটি বেশিরভাগই বোধগম্য মনে হয়, সেটিংটি এখানে ব্যাখ্যা করা হয়েছে: জিসিসি_নো_মোমোন_ব্লকস কীসের জন্য ব্যবহৃত হয়?
এক্সকোড 8 ব্যবহার করে "প্রস্তাবিত সেটিংসে প্রজেক্ট আপডেট করুন" বিকল্পটি আমার প্রকল্পের জন্য 'নো কমন ব্লকস' চালু করেছে।
এটিকে ফিরিয়ে ফিরিয়ে দেওয়া সবকিছু ঠিক করে দিয়েছে।
আমার জন্য এটি ছিল যে আমি ভুলভাবে একটি .m না হিসাবে একটি ফাইল আমদানি করেছি
আমি একটি পোড ডাউনগ্রেড করার সময় আমার পোডগুলিকে গণ্ডগোল করে ফেলেছি এবং আমি আর্কিটেকচার আর্ম 64 এর জন্য নকল প্রতীক দিয়ে সমস্যার সমাধান করতে পেরেছি শুঁটিগুলি সরিয়ে আবার এগুলি ইনস্টল করে:
pod deintegrate
pod install
আর একটি সমাধান হ'ল:
প্রকল্প নির্বাচন করুন -> লক্ষ্য -> বিল্ড ফেজ -> সংকলন উত্স -> তৃতীয় শেষ ত্রুটি লাইনে উল্লিখিত ফাইলটির জন্য অনুসন্ধান করুন (আপনার ক্ষেত্রে বিএফএপলিংক রিটারনটোরিফারভিউ.ও )।
তারপরে আপনি অনুসন্ধান ফলাফলের মধ্যে 1 বা 2 ফাইল দেখতে পাবেন।
এর মধ্যে একটি সরান এবং আবার সংকলন করুন । এটি এখনই পুনরায় সংকলন করা উচিত কারণ এখানে কেবলমাত্র একটি ফাইল রয়েছে এবং বিল্ড করার জন্য আর কোনও দ্বন্দ্ব নেই।
যদি এটি কাজ না করে তবে সম্ভবত ফাইলটির মধ্যে ত্রুটি রয়েছে এবং আপনার সমস্তগুলি সরিয়ে ফেলা উচিত এবং তারপরে পুনরায় সংযোগ করা উচিত। এটি আবার কাজ করা উচিত।
এক্সকোড 8 এ আপগ্রেড করার সময়, আমি প্রস্তাবিত সেটিংসে আপগ্রেড করার জন্য একটি বার্তা পেয়েছি। আমি গ্রহণ করেছি এবং সবকিছু আপডেট হয়েছিল। আমি সংকলন সময় ইস্যু পেতে শুরু:
XXXX এর জন্য সদৃশ প্রতীক XXXX এর জন্য XXXX এর সদৃশ প্রতীক
মোট 143 ত্রুটি। টার্গেটে গিয়েছিলেন -> বিল্ড সেটিংস -> কোনও সাধারণ ব্লক নেই -> এটি কোনও সেট করুন। এটি সমস্যার সমাধান করেছে। বিষয়টি হ'ল সংহত প্রকল্পগুলির কোড ব্লকগুলি সাধারণ ছিল এবং তাই এটি সংকলন করতে সক্ষম ছিল না। ব্যাখ্যা এখানে পাওয়া যাবে ।
এই ত্রুটিটি ঘটে যখন লিঙ্কার বস্তু ফাইলগুলিকে লিঙ্ক করার চেষ্টা করে। এই ত্রুটির জন্য আমি যে কয়েকটি কারণ ভাবতে পারি তা হ'ল:
ডুপ্লিকেটেড ফাংশন / ক্লাসটি প্রকল্পের দুটি পৃথক স্থানে / ফাইলগুলিতে সংজ্ঞায়িত করা হয়েছে এবং বিল্ড কমান্ডের যে কোনও প্রকারের জন্য কেবল তার মধ্যে একটিরই সংকলনের কথা ছিল। তবে কোনওভাবেই এই দুটি ফাইলই আপনার প্রকল্পে সংকলিত হয়েছে। সুতরাং আপনাকে আপনার যদি-অন্য শর্তাদি বা অন্যান্য নির্ভরতা যা আপনার নিজের নির্দিষ্ট বিল্ড কমান্ডের জন্য অ-আবশ্যক ফাইলটি সংকলন করার জন্য প্রয়োজনীয় ফাইলগুলির তালিকায় src ফাইল যুক্ত করে এবং অন্য নির্ভরতাগুলি পরীক্ষা করতে হবে।
প্রকল্পটির দুটি পৃথক স্থানে / ফাইলগুলিতে সদৃশ ফাংশন / শ্রেণিটি দুর্ঘটনাক্রমে সংজ্ঞায়িত। ভুল সংজ্ঞাটি সরান।
আপনি আবার তৈরি করার আগে আপনার ওবিজে ডিরেক্টরিটি পরিষ্কার করুন, আপনার আগের বিল্ডগুলি থেকে সেখানে কিছু পুরানো ওজেক্ট ফাইল থাকতে পারে যা এই দ্বন্দ্বের কারণ হতে পারে।
PS আমি কোনও বিশেষজ্ঞ নই, তবে আমি যখন এই সমস্যার মুখোমুখি হলাম তখনই এইভাবে সমাধান করেছি। :)
আপনি যদি এক্সকোড 7 বা 8 এ চলে যান এবং সত্যিই একটি পুরানো প্রকল্প খুলছেন, আমি এই সমস্যার মুখোমুখি হয়েছি:
ভিতরে SomeConstFile.h
NSString * const kAConstant;
ভিতরে SomeConstFile.m
NSString *const kAConstant = @"a constant";
সংকলকটির পূর্ববর্তী সংস্করণগুলি ধরে নিয়েছিল যে শিরোনাম ফাইলটিতে সংজ্ঞাটি বহিরাগত ছিল এবং তাই সোমারসনস্টফিল.কে সহ পুরো জায়গা জুড়ে ছিল।
এখন আপনাকে স্পষ্ট করে এই কনসেটগুলি বাহ্যিক হিসাবে ঘোষণা করতে হবে:
ভিতরে SomeConstFile.h
extern NSString * const kAConstant;
ভাল, কিছু সময় যখন এসডিকে এফবি বা লাইফ্রেরিগুলি যেমন ভোফরিয়া বা গুগল অ্যানালিটিক্স ব্যবহার করার সময় নমুনা প্রকল্প যুক্ত করা সমস্যাটি হতে পারে যে তারা ইতিমধ্যে ফ্রেমওয়ার্কগুলি অন্তর্ভুক্ত করছে এবং এর মতো করে ফেলেছে, তাই আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে তারা ইতিমধ্যে থাকা অবস্থায় আপনি ম্যানুয়ালি যুক্ত প্রতীকগুলি পুনরাবৃত্তি করবেন না নমুনা অন্তর্ভুক্ত
আমার জন্য, বিষয়টি কনস্টের তৈরির ধরন ছিল যা এই আইওএস 8 অবধি কার্যকর ছিল .. আমার কয়েকটি লাইন ছিল:
int const kView_LayoutCount = 3;
আমার .h ফাইলে। ছয় লাইনের মতো 636 লিঙ্কার ফাইলগুলির ফলে সাধারণ ব্লকগুলি NO এ সেট করা হয়। (14 কে + যদি হ্যাঁ)। লাইনগুলি .m তে সরানোর পরে। মান মান ঘোষণা এবং সংকলনটি ভাল ছিল।
আশা করি এটি অন্যকে সহায়তা করবে!
আমার ক্ষেত্রে কারণ খুব বোকা ছিল:
আমার কাছে একটি কনস্ট্যান্ট.হ ফাইল ছিল যেখানে আমি ম্যাক্রো সংজ্ঞায়িত করেছি। আমি সেখানে এনএসএসস্ট্রিং করার কথা ভেবেছিলাম। এবং এটি করেছেন:
NSString const *kGreenColor = @"#00C34E";
এটি আর্কিটেকচার আর্ম 64 এর জন্য ডুপ্লিকেট সিম্বলগুলির সমস্যা সৃষ্টি করেছে এবং লিঙ্কার কমান্ড প্রস্থান কোড 1 দিয়ে ব্যর্থ হয়েছে const
আপনার অন্তর্ভুক্ত ফাইলটি পরীক্ষা করুন, আমার এই সমস্যাটি ছিল কারণ আমি ঘটনাক্রমে "ফাইলনাম।" এর পরিবর্তে "ফাইলনাম.এম" আমদানি করেছি, স্বতঃসংশোধন (ট্যাব) "এম" নয় "এইচ" রাখে।
ত্রুটিগুলি থেকে, এটি কোনও ক্লাসে একাধিকবার প্রদর্শিত হবে ind এটি আবিষ্কার করে যে ক্লাসগুলি এটি কাজ করবে তা সরিয়ে ফেলে।
আমি একাধিক সময় তৈরি করে AppDelegate.h এবং .m ফাইল তৈরি করছি। সুতরাং এই ত্রুটিটি ঘটবে F শেষ পর্যন্ত এই ক্লাসগুলি আমার পক্ষে ভাল কাজ করছে তা সন্ধান এবং সরিয়ে ফেলা হবে।
এই সমস্যার সমাধান করতে পর্যায়গুলি তৈরি করতে যান এবং ডুপ্লিকেট ফাইলের মতো অনুসন্ধান করুন (ফেসবুকএসডিকে, ইউনাইটেডস) এবং মুছুন (এক্সটেনশন ফাইল.ও) তারপরে আবার বিল্ড করুন।
আমার জন্য, আমি sampleMethod
ভিউকন্ট্রোলার_এ নামে একটি পদ্ধতি তৈরি করেছি এবং ভিউকন্ট্রোলার_বিতেও একই পদ্ধতি তৈরি করেছি, এটি আমার এই ত্রুটি ঘটায়, তারপরে আমি পদ্ধতির নামটি ভিউকন্ট্রোলার_বিতে পরিবর্তন করেছি secondSampleMethod
। এটি ত্রুটি স্থির করে।
কোডটি হ্রাস করতে এবং অনেক জায়গায় একই কোডটির সদৃশ না করার জন্য একটি ভাল বৈশিষ্ট্য বলে মনে হচ্ছে।
আমি হ্যাঁ থেকে নোতে কোনও সাধারণ ব্লকগুলি পরিবর্তন করার চেষ্টা করেছি এবং তারপরে হ্যাঁ থেকে নম্বরে পরীক্ষারযোগ্যতা সক্ষম করে এটি কার্যকর হয়নি। আমি বিল্ড পর্যায়গুলিতেও সদৃশ ফাইলগুলি পরীক্ষা করে দেখেছি, তবে কোনও নকল ফাইল নেই।
আমি এই সমস্যাটি পেয়েছি কারণ আমি অলসভাবে একটি পদ্ধতির বাইরে আমার .m এর মধ্যে একটি ভেরিয়েবল সংজ্ঞা দিচ্ছিলাম, তারপরে অন্য .m ফাইলে আমি কোনও পদ্ধতির বাইরে একই নামের সাথে অন্য ভেরিয়েবলটি সংজ্ঞায়িত করছিলাম। এটি বিশ্বব্যাপী ভেরিয়েবল নামের সদৃশ ইস্যু তৈরি করছিল।
আমি এই ত্রুটিটি সমাধান করতে সক্ষম হয়েছি যা বলেছিল "আর্কিটেকচার আর্মভি 7 এর জন্য 158 সদৃশ প্রতীক, আর্কিটেকচার আর্ম 64 এর জন্য 158 সদৃশ প্রতীক" --- যদি আপনি এটিও পেয়ে যাচ্ছেন তবে এর অর্থ আপনি একটি ফাইল সংকলন করার চেষ্টা করছেন যা আমদানি করছে বা সি ++ কোড বা ফাইলগুলির রেফারেন্স সহ একটি কাঠামো বা স্থিতাগার লাইব্রেরি উত্তরাধিকারসূত্রে প্রাপ্ত। এটি পরিচালনা করার একটি সহজ উপায় হ'ল আপনার .m ফাইলের প্রসারকে .mm এ পরিবর্তন করা। আপনি যদি ওফেক্টিভ সি ব্যবহার করেন তবে সুইফটে নিশ্চিত না হয়ে এটি কীভাবে পরিচালিত হয়।
এছাড়াও আপনার বিল্ড সেটিংসে - আপনি "অন্যান্য লিঙ্কার পতাকাগুলি" -lc ++ এ আপডেট করতে পারেন
Plz পরিবর্তন সেটিং।
পদক্ষেপ 1: টার্গেটগুলিতে যান -> সেটিংস তৈরি করুন -> কোনও সাধারণ ব্লক নেই -> না
পদক্ষেপ 2: টার্গেটগুলিতে যান -> সেটিংস তৈরি করুন -> পরীক্ষাযোগ্যতা সক্ষম করুন -> না