Reaccionar Nativo: ¿Cómo puedo detectar si mi código se está ejecutando en el Simulador?

En una aplicación Obj-C iOS puedo usar #if (TARGET_IPHONE_SIMULATOR) para escribir código solo para el simulador.

En reacción nativa puedo utilizar:

 if (__DEV__) { .. do something special } 

.. para detectar el modo de desarrollo.

Podemos usar Platform.OS === 'ios' para detectar la plataforma (Android / iOS). Vea aquí para más información

Pero ¿cómo podemos detectar si la aplicación se está ejecutando en el simulador?

La razón por la que pregunto es que mi aplicación utiliza la cámara para escanear códigos de barras, y esto no es compatible con el iOS Simulator.

La solución más fácil que puedo pensar, que no requiere la creación de un módulo nativo (o modificar uno existente), sería pasar este parámetro como una propiedad de componente de reacción.

En tu AppDelegate donde se inicializa el RCTRootView , comprueba si es el simulador como lo harías en una aplicación de iOS regular; a continuación, pasar esta información a la vista de la raíz de reacción como su initialProperties :

  BOOL isSimulator = NO; #if TARGET_IPHONE_SIMULATOR isSimulator = YES; #endif RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"ReactDemo" initialProperties:@{@"isSimulator": @(isSimulator)} launchOptions:launchOptions]; 

Ahora puedes acceder a ella en el JavaScript a través de los accesorios de tu componente reactivo:

 this.props.isSimulator 

En Android, en MainActivity que extiende ReactActivity puede utilizar un enfoque similar:

 public boolean isEmulator() { return Build.FINGERPRINT.startsWith("generic") || Build.FINGERPRINT.startsWith("unknown") || Build.MODEL.contains("google_sdk") || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK built for x86") || Build.MANUFACTURER.contains("Genymotion") || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) || "google_sdk".equals(Build.PRODUCT); } @Override protected Bundle getLaunchOptions() { Bundle opts = new Bundle(); opts.putBoolean("isEmulator", isEmulator()); return opts; } 

Puede hacerlo fácilmente con reaccionar-nativo-dispositivo-info , así:

 import DeviceInfo from 'react-native-device-info' isSimulator() { return DeviceInfo.isEmulator(); }, 

Usando reaccionar-nativo-dispositivo-info usted puede conseguir los datos siguientes (ejecutados en un simulador):

 getUniqueID: DB71DCB5-6BB0-497B-BE9E-A02BCC1235B7 getInstanceID: undefined getDeviceId: x86_64 getManufacturer: Apple getModel: Simulator getBrand: Apple getSystemName: iOS getSystemVersion: 10.1 getBundleId: org.reactjs.native.example.project getBuildNumber: 1 getVersion: 1.0 getReadableVersion: 1.0.1 getDeviceName:MacBook Pro getUserAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72 getDeviceLocale: en getDeviceCountry: US getTimezone: America/Panama isEmulator: true isTablet: false 

Actualmente, no hay ninguna forma de ver si se está ejecutando desde un simulador en JS.

Yo sugeriría agregar el TARGET_IPHONE_SIMULATOR condicional para verificar su código nativo (si escribió su propio módulo). O tal vez utilizar un módulo de terceros que no hace la cámara si en un simulador … es decir: reaccionar-nativo de la cámara: https://github.com/lwansbrough/react-native-camera/search?utf8=% E2% 9C% 93 & q = TARGET_IPHONE_SIMULATOR

  • Reinicie de forma programática una aplicación de React Native
  • Alguien éxito en el uso de la imagen local en reaccionar nativo para Android?
  • Cambiar el nombre del paquete para Android en React Native
  • Reaccionar androide nativo: Cómo guardar el estado en la rotación o la orientación de la pantalla
  • Cómo disminuir React-Native Android tamaño de la aplicación
  • No se puede ejecutar "ANY" reaccionar proyecto ejemplo nativo
  • React-native lento en Android 5.1.1 pero grande en viejo 5.1
  • Reaccionar-Nativo Android PushNotifications
  • Cómo implementar notificaciones push para android en React Native
  • Ionic2 + Angular2 o Reactivo-nativo?
  • Color global de "Texto" y color de texto "TextInput"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.