Подтвердить что ты не робот

Условная компиляция при работе в Simulator, а не на устройстве

Есть ли директива компилятора, которую я могу использовать для компиляции другой строки кода при настройке симулятора в отличие от моего устройства. Что-то вроде:

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

ИЗМЕНИТЬ

Прямая ссылка на документы

4b9b3361

Ответ 1

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

Ответ 2

Для записи здесь используется другой метод, который 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

Ответ 3

Для тех, кто ищет современное решение Swift, (новая) условие платформы targetEnvironment дает здесь targetEnvironment ответ. Например:

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

Функция состояния целевой платформы среды была представлена SE-0190 и доступна начиная с Swift 4.1.