React Native iOS应用集成Firebase后编译失败求助
问题现象
添加Firebase并导入GoogleService-Info.plist后,运行iOS应用时编译失败,出现以下错误:
2022-10-04 23:35:59.711 xcodebuild[38171:508367] [MT] IDEFileReferenceDebug: [Load] <IDESwiftPackageCore.IDESwiftPackageSpecialFolderFileReference, 0x146d065c0: name:Docs.docc path:group:Docs.docc> 加载路径为/Users/suvin/Library/Developer/Xcode/DerivedData/BoundaryTestApp-ekpfrimpksdanhevovuosfavhjwg/SourcePackages/checkouts/swift-protobuf/Sources/protoc-gen-swift/Docs.docc的容器失败,错误信息:Error Domain=com.apple.dt.IDEContainerErrorDomain Code=6 "无法将"Docs.docc"作为"Swift Package Folder"打开,因为它已被作为"Folder"打开。" UserInfo={NSLocalizedDescription=无法将"Docs.docc"作为"Swift Package Folder"打开,因为它已被作为"Folder"打开。}
** BUILD FAILED **
以下构建命令执行失败:
CompileC /Users/suvin/Library/Developer/Xcode/DerivedData/BoundaryTestApp-ekpfrimpksdanhevovuosfavhjwg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React-logger.build/Objects-normal/arm64/react_native_log.o /Users/suvin/Documents/GitHub/react-native-geofence-example-master/node_modules/react-native/ReactCommon/logger/react_native_log.cpp normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler (属于Pods项目的React-logger目标)
(1项失败)
核心问题分析
- AppDelegate逻辑错误:
[FIRApp configure];之后直接返回YES,导致后续UI初始化、Flipper配置等关键代码未执行,引发编译/运行异常。 - DerivedData缓存冲突:Swift Package的
Docs.docc被重复识别为普通文件夹和Swift Package文件夹,导致加载失败。 - Pods依赖或编译环境问题:React-logger的C++编译失败通常与依赖冲突、Xcode环境配置有关。
解决步骤
1. 修复AppDelegate.m代码逻辑
调整application:didFinishLaunchingWithOptions:方法的代码顺序,确保所有初始化代码正常执行:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef FB_SONARKIT_ENABLED InitializeFlipper(application); #endif RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"BoundaryTestApp" initialProperties:nil]; if (@available(iOS 13.0, *)) { rootView.backgroundColor = [UIColor systemBackgroundColor]; } else { rootView.backgroundColor = [UIColor whiteColor]; } self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; // 配置通知中心 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; // 初始化Firebase(放在UI初始化之后) [FIRApp configure]; return YES; }
2. 清理DerivedData并重新安装Pods
- 打开Xcode,点击菜单栏
Xcode > 设置 > 位置,找到Derived Data,点击箭头打开文件夹,删除项目对应的DerivedData目录(如BoundaryTestApp-ekpfrimpksdanhevovuosfavhjwg)。 - 进入项目的iOS目录,执行以下命令:
pod deintegrate rm -rf Podfile.lock pod install
(M1芯片Mac需执行:arch -x86_64 pod install)
3. 修复React-logger编译问题
- 检查Xcode命令行工具版本:打开Xcode,
Xcode > 设置 > 位置,选择最新的Command Line Tools版本。 - 确保项目的
Build Settings中,C++ Standard Library设置为libc++(Xcode默认值)。
4. 验证Firebase配置
- 确认
GoogleService-Info.plist已正确添加到Xcode项目:右键项目根目录,选择添加文件到"BoundaryTestApp",勾选复制项目(如果需要)和对应Target。 - 检查
Build Phases > Copy Bundle Resources中是否包含GoogleService-Info.plist,若未包含则手动添加。
内容的提问来源于stack exchange,提问作者Suvin Kollabathula

