You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Go项目无法接入Firebase,切换React Native CLI遇Gem构建错误求助

问题解决:Expo Go接入Firebase + React Native CLI环境错误修复

一、优先方案:在现有Expo Go项目中接入Firebase

Expo Go完全支持Firebase集成,无需切换到React Native CLI,步骤如下:

  • 安装所需的Firebase Expo库(按需选择):
    expo install expo-firebase-app expo-firebase-auth expo-firebase-firestore
    
  • 前往Firebase控制台创建项目,下载对应平台的配置文件:
    • iOS:GoogleService-Info.plist,放在项目根目录
    • Android:google-services.json,放在项目根目录
  • 修改项目根目录的app.json,添加平台配置:
    {
      "expo": {
        "ios": {
          "googleServicesFile": "./GoogleService-Info.plist",
          "bundleIdentifier": "你的iOS包名"
        },
        "android": {
          "googleServicesFile": "./google-services.json",
          "package": "你的Android包名"
        }
      }
    }
    
  • 在项目代码中初始化Firebase:
    import { initializeApp } from 'expo-firebase-app';
    
    // 若已配置googleServicesFile,无需手动传入config
    initializeApp();
    

二、React Native CLI环境错误修复(ffi安装失败)

从错误日志看,核心问题有两个:项目路径包含空格导致make命令解析失败,以及系统缺少libffi依赖。解决步骤:

  1. 迁移项目到无空格路径
    原路径/Users/jonnywerthman/Desktop/Dev stuff/...中的空格会导致shell命令解析错误,将项目移动到类似/Users/jonnywerthman/Desktop/DevStuff/personal/90dayz/Dayz90的路径下。

  2. 安装系统级libffi依赖

    brew install libffi
    
  3. 配置环境变量让Ruby找到libffi

    export LDFLAGS="-L$(brew --prefix libffi)/lib"
    export CPPFLAGS="-I$(brew --prefix libffi)/include"
    export PKG_CONFIG_PATH="$(brew --prefix libffi)/lib/pkgconfig"
    
  4. 重新安装依赖

    gem install bundler
    bundle install
    gem install cocoapods
    
  5. 若仍有问题,重新编译Ruby并指定libffi路径

    rvm get stable
    rvm reinstall 2.7.5 --with-libffi-dir=$(brew --prefix libffi)
    

完整错误信息

Installing dependencies
✔ CocoaPods (https://cocoapods.org/) is not installed. CocoaPods is necessary for the iOS project to run correctly. Do you want to install it? › Yes, with gem (may require sudo)
✔ Installing CocoaPods
✖ Installing Bundler
error Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/jonnywerthman/Desktop/Dev
stuff/personal/90dayz/Dayz90/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.5/ext/ffi_c
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/bin/ruby -I
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0 -r
./siteconf20221226-91293-hikzkd.rb extconf.rb
checking for ffi_prep_closure_loc() in -lffi... no
checking for ffi_prep_closure_loc() in -llibffi... no
checking for ffi_prep_closure_loc() in -llibffi-8... no
checking for whether -Wl,--exclude-libs,ALL is accepted as LDFLAGS... no
checking for whether -pthread is accepted as LDFLAGS... yes
creating extconf.h
creating Makefile

current directory: /Users/jonnywerthman/Desktop/Dev
stuff/personal/90dayz/Dayz90/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.5/ext/ffi_c
make "DESTDIR=" clean

current directory: /Users/jonnywerthman/Desktop/Dev
stuff/personal/90dayz/Dayz90/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.5/ext/ffi_c
make "DESTDIR="
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** ["/Users/jonnywerthman/Desktop/Dev] Error 2

make failed, exit code 2

Gem files will remain installed in /Users/jonnywerthman/Desktop/Dev
stuff/personal/90dayz/Dayz90/vendor/bundle/ruby/2.7.0/gems/ffi-1.15.5 for
inspection.
Results logged to /Users/jonnywerthman/Desktop/Dev
stuff/personal/90dayz/Dayz90/vendor/bundle/ruby/2.7.0/extensions/x86_64-darwin-22/2.7.0/ffi-1.15.5/gem_make.out

/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:99:in
`run'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:51:in
`block in make'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:43:in
`each'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:43:in
`make'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/ext_conf_builder.rb:63:in
`block in build'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/tempfile.rb:291:in
`open'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/ext_conf_builder.rb:30:in
`build'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:169:in
`block in build_extension'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:165:in
`synchronize'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:165:in
`build_extension'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:210:in
`block in build_extensions'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:207:in
`each'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/ext/builder.rb:207:in
`build_extensions'
/Users/jonnywerthman/.rvm/rubies/ruby-2.7.5/lib/ruby/2.7.0/rubygems/installer.rb:844:in
`build_extensions'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/rubygems_gem_installer.rb:72:in
`build_extensions'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/rubygems_gem_installer.rb:28:in
`install'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/source/rubygems.rb:200:in
`install'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/installer/gem_installer.rb:54:in
`install'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/installer/gem_installer.rb:16:in
`install_from_spec'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/installer/parallel_installer.rb:155:in
`do_install'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/installer/parallel_installer.rb:146:in
`block in worker_pool'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/worker.rb:62:in
`apply_func'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/worker.rb:57:in
`block in process_queue'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/worker.rb:54:in
`loop'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/worker.rb:54:in
`process_queue'
/Users/jonnywerthman/.rvm/gems/ruby-2.7.5/gems/bundler-2.4.1/lib/bundler/worker.rb:90:in
`block (2 levels) in create_threads'

An error occurred while installing ffi (1.15.5), and Bundler cannot continue.

In Gemfile:
  cocoapods was resolved to 1.11.3, which depends on
    cocoapods-core was resolved to 1.11.3, which depends on
      typhoeus was resolved to 1.4.0, which depends on
        ethon was resolved to 0.16.0, which depends on
          ffi

✖ Installing Bundler
error Error: Looks like your iOS environment is not properly set. Please go to https://reactnative.dev/docs/next/environment-setup and follow the React Native CLI QuickStart guide for macOS and iOS.
Error: Error: Looks like your iOS environment is not properly set. Please go to https://reactnative.dev/docs/next/environment-setup and follow the React Native CLI QuickStart guide for macOS and iOS.
    at createFromTemplate (/Users/jonnywerthman/node_modules/@react-native-community/cli/build/commands/init/init.js:169:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Object.initialize [as func] (/Users/jonnywerthman/node_modules/@react-native-community/cli/build/commands/init/init.js:222:3)
    at async Command.handleAction (/Users/jonnywerthman/node_modules/@react-native-community/cli/build/index.js:140:9)

内容的提问来源于stack exchange,提问作者thefreakymamba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:35:24