终于开始新一篇的填坑之旅了。RN厉害的一个地方就是RN可以和Native组件通信。这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是。自定义视图的使用会在后面讲到。
坑是什么样的坑
主要的是遇到一个业务需求,需要检测当前应用的版本是什么。需要返回当前的版本号和build数。
主要的需求在native来说非常简单:
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
NSString * build = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey];
两句分别获得了版本号和build数。
开始填坑
填坑其实也是意外的简单。当然,我们不准备把这个代码作为库发布到npm上给别人用,所以复杂度自然降低了不少。
首先、在Xcode里创建RNUpgrade
类作为后面和RN通信的native组件。这会在项目里创建两个objc的文件RNUpgrade.h和RNUpgrade.m。
在RNUpgrade.h头文件中,添加RCTBridgeModule
协议。要给RN暴露接口这个协议是必须的。
#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"
@interface RNUpgrade : NSObject<RCTBridgeModule>
@end
之后对于头文件就可以什么都不用管了。至少对于暴露接口这件事是这样的。
下面就来看源文件吧。
看文档,要暴露native方法就必须在源文件里包含一个宏的调用,这个宏是:RCT_EXPORT_MODULE()
。这个宏可以包含一个参数指定RN中访问这个模块的名字。默认的就是你的objc类的名字。
#import "RNUpgrade.h"
#import "RCTUtils.h"<