الترجمة الشرطية عند التشغيل في Simulator بدلاً من تشغيله على الجهاز

StackOverflow https://stackoverflow.com/questions/864920

سؤال

هل هناك توجيه مترجم يمكنني استخدامه لتجميع سطر مختلف من التعليمات البرمجية عند استهداف جهاز المحاكاة بدلاً من جهازي.شيء مثل:

# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END

يحرر

رابط مباشر للمستندات.

هل كانت مفيدة؟

المحلول

#if TARGET_IPHONE_SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#else
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#endif

نصائح أخرى

تحديث:(مهمل/قديم) لم يعمل هذا إلا لبضع سنوات، ولم يعد يعمل بعد الآن.(بعد أكثر من 10 سنوات)

وللعلم، إليك طريقة أخرى تستخدمها شركة Apple في بعض نماذج التعليمات البرمجية الرسمية الخاصة بها:

#if TARGET_CPU_ARM
  // Only executes on an iPhone or iPod touch device
  [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#else
  // Only executes on the Simulator
  [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#endif

لمن يبحث عن حل سويفت حديث، حالة النظام الأساسي (الجديد). targetEnvironment يقدم الجواب النهائي هنا.على سبيل المثال:

#if targetEnvironment(simulator)
self.imagePicker.sourceType = .photoLibrary
#else
self.imagePicker.sourceType = .camera
#endif 

ال حالة منصة البيئة المستهدفة تم تقديم الميزة بواسطة SE-0190 ومتاح منذ ذلك الحين سويفت 4.1.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top