Как заставить response-native-fbsdk работать с CocoaPods

Я пытался получить react-native-fbsdk работать с CocoaPods, так как я предпочитаю загружать SDK Facebook как часть pod install процесс, но мне не повезло. Я знаю, что могу react-native link библиотеку npm и вручную загрузите и добавьте необходимые фреймворки, но это кажется довольно глупым, когда в моем распоряжении совершенно хороший менеджер пакетов.

Судя по документации, все должно быть достаточно просто - просто добавьте необходимые 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)

Но это выдает ошибку 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

Так что да, я в полной растерянности. На мой взгляд, простого добавления стручков должно быть достаточно, чтобы включить фреймворки. Я проверил сети для любых дополнительных шагов, которые я, возможно, пропустил, но не так много, за исключением нескольких вопросов на react-native-fbsdk проект, который с тех пор был удален.

2 ответа

Я столкнулся с этой проблемой и смог получить react-native-fbsdk работать с установленным Facebook SDK, добавив в файл pod следующее:

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

и импортировать следующее в AppDelegate.m:

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

Обратите внимание, что этот импорт отличается от предложения в react-native-fbsdk Прочти меня. Это потому что FBSDKCorekit.framework, FBSDKShareKit.framework а также FBSDKLoginKit.framework не доступны

Вам также нужно связать libFBSDKShareKit.a, libFBSDKCoreKit.a а также libFBSDKLoginKit.a от General вкладка в Xcode. Это единственные три вещи Core/Login/Share, доступные для ссылки. Они ссылаются на pods, и, глядя в каталог pods, вы видите, что нет .framework файлы, просто .h файлы, которые мы импортируем в AppDelegate.m Это (я думаю) дает react-native-fbsdk все файлы в компонентах SDK, которые ему нужны.

Это работает для меня с моим Podfile, настроенным таким образом (не уверенный, что модуль болтов необходим):

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

И я должен был сделать react-native link чтобы убедиться, что libRCTFBSDK.a находится в списке сборки TARGET => build phrases => "Связать двоичные файлы с библиотеками" в xcode. Если нет, то вам, вероятно, нужно добавить libRCTFBSDK.a в ручную. Я обнаружил, что однажды я react-native link и libRCTFBSDK.a в этом списке, xCode затем скомпилирован правильно.

Если вы используете cocoapods, реагируйте нативно будет использовать cocoapods для связи библиотек ссылок. Я создал новый проект, затем установил и связал все пакеты перед запуском 'pod init' и 'pod install'. Может быть, эта ошибка от cocoapods при ссылке пакетов. Все пакеты нуждаются в "ответной ссылке", которую вы установили после запуска "pod install", она не работает. Я думаю, что мы можем распаковать cocoapod, прежде чем запустить реагировать родную ссылку.

Другие вопросы по тегам