如何为Axmol iOS项目集成Firebase?遇SPM验证停滞等问题
Axmol iOS项目集成Firebase的解决方案
问题背景
在Axmol游戏引擎iOS项目中集成Firebase时遇到以下卡点:
- 尝试通过CMake引入xcframework失败,因为firebase-ios-sdk官方未提供现成xcframework
- Xcode中通过Swift Package Manager(SPM)添加Firebase仓库时,卡在「preparing to validate」无进度(非Axmol项目可正常执行)
- 使用firebase-cpp-sdk(firebase-ios-sdk的包装器)虽能完成添加,但仍依赖firebase-ios-sdk,且官方下载链接失效
可行解决方案
方案一:自行构建Firebase iOS SDK的xcframework
- 克隆firebase-ios-sdk仓库到本地
git clone https://github.com/firebase/firebase-ios-sdk.git cd firebase-ios-sdk - 安装构建依赖(需提前安装Homebrew)
brew install cmake python3 - 执行官方构建脚本生成xcframework
脚本会自动编译真机(arm64)和模拟器(arm64/x86_64)架构的框架,最终生成xcframework文件:
生成的xcframework会存放在./build.sh build_all_xcframeworks --no-swift-package-managerfirebase-ios-sdk/Build目录下。 - 在Axmol项目中通过CMake引入
编辑项目的CMakeLists.txt,添加导入和链接配置,示例:
按需替换# 导入FirebaseCore模块 add_library(FirebaseCore STATIC IMPORTED) set_target_properties(FirebaseCore PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/FirebaseCore.xcframework/ios-arm64/FirebaseCore.framework" IMPORTED_LOCATION_SIMULATOR "${CMAKE_CURRENT_SOURCE_DIR}/FirebaseCore.xcframework/ios-arm64_x86_64-simulator/FirebaseCore.framework" ) # 链接到项目目标 target_link_libraries(YourProjectName PRIVATE FirebaseCore)YourProjectName和xcframework的实际路径,同时添加其他需要的Firebase模块(如FirebaseAnalytics、FirebaseAuth等)。
方案二:手动导入Firebase预编译框架
- 获取官方预编译框架:通过Firebase控制台项目设置的「添加应用」流程下载,或直接从firebase-ios-sdk的GitHub Releases页面下载对应版本的压缩包。
- 拖入Xcode项目:解压后将所需的
.framework文件拖入Axmol项目的Xcode工程中,勾选「Copy items if needed」和对应目标。 - 配置CMake链接:在
CMakeLists.txt中添加框架链接逻辑:find_library(FIREBASE_CORE FirebaseCore) target_link_libraries(YourProjectName PRIVATE ${FIREBASE_CORE}) - 导入配置文件:将Firebase控制台下载的
GoogleService-Info.plist添加到项目中,确保Xcode能识别到该文件。
方案三:修复SPM集成卡壳问题
如果偏好使用SPM,尝试以下步骤解决「preparing to validate」卡顿:
- 清理Xcode缓存:
重启Xcode后重新尝试添加包。rm -rf ~/Library/Caches/org.swift.swiftpm rm -rf ~/Library/Developer/Xcode/DerivedData - 指定具体版本:添加包时,不要选择「Up to Next Major Version」,直接输入稳定版本号(如
10.18.0),减少版本解析耗时。 - 启用SPM支持生成Xcode项目:
生成项目后再尝试添加Firebase仓库。axmol build -p ios -a arm64 -sdk simulator -c -DENABLE_SPM=ON
内容的提问来源于stack exchange,提问作者Peter Andela
相关产品推荐
相关产品推荐

