为 iOS React-Native 项目设置 Fbsdk 框架

Posted

技术标签:

【中文标题】为 iOS React-Native 项目设置 Fbsdk 框架【英文标题】:Setting Fbsdk frameworks for an iOS React-Native project 【发布时间】:2016-04-27 01:11:39 【问题描述】:

[大量更新] 有人给我发了这个,它更容易阅读以便使用 React Native 安装 fbsdk:https://developers.facebook.com/docs/react-native/getting-started-ios 但是,问题还是一样:

Use of undeclared identifier 'UIUserInterfaceIdiomTV'

我猜这是来自 CocoaPods 提取的内容的错误,因为我能够通过简单地删除相同的 UIUserInterfaceIdiomTV 案例来使 sample example 工作(它曾经在一个开关中) )。

但是,按照指南中的每一步并最终删除 UIUserInterfaceIdiomTV,我在自己的项目中遇到了新的编译问题:Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_FBSDKAppEvents", referenced from: objc-class-ref in AppDelegate.o "_OBJC_CLASS_$_FBSDKApplicationDelegate", referenced from: objc-class-ref in AppDelegate.o "_OBJC_CLASS_$_RCTRootView", referenced from: objc-class-ref in AppDelegate.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果有人可以帮忙... 感谢您的帮助!

【问题讨论】:

为了更清楚一点,我一直在尝试“Facebook SDK for iOS”中步骤的不同组合,因为我知道我应该跳过一些步骤,因为 Cocoapods 正在处理一些,但我不知道应该执行哪些步骤才能使编译正常工作。 我刚刚回答了一个类似的问题,看看这个:***.com/questions/36904245/…希望对你有帮助。 您好,感谢您的帮助,但我什至无法编译我的项目。顺便说一下,当我尝试编译HelloFacebook sample 时,我得到了同样的错误...... 嗨@Crysfel,我只是删除了 UIUserInterfaceIdiomTV 案例并让 HelloFacebook 工作。但是,我的应用程序中出现了新错误:Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_FBSDKAppEvents", referenced from: objc-class-ref in AppDelegate.o "_OBJC_CLASS_$_FBSDKApplicationDelegate", referenced from: objc-class-ref in AppDelegate.o "_OBJC_CLASS_$_RCTRootView", referenced from: objc-class-ref in AppDelegate.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 【参考方案1】:

我终于让 fbsdk 工作了 (24/04/2016)。如果遇到同样的问题,总结不同的步骤:

如果您在命令 pod install 之后遇到 The 'YourApp [Debug]' target overrides the 'OTHER_LDFLAGS' build setting... 警告,则 $(inherited) 将被添加到主项目构建设置而不是 Pod 中 UIUserInterfaceIdiomTV 由于未知原因目前无法识别,因此在 AppDelegate.m 中,如果您遇到错误,只需从开关中略过该案例 info.plist 必须包含几行(尚未)在 sdk 安装指南中提及的行。这是您应该添加的完整列表: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fbyour-app-id</string> </array> </dict> </array> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> <key>FacebookAppID</key> <string>your-app-id</string> <key>FacebookDisplayName</key> <string>your-app-name</string>

不要忘记将 your-app-id 替换为...您的应用 ID,并将 your-app-name 替换为您的应用名称。 祝大家好运!

【讨论】:

【参考方案2】:

这篇文章直接回答了你的问题... https://colinramsay.co.uk/2016/04/29/go-serverless.html

我将复制/粘贴相关详细信息,因为我知道在 SOF 上链接不是一个体面的答案。

让我们通过 npm 安装Facebook React Native SDK,它会免费为我们提供一个漂亮的登录按钮:

npm install --save react-native-fbsdkcore react-native-fbsdklogin

我们需要安装一些本机代码来完成这项工作,所以让我们使用 CocoaPods 来完成。首先我们创建一个 Podfile:

cd ios
pod init

编辑刚刚在 FacebookAwsReactNative/ios/Podfile 创建的文件并添加以下内容:

source 'https://github.com/CocoaPods/Specs.git'
pod 'React', :subspecs => ['Core', 'RCTImage', 'RCTNetwork', 'RCTText', 'RCTWebSocket'], :path => '../node_modules/react-native'
pod 'react-native-fbsdkcore', :path => '../node_modules/react-native-fbsdkcore'
pod 'react-native-fbsdklogin', :path => '../node_modules/react-native-fbsdklogin'
pod 'react-native-fbsdkshare', :path => '../node_modules/react-native-fbsdkshare'

根据Facebook documentation,您可能需要在此处执行一些其他步骤。去阅读该部分以防万一。让我们安装 pod,然后我们将不得不在 Xcode 中折腾一下。

pod install
open FacebookAwsReactNative.xcworkspace

请注意,我们现在使用的是 xcworkspace 文件而不是 xcodeproj 文件;这是 CocoaPods 执行其任务所必需的。

展开 FacebookAwsReactNative > Libraries 文件夹并选择其中的所有项目并删除对它们的引用。这是因为我们选择为 React Native 使用 CocoaPods(参见我们添加到 Podfile 中的 pod 'React' 行),因此库中的项目是重复的。

【讨论】:

以上是关于为 iOS React-Native 项目设置 Fbsdk 框架的主要内容,如果未能解决你的问题,请参考以下文章

在 react-native 项目中,iOS 的 RTL 文本未正确对齐

在现有项目 React-Native 中添加现有的原生项目 Android

react-native 跳转到ios/android 权限设置界面

React-Native无法导入库

如何将 React-Native Picker 的初始值设置为空

react-native ios项目+内存泄漏