compilazione condizionale quando eseguito in simulatore anziché su un dispositivo
-
21-08-2019 - |
Domanda
C'è una direttiva del compilatore posso usare per compilare una diversa linea di codice quando il simulatore rivolte al contrario di mio dispositivo. Qualcosa di simile:
# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END
Modifica
Soluzione
#if TARGET_IPHONE_SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#else
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#endif
Altri suggerimenti
Aggiornamento: (deprecato / obsoleto) Questo ha funzionato solo per pochi anni, e non funziona più. (10 anni dopo)
Per la cronaca, ecco un altro metodo che Apple utilizza in alcuni dei loro codice di esempio ufficiale:
#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
Per chi cerca una soluzione rapida moderna, il (nuovo) Condizioni della piattaforma targetEnvironment
fornisce la risposta definitiva qui. Per esempio:
#if targetEnvironment(simulator)
self.imagePicker.sourceType = .photoLibrary
#else
self.imagePicker.sourceType = .camera
#endif
Condizioni della piattaforma ambiente di destinazione caratteristica è stata introdotta da SE-0190 ed è disponibile dal Swift 4.1 .