美文网首页
React Native 老版本配置环境踩坑

React Native 老版本配置环境踩坑

作者: 超短线小k | 来源:发表于2019-10-28 21:38 被阅读0次

    最近在学习React Native 参考官网教程 使用最新版本(0.61) 基本没遇到什么问题
    尝试使用老版本 0.58 在构建一遍 踩到了许多坑 在此记录一下

    1. react-native run-ios 无法启动模拟器
    // 遇到问题
    Could not find iPhone X simulator
    
    Error: Could not find iPhone X simulator
        at Promise.then.udid.udid (/Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/react-native/local-cli/runIOS/runIOS.js:149:13)
        at new Promise (<anonymous>)
        at runOnSimulator (/Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/react-native/local-cli/runIOS/runIOS.js:134:10)
        at Object.runIOS [as func] (/Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/react-native/local-cli/runIOS/runIOS.js:106:12)
        at /Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/react-native/local-cli/cliEntry.js:117:22
    
    // 解决方案
    // 找到 node_modules/react-native/local-cli/runIOS/findMatchingSimulator.js 注释掉以下代码
    if (
      simulator.availability !== '(available)' &&
      simulator.isAvailable !== 'YES'
    ) {
      continue;
    }
    
    // 重新 react-native run-ios 解决
    
    2. ios/build/ModuleCache.noindex/GDNYEK3GNWBZ/WebKit-3M3AFHBPPA3AE-1a58cd7a.pcm.tmp' 解决完上一个模拟器问题之后 继续执行 出现这个报错看问题描述貌似是备份之类的出错 取消再次执行就不报错了
    // 解决完上一个模拟器问题之后 继续执行 出现这个报错
    Looking for JS files in
       /Users/sobot/Documents/react-native-app/rn_0_58_4 
    
    Loading dependency graph...events.js:187
          throw er; // Unhandled 'error' event
          ^
    
    Error: ENOENT: no such file or directory, lstat '/Users/sobot/Documents/react-native-app/rn_0_58_4/ios/build/ModuleCache.noindex/GDNYEK3GNWBZ/WebKit-3M3AFHBPPA3AE-1a58cd7a.pcm.tmp'
    Emitted 'error' event on FSEventsWatcher instance at:
        at Walker.emit (events.js:210:5)
        at /Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/walker/lib/walker.js:52:12
        at callback (/Users/sobot/Documents/react-native-app/rn_0_58_4/node_modules/graceful-fs/polyfills.js:295:20)
        at FSReqCallback.oncomplete (fs.js:158:21) {
      errno: -2,
      code: 'ENOENT',
      syscall: 'lstat',
      path: '/Users/sobot/Documents/react-native-app/rn_0_58_4/ios/build/ModuleCache.noindex/GDNYEK3GNWBZ/WebKit-3M3AFHBPPA3AE-1a58cd7a.pcm.tmp'
    }
    Process terminated. Press <enter> to close the window
    
    // 解决方案 取消继续执行react-native run-ios
    
    3. 模拟器红屏 Unknown argument type 'attribute' in method -[RCTAppState getCurrentAppState:error:]. Extend RCTConvert to support this type.
    Unknown argument type '__attribute__' in method -[RCTAppState getCurrentAppState:error:]. Extend RCTConvert to support this type.
    
    -[RCTModuleMethod processMethodSignature]
        RCTModuleMethod.mm:375
    -[RCTModuleMethod invokeWithBridge:module:arguments:]
    facebook::react::invokeInner(RCTBridge*, RCTModuleData*, unsigned int, folly::dynamic const&)
    facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)::$_0::operator()() const
    invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)
    _dispatch_call_block_and_release
    _dispatch_client_callout
    _dispatch_main_queue_callback_4CF
    __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
    __CFRunLoopRun
    CFRunLoopRunSpecific
    GSEventRunModal
    UIApplicationMain
    main
    start
    0x0
    
    // 解决办法
    node_modules/react-native/React/Base/RCTModuleMethod.mm 91行
    
    static BOOL RCTParseUnused(const char **input)
    {
      return RCTReadString(input, "__unused") ||
             RCTReadString(input, "__attribute__((__unused__))") || // 增加这行解决
             RCTReadString(input, "__attribute__((unused))");
    }
    
    4. 安装react-native-video 报错 TypeError: undefined is not an object (evaluating 'RCTVideoInstance.Constants')
    TypeError: undefined is not an object (evaluating 'RCTVideoInstance.Constants')
    
    This error is located at:
        in Video (at App.js:26)
        in RCTView (at View.js:45)
        in View (at App.js:25)
        in App (at renderApplication.js:34)
        in RCTView (at View.js:45)
        in View (at AppContainer.js:98)
        in RCTView (at View.js:45)
        in View (at AppContainer.js:115)
        in AppContainer (at renderApplication.js:33)
    
    render
        Video.js:266:42
    finishClassComponent
        ReactNativeRenderer-dev.js:11610:21
    updateClassComponent
        ReactNativeRenderer-dev.js:11538:4
    performUnitOfWork
        ReactNativeRenderer-dev.js:16075:21
    workLoop
        ReactNativeRenderer-dev.js:16115:41
    renderRoot
        ReactNativeRenderer-dev.js:16219:15
    performWorkOnRoot
        ReactNativeRenderer-dev.js:17198:17
    performWork
        ReactNativeRenderer-dev.js:17099:24
    performSyncWork
        ReactNativeRenderer-dev.js:17060:14
    requestWork
        ReactNativeRenderer-dev.js:16925:19
    scheduleWork
        ReactNativeRenderer-dev.js:16724:16
    scheduleRootUpdate
        ReactNativeRenderer-dev.js:17413:15
    render
        ReactNativeRenderer-dev.js:18191:20
    renderApplication
        renderApplication.js:59:34
    run
        AppRegistry.js:101:10
    runApplication
        AppRegistry.js:195:26
    __callFunction
        MessageQueue.js:366:47
    <unknown>
        MessageQueue.js:106:26
    __guard
        MessageQueue.js:314:10
    callFunctionReturnFlushedQueue
        MessageQueue.js:105:17
    callFunctionReturnFlushedQueue
        [native code]:0
    
    解决方案
    1. cd ios // 进入ios目录
    2. pod init ./rn_0_58_4.xcodeproj/ // 初始化cocospods 后面的xcodeproj是当前路径下的
    3. 编辑Podfile
    
    // 使用以下内容覆盖Podfile
    
    project './rn_0_58_4.xcodeproj/'
    
    # Uncomment the next line to define a global platform for your project
    platform :ios, '9.0'
    
    target 'rn_0_58_4' do
      # Comment the next line if you don't want to use dynamic frameworks
      # use_frameworks!
      pod 'React', :path => '../node_modules/react-native/'
      pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
      pod 'react-native-video', :path => '../node_modules/react-native-video/react-native-video.podspec'
    
      # Pods for rn_0_58_4
    end
    
    4. cd .. // 回到项目根目录
    5. react-native link react-native-video // 链接到native
    6. cd ios //
    7. pod install --verbose // 安装原生依赖 
    8. react-native run-ios // 运行成功
    
    
    5. run-ios 时候一直下载内容 是因为 /User/username/.rncache/ 缺少版本需要的依赖
    // 这块改路径版本
    https://github.com/facebook/react-native/blob/0.58-stable/scripts/ios-install-third-party.sh
    
    最下面会有下载地址 手工翻墙下载就可以了
    fetch_and_unpack glog-0.3.5.tar.gz https://github.com/google/glog/archive/v0.3.5.tar.gz 61067502c5f9769d111ea1ee3f74e6ddf0a5f9cc "\"$SCRIPTDIR/ios-configure-glog.sh\""
    fetch_and_unpack double-conversion-1.1.6.tar.gz https://github.com/google/double-conversion/archive/v1.1.6.tar.gz 1c7d88afde3aaeb97bb652776c627b49e132e8e0
    fetch_and_unpack boost_1_63_0.tar.gz https://github.com/react-native-community/boost-for-react-native/releases/download/v1.63.0-0/boost_1_63_0.tar.gz c3f57e1d22a995e608983effbb752b54b6eab741
    fetch_and_unpack folly-2018.10.22.00.tar.gz https://github.com/facebook/folly/archive/v2018.10.22.00.tar.gz f70a75bfeb394363d2049a846bba118ffb3b368a
    

    相关文章

      网友评论

          本文标题:React Native 老版本配置环境踩坑

          本文链接:https://www.haomeiwen.com/subject/wjcivctx.html