la compilation conditionnelle lors de l'exécution dans le simulateur, par opposition à un dispositif
-
21-08-2019 - |
Question
Y at-il une directive de compilation que je peux utiliser pour compiler une autre ligne de code lorsque le simulateur ciblant par opposition à mon appareil. Quelque chose comme:
# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END
EDIT
La solution
#if TARGET_IPHONE_SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#else
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#endif
Autres conseils
Mise à jour: (Obsolète / Obsolète) Cela ne a travaillé pendant quelques années, et ne fonctionne plus. (10 ans plus tard)
Pour mémoire, voici une autre méthode Apple utilise dans certains de leurs fonctions officielles Exemple de code:
#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
Pour ceux qui recherchent une solution Swift moderne, le (nouveau) état de la plate-forme fournit la réponse targetEnvironment
définitive ici. Par exemple:
#if targetEnvironment(simulator)
self.imagePicker.sourceType = .photoLibrary
#else
self.imagePicker.sourceType = .camera
#endif
état environnement plateforme cible fonctionnalité a été introduite par sE-0190 et est disponible depuis Swift 4.1 .