让react-native-fbsdk与CocoaPods一起使用

时间:2017-07-13 17:57:48

标签: react-native react-native-ios fbsdk react-native-fbsdk fbsdkloginkit

我一直试图让react-native-fbsdk与CocoaPods合作,因为我更喜欢将Facebook SDK作为pod install过程的一部分,但我还没有多少运气。我知道我可以react-native link npm库并手动下载并添加必要的框架,但是当我拥有一个非常优秀的软件包管理器时,这似乎相当愚蠢。

根据the documentation判断它应该相当直接 - 只需将必要的广告添加到Podfile,对吧?但无论我尝试什么,原始FBSDK模块似乎永远不会被包括在内。我尝试了很多不同的Podfile s,有些use_framework!pod 'Bolts',有些只有pod 'FBSDKCoreKit'。这是我目前正在使用的那个:

target 'FacebookPods' do
  pod 'FBSDKCoreKit'
  pod 'FBSDKShareKit'
  pod 'FBSDKLoginKit'

  target 'FacebookPodsTests' do
    inherit! :search_paths
  end
end

但是当我运行我的测试应用程序并尝试对react-native-fbsdk模块执行任何操作时,我会收到错误,抱怨各种本机模块未定义。这是我的index.ios.js文件,试图访问LoginManager

import React, {Component} from "react"
import {AppRegistry, Text} from "react-native"
import {LoginManager} from "react-native-fbsdk"

export default class FacebookPods extends Component {
  componentWillMount() {
    LoginManager.logInWithReadPermissions(["email"])
      .then(() => console.log("Success!"))
      .catch((err) => console.log("Failure!", err))
  }

  render() {
    return <Text>Hello World</Text>
  }
}

AppRegistry.registerComponent("FacebookPods", () => FacebookPods)

但这会在undefined is not an object (evaluating 'LoginManager.logInWithReadPermissions'中引发错误FBLoginManager.js。对NativeModules的进一步检查表明,根本不包含本机FBSDK模块。我在发布时也收到以下警告:

2017-07-13 19:50:19.006 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBLikeView" does not exist
2017-07-13 19:50:19.007 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBLoginButton" does not exist
2017-07-13 19:50:19.008 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBSendButton" does not exist
2017-07-13 19:50:19.009 [warn][tid:com.facebook.react.JavaScript] Warning: Native component for "RCTFBShareButton" does not exist

所以,是的,我完全失去了。在我看来,简单地添加pod应该足以包含框架。我已经搜索了我可能已经错过的任何其他步骤的互联网,但除了react-native-fbsdk项目中已经删除的一些问题之外,还没有多少。

3 个答案:

答案 0 :(得分:6)

我遇到了这个问题,并通过将以下内容添加到我的pod文件中,成功react-native-fbsdk使用了Facebook SDK:

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

并在AppDelegate.m中导入以下内容:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

请注意,这些导入与react-native-fbsdk自述文件中的建议不同。这是因为FBSDKCorekit.frameworkFBSDKShareKit.frameworkFBSDKLoginKit.framework不可用。

您还需要从Xcode的libFBSDKShareKit.a标签中链接libFBSDKCoreKit.alibFBSDKLoginKit.aGeneral。这些是仅有的三个可链接的核心/登录/共享内容。他们引用了pod,在pods目录中,您发现没有.framework文件,只有.h文件,因此这些文件是我们导入AppDelegate.m的文件。 (我认为)为react-native-fbsdk提供了所需的SDK组件中的所有文件。

答案 1 :(得分:4)

这对我的Podfile设置这样做(不确定需要Bolts框架pod):

pod 'Bolts' pod 'FBSDKCoreKit' pod 'FBSDKLoginKit' pod 'FBSDKShareKit'

我必须react-native link确保libRCTFBSDK.a位于xcode的Build TARGET =&gt;中构建短语=&gt; “链接二进制文件库”列表。如果没有,您可能需要手动添加libRCTFBSDK.a。我发现,当我运行react-native link并且libRCTFBSDK.a在该列表中时,xCode会正确编译。

答案 2 :(得分:0)

如果您使用cocoapods,则react native将使用cocoapods链接链接库。我创建了一个新项目,然后在运行“ pod init”和“ pod install”之前安装并链接所有软件包。链接包时,可能来自cocoapods的此错误。所有软件包都需要运行“ pod install”后安装的“ react-native link”,否则无法正常运行。我认为我们可以在运行反应本机链接之前重新定义cocoapod。