1
0
Code Issues Pull Requests Packages Projects Releases Wiki Activity GitHub Gitee
react-native-pushy/docs/guide.md
2019-09-05 18:55:01 +08:00

219 lines
6.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 快速入门-准备工作
首先你应该有一个基于React Native开发的应用我们把具有package.json的目录叫做你的"应用根目录"。
如果你还没有初始化应用,请参阅[开始使用React Native](https://reactnative.cn/docs/getting-started.html#content)。
所以我们也假设你已经拥有了开发React Native应用的一切环境包括`Node.js`、`npm`、`XCode`、`Android SDK`等等。
## 安装
在你的项目根目录下运行以下命令:
```bash
npm i -g react-native-update-cli
npm i react-native-update
```
> 如果下载极慢或者显示网络失败,请设置使用淘宝镜像`npx nrm use taobao`
如果你的RN版本 >= 0.60请在iOS目录下执行:
```bash
pod install
```
如果你的RN版本 < 0.60那么还需要[手动link](#一手动link)
<details>
<summary>
如果你的RN版本比较老< 0.46请点击这里的注意事项
</summary>
如果你的RN版本比较老请按下面表格尝试老一些的版本但这些版本我们已不再维护不能保证可以使用
| React Native版本 | react-native-update版本 |
| ---------------- | ----------------------- |
| 0.26及以下 | 1.0.x |
| 0.27 - 0.28 | 2.x |
| 0.29 - 0.33 | 3.x |
| 0.34 - 0.45 | 4.x |
安装命令示例:
```
npm i react-native-update@4.x
```
如果RN的版本是0.45及以下,你还必须安装[Android NDK](http://androiddevtools.cn)版本最好选用r10e并设置环境变量`ANDROID_NDK_HOME`指向你的NDK根目录(例如`/Users/tdzl2003/Downloads/android-ndk-r10e`)。
</details>
请记得一定要重新编译react-native run-ios或run-android命令编译或在Xcode/Android Studio中重新编译
## 一、手动link
如果RN版本 >= 0.60则可以跳过此步骤
### iOS
<details>
<summary>RN < 0.60且使用CocoaPods推荐</summary>
1. 在ios/Podfile中添加
```
pod 'react-native-update', path: '../node_modules/react-native-update'
```
2. 在项目的ios目录下运行`pod install`
3. 重新编译
</details>
<details>
<summary>RN < 0.60且不使用CocoaPods</summary>
1. 在XCode中的Project Navigator里,右键点击`Libraries` ➜ `Add Files to [你的工程名]`
2. 进入`node_modules` ➜ `react-native-update``ios 并选中 `RCTHotUpdate.xcodeproj`
3. 在XCode中的project navigator里,选中你的工程,在 `Build Phases``Link Binary With Libraries` 中添加 `libRCTHotUpdate.a`
4. 继续在`Build Settings`里搜索`Header Search Path`,添加$(SRCROOT)/../node_modules/react-native-update/ios
5. 重新编译
</details>
### Android
<details>
<summary>RN < 0.60</summary>
1. 在`android/settings.gradle`中添加如下代码:
```
include ':react-native-update'
project(':react-native-update').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-update/android')
```
2. 在`android/app/build.gradle`的 dependencies 部分增加如下代码:
```
implementation project(':react-native-update')
```
3. 打开`android/app/src/main/java/[...]/MainApplication.java`,
- 在文件开头增加 `import cn.reactnative.modules.update.UpdatePackage;`
- 在`getPackages()` 方法中增加 `new UpdatePackage()`(注意上一行可能要增加一个逗号)
</details>
## 二、配置Bundle URL
注意此步骤无论任何版本,目前都需要手动配置。
### iOS
1. (RN >= 0.60或者使用CocoaPods集成此步可跳过)在工程target的Build Phases->Link Binary with Libraries中加入`libz.tbd`、`libbz2.1.0.tbd`
2. 在你的AppDelegate.m文件中增加如下代码
```objective-c
// ... 其它代码
#import "RCTHotUpdate.h"
// 如果RN版本 >= 0.59修改sourceURLForBridge
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
 // 非DEBUG情况下替换为热更新bundle
return [RCTHotUpdate bundleURL];
#endif
}
// 如果RN版本 < 0.59修改didFinishLaunchingWithOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#if DEBUG
 // 原来的jsCodeLocation保留在这里
 jsCodeLocation = ..........
#else
 // 非DEBUG情况下替换为热更新bundle
 jsCodeLocation = [RCTHotUpdate bundleURL];
#endif
// ... 其它代码
}
```
### Android
在MainApplication中增加如下代码
```java
// ... 其它代码
// 请注意不要少了这句import
import cn.reactnative.modules.update.UpdateContext;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected String getJSBundleFile() {
return UpdateContext.getBundleUrl(MainApplication.this);
}
// ... 其它代码
}
}
```
## 三、登录与创建应用
首先请在<https://update.reactnative.cn>注册帐号,然后在你的项目根目录下运行以下命令:
```bash
$ pushy login
email: <输入你的注册邮箱>
password: <输入你的密码>
```
这会在项目文件夹下创建一个`.update`文件注意不要把这个文件上传到Git等CVS系统上。你可以在`.gitignore`末尾增加一行`.update`来忽略这个文件。
登录之后可以创建应用。注意iOS平台和安卓平台需要分别创建
```bash
$ pushy createApp --platform ios
App Name: <输入应用名字>
$ pushy createApp --platform android
App Name: <输入应用名字>
```
> 两次输入的名字可以相同,这没有关系。
如果你已经在网页端或者其它地方创建过应用,也可以直接选择应用:
```bash
$ pushy selectApp --platform ios
1) 鱼多多(ios)
2) 招财旺(ios)
Total 2 ios apps
Enter appId: <输入应用前面的编号>
```
选择或者创建过应用后,你将可以在文件夹下看到`update.json`文件,其内容类似如下形式:
```bash
{
"ios": {
"appId": 1,
"appKey": "<一串随机字符串>"
},
"android": {
"appId": 2,
"appKey": "<一串随机字符串>"
}
}
```
你可以安全的把`update.json`上传到Git等CVS系统上与你的团队共享这个文件它不包含任何敏感信息。当然他们在使用任何功能之前都必须首先输入`pushy login`进行登录。
至此应用的创建/选择就已经成功了。下一步,你需要给代码添加相应的功能,请参阅[添加热更新功能](guide2.md)