让 react-native-fbsdk 与 CocoaPods 一起工作

Posted

技术标签:

【中文标题】让 react-native-fbsdk 与 CocoaPods 一起工作【英文标题】:Getting react-native-fbsdk to work with CocoaPods 【发布时间】:2017-07-13 17:57:48 【问题描述】:

我一直试图让react-native-fbsdk 与CocoaPods 一起工作,因为我更喜欢将Facebook SDK 作为pod install 过程的一部分,但我运气不佳。我知道我可以react-native link npm 库并手动下载和添加必要的框架,但是当我有一个非常好的包管理器可供我使用时,这似乎相当愚蠢。

从the documentation 来看,这应该是相当简单的——只需将必要的吊舱添加到Podfile,对吗?但无论我尝试什么,似乎都没有包含原生 FBSDK 模块。我尝试了很多不同的Podfiles,有些是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)

但这会在FBLoginManager.js 中引发错误undefined is not an object (evaluating 'LoginManager.logInWithReadPermissions'。对 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 项目中的一些问题,此后已被删除。

【问题讨论】:

我对 pod 不太了解,但您需要提供路径吗? pod 'FacebookPods', :path =&gt; 'path/to/lib/' 根据我的记忆,Facebook 让我在 ~/Documents 中安装 SDK,所以下载/查找 lib 可能是个问题 也许,我相信FBSDK*Kit pod 也指定在react-native-fbsdk 包中,这样就可以了。但整个想法是避免在项目之外下载和安装 SDK 并手动拖入框架。你用 CocoaPods 让它工作了吗? 不,我们只是进行了手动安装。这个问题是关于安装带有 pod 的普通 FBSDK ***.com/a/30847447/3473220 不确定 RN 是如何使它复杂化的 react-native-fbsdk 包含原生资源,如果你用 cocoapods 导入这些资源,react-native 模块将没有正确的标头搜索路径,因此无法找到合适的模块,这就是为什么你有一个错误。 如果你的原生项目在 swift 中,这可能会很棘手,因为 facebook 不会在乎,也不用 swift 项目测试任何东西,所以你可以期望文档在 90% 不准确时说到迅速 【参考方案1】:

我遇到了这个问题,并通过将以下内容添加到我的 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 中的 General 选项卡链接 libFBSDKShareKit.alibFBSDKCoreKit.alibFBSDKLoginKit.a。这些是仅有的三个可链接的核心/登录/共享事物。它们指的是 pod,查看 pods 目录,您会发现没有 .framework 文件,只有 .h 文件,所以这些是我们导入 AppDelegate.m 的文件。这(我认为)为react-native-fbsdk 提供了它需要的 SDK 组件中的所有文件。

【讨论】:

我没有看到任何要添加的 libFBSDKXXXXKit.a,只添加了一个,那就是 libRTCFBSDK.a。可以吗?我正在使用 FBSDK 5.3.0【参考方案2】:

以这种方式设置我的 Podfile 对我有用(不确定是否需要 Bolts 框架 pod):

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

我必须做react-native link 以确保libRCTFBSDK.a 在xcode 的构建目标=> 构建短语=>“链接二进制与库”列表中。如果没有,您可能需要手动添加libRCTFBSDK.a。我发现一旦我运行react-native link 并且libRCTFBSDK.a 在该列表中,xCode 就会正确编译。

【讨论】:

我认为react-native-link 应该是react-native link 我遇到了这个问题,我可以看到在带有库的链接二进制文件步骤中没有 libRCTFBSDK.a。当我尝试添加它时,我也无法在列表中看到它。如何获取此文件?【参考方案3】:

如果你使用 cocoapods,react native 会使用 cocoapods 链接链接库。我创建了一个新项目,然后在运行“pod init”和“pod install”之前安装并链接所有包。链接包时可能来自 cocoapods 的此错误。所有软件包都需要在运行“pod install”后安装的“react-native link”,但它不起作用。我认为我们可以在运行 react native 链接之前取消 cocoapod。

【讨论】:

以上是关于让 react-native-fbsdk 与 CocoaPods 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

react-native-fbsdk / Facebook iOS SDK - 未定义不是对象(评估'LoginManager.logInWithReadPermissions')

使用 react-native-fbsdk 注销的正确方法

react-native-fbsdk 不支持redirect_uri URL

react-native-fbsdk:“ld:找不到-l-lRNSDKCoreKit的库”

react-native-fbsdk 发布消息 facebook Graph API FBGraphRequest

如何获取用于 react-native-fbsdk 模块的 Facebook SDK 版本