美文网首页其它技术点iOS 开发技巧iOS Developer
iOS拓展:iOS原生项目集成react-native过程记录

iOS拓展:iOS原生项目集成react-native过程记录

作者: Jabber_YQ | 来源:发表于2017-07-10 08:40 被阅读1030次

本篇文章记录了在已经创建好的原生项目上集成react-native的过程。

一、创建工程

我在桌面创建了一个工程,命名RNTest。

1_1.png

二、添加package.json文件

在RNTest目录下创建一个package.json或者直接从别的react-native项目中复制过来。

{
    "name": "RNTest",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "~15.4.1",
        "react-native": "0.42.0"
    },
    "devDependencies": {
        "babel-jest": "20.0.3",
        "babel-preset-react-native": "2.1.0",
        "jest": "20.0.4",
        "react-test-renderer": "~15.4.1"
    },
    "jest": {
        "preset": "react-native"
    }
}
2_1.png

三、安装react-native模块

在终端cd到项目目录,然后执行npm install

3_1.png 3_2.png

四、导入react-native框架

1.创建一个新的文件夹,命名为Librarys,到时候要把rn的项目拉进文件夹中。

4_1.png

2.把rn的项目拉进文件夹中

这里要拉的比较多也比较杂,先拉React.xcodeproj文件。(路径如图)

4_2.png

再拉node_modules/react-native/Libraries下的文件

4_3.png 4_4.png

3.Link Binary With Libraries中添加.a库

4_5.png

(点击+按钮 全部添加后,在删除tvOS的就好,最后别忘了加上libstdc++.tbd)
(ps:这里我漏删除了一个tvOS的静态库,导致运行出错,删了就行,懒得再截图了。。。)

4.在Edit Scheme的Build中添加React

向Edit Scheme的Build中添加React,并拖拽到最上位置,并取消勾选Parallelize Build选项。这一步很关键,因为项目需要先编译React.a文件。


4_6.png 4_7.png

五、最后的配置

Build SettingsOther Linker Flags设置为 -ObjC
Header Search Paths设置为/react-native/React路径,并设置为 recursive。

5_1.png

六、创建index.ios.js文件

创建index.ios.js文件,到时候,rn代码要写在这里。当然,放在node_modules同一个目录下就可以。

6_1.png

七、设置AppDelegate.h代码

这里是为了获得rn的代码,从而相互传递数据

#import "AppDelegate.h"
#import <React/RCTRootView.h>
#import <React/RCTBundleURLProvider.h>
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                        moduleName:@"RNTest"
                                                 initialProperties:nil
                                                     launchOptions:nil];
    rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = [[UIViewController alloc] init];
    self.window.rootViewController.view = rootView;
    
    [self.window makeKeyAndVisible];
    return YES;
}

也不一定要写在这里,可以放在需要使用rn的VC中。

八、使用了HTTPS协议进行传输

为了能上网,在info.plist文件中添加一个字典类型的key为App Transport Security Settings。。。不说了

九、运行

8_1.png

相关文章

网友评论

  • 邹邹_ZZ:pod管理有过程吗
  • AngusTing:刚好用到
  • 情商为0的程序猿:正好有这个需求,非常感谢楼主的奉献不然又要自己捣鼓1天了。
  • a84e831de4fc:太感谢了,虽然不是为了实现同一个目标,但是根据你写的解决了我自己的问题:smile:
    a84e831de4fc:@Jabber_YQ 对啊,时不时的来个满屏红,这感觉好爽
    Jabber_YQ:@houqq 这个rn可以说是一路的坑:blush: 祝好啊
  • 一抹远方:第五步结束出现
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    遍历stackoverflow无解 有办法解决吗?
    Jabber_YQ:@一抹远方 我这边版本太高确实会出现问题,但是问题描述和你不一样。 还有Other Linker Flags在我公司项目中是保留多项的,这点应该不是问题关键。 这个技术算是比较新的,所以资料很少啊
    一抹远方:@Jabber_YQ 重复很多次 都是出现这个问题 因为需要热更新用的是0.44.3版本 只有一不同 Build Settings的Other Linker Flags设置为 -ObjC 现在工程里用了很多项 只保留 -ObjC ?
    Jabber_YQ:额 我没有遇到过
    我集成了多次 都没问题
  • 一铭_:ipa包会增大多少呢?
    Jabber_YQ:@石不帅_ 这个没有注意诶 10m以内吧
  • 程序猿马国玺:使用这个库上线的话会不会受影响?
    Jabber_YQ:@程序猿马国玺 公司项目暂时没有问题

本文标题:iOS拓展:iOS原生项目集成react-native过程记录

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