Условная компиляция при запуске в симуляторе, а не на устройстве - PullRequest
30 голосов
/ 14 мая 2009

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

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

EDIT

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

Ответы [ 3 ]

54 голосов
/ 14 мая 2009
#if TARGET_IPHONE_SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#else
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#endif
11 голосов
/ 15 мая 2009

Обновление: (устарело / устарело). Это работало всего несколько лет и больше не работает. (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
5 голосов
/ 31 июля 2018

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

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

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

...