Conditional compile when running in Simulator as opposed to on a device

后端 未结 3 477
[愿得一人]
[愿得一人] 2021-02-01 03:06

Is there a compiler directive I can use to compile a different line of code when targetting the simulator as opposed to my device. Something like:

# IF SIMULATOR         


        
相关标签:
3条回答
  • 2021-02-01 03:56
    #if TARGET_IPHONE_SIMULATOR
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    #else
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    #endif
    
    0 讨论(0)
  • 2021-02-01 03:56

    Update: (Deprecated/Obsolete) This only worked for a few years, and does not work any more. (10+ years later)

    For the record, here's another method which Apple uses in some of their official Sample 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
    
    0 讨论(0)
  • 2021-02-01 03:57

    For those looking for a modern Swift solution, the (new) platform condition targetEnvironment provides the definitive answer here. For instance:

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

    The target environment platform condition feature was introduced by SE-0190 and is available since Swift 4.1.

    0 讨论(0)
提交回复
热议问题