الترجمة الشرطية عند التشغيل في Simulator بدلاً من تشغيله على الجهاز
-
21-08-2019 - |
سؤال
هل هناك توجيه مترجم يمكنني استخدامه لتجميع سطر مختلف من التعليمات البرمجية عند استهداف جهاز المحاكاة بدلاً من جهازي.شيء مثل:
# 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.
لا تنتمي إلى StackOverflow