库未与 0.41 版本的 react-native 链接

Posted

技术标签:

【中文标题】库未与 0.41 版本的 react-native 链接【英文标题】:Library not linking with 0.41 versions of react-native 【发布时间】:2017-02-16 18:30:08 【问题描述】:

即使在尝试手动链接多个不同时间后,我在将库链接到 react-native 项目时也遇到问题。我已经完成了大量“称赞”的教程,但都没有成功。

我不是 Objective-C/ios-native 方面的专家,所以为了解决这个问题,我决定创建一个 HelloWorld 库和一个 HelloWorld react-native 项目。

使用:

react-native v0.41.2 react-native-cli v2.0.1 react-native-create-library v1.0.4 xcode v8.2.1

我做了以下事情:

    react-native-create-library Libreact-native init RNLibTest。 “链接成功”(手动和react-native link ...都试过)

代码如下:

RNLib

// ./ios/RNLib.h
#import <React/RCTBridgeModule.h>

@interface RNLib : NSObject <RCTBridgeModule>

@end



// ./ios/RNLib.m
#import "RNLib.h"

@implementation RNLib

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(helloWorld:(NSString *)world)

  return [NSString stringWithFormat:@"hello %@", world];


@end



// ./index.js
import  NativeModules  from 'react-native';

const  RNLib  = NativeModules;
console.log(RNLib); // undefined
console.log(NativeModules); // Object: RNLib NOT included

export default RNLib;

HelloWorld / RNLibTest

// index.ios.js

import React,  Component  from 'react';
import  AppRegistry, Text, View  from 'react-native';
import RNLib from 'react-native-lib'; // I installed RNLib with npm and then "linked".

export default class RNLibTest extends Component 
  componentDidMount() 
    console.log(RNLib); // undefined
  

  render() 
    return (
      <View>
        <Text>Hello World</Text>
        <Text>
          RNLib.helloWorld("world") 
          /* throws error "can't read property helloWorld of undefined" */
        </Text>
      </View>
    );
  


AppRegistry.registerComponent('RNLibTest', () => RNLibTest);

我的问题:

    如果代码没有错,难道是 react-create-native-library 创建的 xcode 项目无法与较新版本的 react-native 一起使用? 还有其他人有这些问题吗?如果是这样,您采取了哪些措施来解决它? 如果你还没有遇到这个问题,你是用最新版的 react-native 吗? 您使用的是什么版本的 xcode、react-native-cli 等...? 是否有人必须降级才能解决此问题?

2017 年 2 月 22 日更新

有一个新版本的 react-native-create-library (v1.1.0) 支持 v0.40+。我再次尝试并更新了上面的代码,但我仍然看到同样的问题。

Here is a link to the GitHub issue。我还把react-native-lib library和LibTest app上传到了GitHub。

【问题讨论】:

【参考方案1】:

不确定react-native-create-library 是否支持 0.41 RN 但从代码中我可以说您需要导入 RCT*h 文件,例如 &lt;React/RCTBridgeModule.h&gt;

由于这是单一的,你可以在 Xcode 中创建一个RNLib.h 文件并检查你会得到编译时错误

谢谢

【讨论】:

我刚刚尝试从react-native source 下载示例库,但也没有成功。 我按照你的要求更新了代码,还是没有成功。【参考方案2】:

我不知道是什么导致了这个问题,但是在 react-native 0.42 出来后,我决定再试一次。

相同的代码,相同的库,相同的一切,但 react-native 0.42,这些是我的结果:

    使用react-native link => 工作。 使用手动安装 => 工作正常。

我不确定 0.41 中发生了什么,但 0.42 中没有发生!

【讨论】:

嘎。奇怪的。我在 0.50.0 和 0.51.0 上看到了同样的问题。不过我还没试过 0.42

以上是关于库未与 0.41 版本的 react-native 链接的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat7.0.41的使用异常

上传到 Google Play 时,android apk 未与 zip 对齐

如何解决VB出现控件对象库未注册的问题?

dyld:库未加载:@rpath/libswiftCore.dylib

在动态库未定义引用中提升 python 包装器

[options] 未与 -source 1.6 一起设置引导类路径