React Native 0.29.0版本iOS端BundleURL加载要领

React Native iOS在0.29.0版本中BundleURL加载要领做了严重转变,新增了RCTBundleURLProvider单例类特地处置惩罚BundleURL,运用NSUserDefaults保留设置信息。

默许加载体式格局

在Debug形式下,实行react-native-xcode.sh编译脚本会自动猎取当前网卡en0的IP地点,并打入App包中一个设置文件ip.txt,App运转时会读取ip文件,自动天生Developer Server URL,经由过程这类加载体式格局,我们不再须要手动去把”localhost”改成Mac的IP了,每次编译都邑读取当前最新的IP。

if [[ "$CONFIGURATION" = "Debug" && "$PLATFORM_NAME" != "iphonesimulator" ]]; then
  PLISTBUDDY='/usr/libexec/PlistBuddy'
  PLIST=$TARGET_BUILD_DIR/$INFOPLIST_PATH
  IP=$(ipconfig getifaddr en0)
  $PLISTBUDDY -c "Add NSAppTransportSecurity:NSExceptionDomains:localhost:NSTemporaryExceptionAllowsInsecureHTTPLoads bool true" $PLIST
  $PLISTBUDDY -c "Add NSAppTransportSecurity:NSExceptionDomains:$IP.xip.io:NSTemporaryExceptionAllowsInsecureHTTPLoads bool true" $PLIST
  echo "$IP.xip.io" > "$DEST/ip.txt"
fi

非Debug形式时,没有ip.txt文件,会直接读取当地jsbundle文件,和之前版本的Load from pre-bundled file on disk体式格局雷同。
然则我经由测试发明,en0是Wifi的收集,假如封闭Wifi,运用网线端口衔接收集,en0默许就是inactive,没有对应的IP。

手动设置IP

RCTBundleURLProvider在接口中暴露了jsLocation属性,能够经由过程setJsLocation手动设置IP。

NSURL *jsCodeLocation;

[[RCTBundleURLProvider sharedSettings] setDefaults];
#if DEBUG
[[RCTBundleURLProvider sharedSettings] setJsLocation:@"192.168.1.101"];
#endif
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

另须要在Info设置NSAppTransportSecurityNSAllowsArbitraryLoadstrue即可。

总之

RCTBundleURLProvider类做了一些音讯和属性的封装,能够经由过程推断是不是DEBUG环境然后做差别的设置。

    原文作者:mingkun
    原文地址: https://segmentfault.com/a/1190000005900586
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞