React Native集成fbsdk-next报错:'FBSDKApplicationDelegate'未声明标识符
React Native集成react-native-fbsdk-next报错:未声明标识符'FBSDKApplicationDelegate'
在构建React Native应用时,安装并配置react-native-fbsdk-next包后,反复出现以下编译报错:
error: use of undeclared identifier 'FBSDKApplicationDelegate' if ([[FBSDKApplicationDelegate sharedInstance] application:app openURL:url options:options]) { ^
尝试过相关解决方案但问题依旧,以下是当前的配置代码:
相关配置代码
AppDelegate.mm文件
#import "AppDelegate.h" #import <React/RCTBundleURLProvider.h> #import <AuthenticationServices/AuthenticationServices.h> #import <SafariServices/SafariServices.h> #import <FBSDKCoreKit/FBSDKCoreKit-Swift.h> #import <React/RCTLinkingManager.h> @implementation AppDelegate - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { if ([[FBSDKApplicationDelegate sharedInstance] application:app openURL:url options:options]) { return YES; } if ([RCTLinkingManager application:app openURL:url options:options]) { return YES; } return NO; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.moduleName = @"AppName"; // 可在下方字典中添加自定义初始属性,会传递给React Native使用的ViewController self.initialProps = @{}; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { return [self getBundleURL]; } - (NSURL *)getBundleURL { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif } @end
Info.plist配置
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb<my-id></string> </array> </dict> </array> <key>CFBundleVersion</key> <string>$(CURRENT_PROJECT_VERSION)</string> <key>FacebookAppID</key> <string><my-id></string> <key>FacebookClientToken</key> <string><my-token></string> <key>FacebookDisplayName</key> <string><app-name></string> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-share-api</string> </array>
Podfile配置
手动链接的Pod依赖:
pod 'react-native-fbsdk-next', :path => '../node_modules/react-native-fbsdk-next'
尝试过的额外配置:
installer.aggregate_targets.first.user_project.native_targets.each do |target| target.build_configurations.each do |config| config.build_settings['LIBRARY_SEARCH_PATHS'] = ['$(inherited)', '$(SDKROOT)/usr/lib/swift'] end end
解决方案尝试
- 替换头文件导入:将
#import <FBSDKCoreKit/FBSDKCoreKit-Swift.h>替换为Objective-C原生头文件#import <FBSDKCoreKit/FBSDKCoreKit.h>,FBSDKApplicationDelegate是Objective-C类,Swift头文件可能未正确暴露该类。 - 添加SDK初始化代码:在
didFinishLaunchingWithOptions方法中加入Facebook SDK初始化逻辑,确保SDK被正确加载:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 初始化Facebook SDK [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; self.moduleName = @"AppName"; self.initialProps = @{}; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } - 更新Pod依赖并清理缓存:执行以下命令更新Facebook SDK到兼容版本,同时清理Pods缓存:
pod deintegrate && pod update FBSDKCoreKit && pod install - 启用Swift混编支持:如果项目未启用Swift,在Xcode中新建一个空的Swift文件(命名为
Dummy.swift即可),Xcode会自动生成桥接文件,确保Swift和Objective-C代码能正常交互。 - 检查Build Settings配置:打开Xcode项目的Build Settings,确认
FRAMEWORK_SEARCH_PATHS包含$(inherited),保证Facebook SDK框架能被正确检索到。
内容的提问来源于stack exchange,提问作者Luddepb
相关产品推荐
相关产品推荐

