是自己的理解,可能理解的还不够通透,仅供自己参考使用。
React Native集成到已有项目中以及 代码发布
这里只记录主要的步骤:
2.将react-native项目先放在和自己原生项目同一级目录下。然后利用cocopods进行引用。
podfile文件里写下如下代码:pod 'React',:path => '../zm_react_native(替换成自己的react native名字)/node_modules/react-native',:subspecs => ['Core',
'RCTText',
'RCTNetwork',
'RCTWebSocket',# needed for debugging
# Add any other subspecs you want to use in your project
]
pod 'CodePush',:path => '../zm_react_native/node_modules/react-native-code-push',:subspecs => ['Core']
//注意,我这里之所以这样写,是因为项目里已经有了一个SSZipArchive第三方。如果没有这个第三方使用:pod 'CodePush',:path => '../node_modules/react-native-code-push'
然后执行pod install 或者pod update
3.接下来就是使用了-初始化控件
#ifdef DEBUG
NSURL *jsCodeLocation = [NSURL
URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios"];
这里是你在调试模式下的时候使用。使用之前先要在react-native目录下执行nam start (意思是启动react native serive)
#else
NSURL * jsCodeLocation = [CodePush bundleURL];
这是使用codePush提供的bundleURL。前提是你本地已经有了js包。
当然要利用codePush进行代码push,首先要先利用终端,进行code-push命令注册添加应用,它会返回给你两个key,一个是开发时候使用的key(Staging),一个是发布时候用的key(Production)。这个key需要注册到项目的info里面:添加CodePushDeploymentKey字段,后面的value是string类型,填写key。
注意的是:需要先在react native目录下,终端执行:react-nativebundle--entry-fileindex.ios.js--platformios--devfalse--bundle-output./ios_output/main.jsbundle--assets-dest./ios_output ,然后把这个ios_output下的文件,引用到我们的原生项目里。因为我们的项目是使用本地的js包。当codePush服务器上有新的js包的时候,会去拉取到本地再使用。(当然,我们需要在index.ios.js里面写上codePush.sync()同步的方法,不然我们怎么去触发拉取最新的js包)
#endif
RCTRootView *rootView =
[[RCTRootView alloc] initWithBundleURL : jsCodeLocation
moduleName : @"LotsOfGreetings"
// 这个LotsOfGreetings可以理解为约定好的模块类型,在react-native目录下的index.ios.js里面,需要注册这个模块
initialProperties :nil
launchOptions : nil];