在Obj-C iOS应用程序中,我可以使用#if (TARGET_IPHONE_SIMULATOR)
编写仅限模拟器的代码。
在本地反应中,我可以使用:
if (__DEV__) {
.. do something special
}
..检测开发模式。
我们可以使用Platform.OS === 'ios'
来检测平台(Android / iOS)。
有关详细信息,请参阅此处Platform Docs
但是我们如何检测应用程序是否在模拟器中运行?
我问的原因是我的应用程序使用相机扫描条形码,iOS模拟器不支持此功能。
答案 0 :(得分:51)
您可以使用react-native-device-info轻松完成此操作,如下所示:
import DeviceInfo from 'react-native-device-info'
isSimulator() {
return DeviceInfo.isEmulator();
},
答案 1 :(得分:21)
我能想到的最简单的解决方案,即不需要创建本机模块(或修改现有模块),将此参数作为反应组件属性传递。
在初始化AppDelegate
的{{1}}中,您可以像在常规iOS应用中一样检查它是否是模拟器;然后将此信息作为其RCTRootView
:
initialProperties
现在,您可以通过反应组件的道具在JavaScript中访问它:
BOOL isSimulator = NO;
#if TARGET_IPHONE_SIMULATOR
isSimulator = YES;
#endif
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"ReactDemo"
initialProperties:@{@"isSimulator": @(isSimulator)}
launchOptions:launchOptions];
在Android上,this.props.isSimulator
扩展MainActivity
你可以使用类似的方法:
ReactActivity
答案 2 :(得分:10)
如果您要构建CRNA / Expo应用,可以使用Expo.Constants.isDevice
https://docs.expo.io/versions/latest/sdk/constants/#constantsisdevice
import { Constants } from 'expo'
//....
console.log(Constants.isDevice) // => false if simulator
答案 3 :(得分:6)
使用react-native-device-info,您可以获得以下数据(在模拟器上执行):
Function MSumProd(a As Integer, b As Integer, c As Integer, d As Integer)
Dim n As Long
Dim Lastrow As Long, lRow As Long
' find last row with data in Column with passed integer 'b'
Lastrow = Range(Cells(a, b), Cells(a, b)).CurrentRegion.Rows.Count
' reset SUMPRODUCT value
n = 0
' loop through all rows with data in column 'b'
For lRow = a To Lastrow
n = n + Cells(lRow, b).Value * Cells(c, d).Value
' I think you are trying to advance the row (and not column)
' Therefore, you need to advance a and not b
' In this code I advance the row with lROw in the "For" loop
c = c + 1 ' can be removed, since is advanced as with lRow
Next lRow
MSumProd = n
End Function
答案 4 :(得分:1)
目前,没有任何方法可以查看您是否在JS中使用模拟器运行。
我建议添加条件TARGET_IPHONE_SIMULATOR
以检入您的本机代码(如果您编写了自己的模块)。或者也许使用第三方模块,如果在模拟器中没有渲染相机...即:react-native-camera:https://github.com/lwansbrough/react-native-camera/search?utf8=%E2%9C%93&q=TARGET_IPHONE_SIMULATOR
答案 5 :(得分:0)
import getHostForRN from 'rn-host-detect';
const IS_SIMULATOR = getHostForRN('127.0.0.1') == "localhost";
这可以使我的iOS模拟器与实际设备区分开来,因为模拟器返回localhost
,而iOS设备返回127.0.0.1
。尚未在Android上进行测试,但请告知它是否对您有帮助。