30/01/19 আপডেট
যদিও এই উত্তরটি কার্যকর হতে পারে, স্থির চেকের জন্য প্রস্তাবিত সমাধান (বেশ কয়েকটি অ্যাপল ইঞ্জিনিয়ারদের দ্বারা স্পষ্ট হিসাবে) আইওএস সিমুলেটারকে লক্ষ্য করে একটি কাস্টম সংকলক পতাকা সংজ্ঞায়িত করা। এটি কীভাবে করবেন সে সম্পর্কে বিশদ নির্দেশাবলীর জন্য, @ এমবেলস্কির উত্তর দেখুন ।
আসল উত্তর
আপনার যদি একটি স্ট্যাটিক চেক প্রয়োজন হয় (উদাহরণস্বরূপ / অন্যথায় রানটাইম নয়) আপনি সরাসরি সিমুলেটরটি সনাক্ত করতে পারবেন না, তবে আপনি ডেস্কটপ আর্কিটেকচারে আইওএস নিম্নলিখিত শনাক্ত করতে পারেন
#if (arch(i386) || arch(x86_64)) && os(iOS)
...
#endif
সুইফট 4.1 সংস্করণ পরে
সর্বশেষ ব্যবহার, এখন সরাসরি সকল অবস্থার জন্য সকল অবস্থার সিমুলেটরগুলির জন্য কেবলমাত্র একটি শর্ত প্রয়োগ করতে হবে -
#if targetEnvironment(simulator)
// your simulator code
#else
// your real device code
#endif
আরও স্পষ্টতার জন্য, আপনি সুইফ্ট প্রস্তাবটি পরীক্ষা করতে পারেন SE-0190
পুরানো সংস্করণের জন্য -
স্পষ্টতই, এটি কোনও ডিভাইসে মিথ্যা, তবে এটি iOS সিমুলেটারের ক্ষেত্রে সত্য হিসাবে ফিরে আসে ডকুমেন্টেশনে :
কোডটি 32 – বিট আইওএস সিমুলেটারের জন্য সংকলন করা হলে আর্ক (i386) বিল্ড কনফিগারেশনটি সত্য হয়।
আপনি যদি আইওএস ব্যতীত অন্য কোনও সিমুলেটারের জন্য বিকাশ করে থাকেন তবে আপনি কেবলমাত্র os
প্যারামিটারটি পরিবর্তিত করতে পারেন : যেমন
ওয়াচওএস সিমুলেটর সনাক্ত করুন
#if (arch(i386) || arch(x86_64)) && os(watchOS)
...
#endif
টিভিওএস সিমুলেটর সনাক্ত করুন
#if (arch(i386) || arch(x86_64)) && os(tvOS)
...
#endif
অথবা, এমনকি কোনও সিমুলেটর সনাক্ত করুন
#if (arch(i386) || arch(x86_64)) && (os(iOS) || os(watchOS) || os(tvOS))
...
#endif
পরিবর্তে যদি আপনি রানটাইম চেক দিয়ে ঠিক থাকেন তবে আপনি TARGET_OS_SIMULATOR
ভেরিয়েবলটি পরীক্ষা করতে পারেন (বাTARGET_IPHONE_SIMULATOR
আইওএস 8 এবং নীচে) , যা সিমুলেটারে সত্য।
অনুগ্রহ করে লক্ষ্য করুন যে এটি প্রিপ্রোসেসর পতাকা ব্যবহারের চেয়ে আলাদা এবং কিছুটা বেশি সীমাবদ্ধ। উদাহরণস্বরূপ আপনি যেখানে এটি ব্যবহার করতে পারবেন না aif/else
সিন্ট্যাক্টিক্যালি অবৈধ (যেমন ফাংশনগুলির স্কোপের বাইরে)।
উদাহরণস্বরূপ বলুন যে আপনি ডিভাইস এবং সিমুলেটারে বিভিন্ন আমদানি করতে চান। ডায়নামিক চেক দিয়ে এটি অসম্ভব, যদিও এটি একটি স্থির চেকের সাথে তুচ্ছ।
#if (arch(i386) || arch(x86_64)) && os(iOS)
import Foo
#else
import Bar
#endif
এছাড়াও, যেহেতু পতাকাটি একটি 0
বা একটি দিয়ে প্রতিস্থাপন করা হয়েছে1
সুইফ্ট প্রিপ্রোসেসর দ্বারা , আপনি যদি সরাসরি তা if/else
প্রকাশের ক্ষেত্রে ব্যবহার করেন তবে সংকলকটি অ্যাক্সেসযোগ্য কোড সম্পর্কে একটি সতর্কতা উত্থাপন করবে।
এই সতর্কতার আশেপাশে কাজ করার জন্য, অন্য একটি উত্তর দেখুন।