invertase / firestore-ios-sdk-frameworks

⚡ Precompiled Firestore iOS SDKs extracted from the Firebase iOS SDK repository release downloads for faster build times.
Apache License 2.0
439 stars 49 forks source link

Draft reimplementation of CocoaPods Firestore Binary distribution #88

Closed paulb777 closed 8 months ago

paulb777 commented 9 months ago

Fix #79

This PR provides a CocoaPods integrated binary Firestore distribution:

To try it out:

For example a Podfile like:

platform :ios, '13.0'

source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
source 'https://cdn.cocoapods.org/'

target 'InvertaseImport' do
  use_frameworks!
 pod 'FirebaseFirestoreBinary', '10.18.0'
 #If using a solution like Flutter that depends on overwriting the FirebaseFirestore pod, do the following instead:
 # pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0'
end

I've done limited testing and would appreciate others to try it out.

Since GitHub isn't showing the change in the PR, see https://github.com/paulb777/firestore-ios-sdk-frameworks/tree/binary-prototype for the result of the PR to the repo.

Notes:

CLAassistant commented 9 months ago

CLA assistant check
All committers have signed the CLA.

lukemmtt commented 8 months ago

Thanks for the work here Paul! I tried out your implementation, but then I realized this pod uses Firebase 10.20—my main project is built with Flutter and therefore depends on Flutterfire, which itself depends on Firebase 10.18 right now I believe, so I'm not sure I can be of much help. Let me know if I've misunderstood something or if I can help in some other way.

paulb777 commented 8 months ago

@lukemmtt Thanks for taking a look. I added 10.18.0 versions in addition to 10.20.0, so you should be able to access with pod 'FirebaseFirestoreBinary', '10.18.0' in the Podfile.

lukemmtt commented 8 months ago

Great, will try again tomorrow, thanks!

ulusoyca commented 8 months ago

I tried with my Flutter app and unfortunately, the same error: fatal error: module 'cloud_firestore' not found

source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
source 'https://cdn.cocoapods.org/'

target 'Runner' do
  use_frameworks!
  pod 'FirebaseFirestoreBinary', '10.18.0'
end
paulb777 commented 8 months ago

@ulusoyca The Podfile instructions I shared are only about the Firestore specification. They need to be merged with the specifications for the Flutter pods.

ulusoyca commented 8 months ago

@ulusoyca The Podfile instructions I shared are only about the Firestore specification. They need to be merged with the specifications for the Flutter pods.

Can you provide full example so that I can test? This is my full pod file.

# Uncomment this line to define a global platform for your project
platform :ios, '13.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
source 'https://cdn.cocoapods.org/'

target 'Runner' do
  use_frameworks!
  pod 'FirebaseFirestoreBinary', '10.18.0'
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      xcconfig_path = config.base_configuration_reference.real_path
      xcconfig = File.read(xcconfig_path)
      xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
      File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
    end
  end
end
paulb777 commented 8 months ago

I added an update to attempt to work with the Flutter process of overriding the FirebaseFirestore pod: Try replacing pod 'FirebaseFirestoreBinary', '10.18.0' with pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0' in the Podfile.

matt-hall-zory commented 8 months ago

That worked for me Paul using pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0' After doing pod deintegrate and pod update I verifed that all of the abseil, BoringSSL-GRPC and FirebaseFirestore repos were no longer in the podfile.lock. My app built much faster and worked just fine as far as I can see :) Thank you!

matt-hall-zory commented 8 months ago

I should note that previously I had been using pod 'FirebaseFirestore/WithLeveldb' to get around missing symbols. I couldn't use that and had to revert to pod 'FirebaseFirestore'. The app ran fine without it, so I'm fine here, but just noting for others.

anmolgupta321 commented 8 months ago

pod update

[!] Unable to find a specification for FirebaseFirestoreBinary (= 10.18.0) depended upon by FirebaseFirestore

You have either:

anmolgupta@anmols-mbp ios % hi @paulb777 when i update my pod file it gives me this error

Podfile `target 'Runner' do use_frameworks! use_modular_headers! pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0'

flutter_install_all_ios_pods File.dirname(File.realpath(FILE)) end `

anmolgupta321 commented 8 months ago

pod update

[!] Unable to find a specification for FirebaseFirestoreBinary (= 10.18.0) depended upon by FirebaseFirestore

You have either:

  • mistyped the name or version.
  • not added the source repo that hosts the Podspec to your Podfile.

anmolgupta@anmols-mbp ios % hi @paulb777 when i update my pod file it gives me this error

Podfile `target 'Runner' do use_frameworks! use_modular_headers! pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0'

flutter_install_all_ios_pods File.dirname(File.realpath(FILE)) end `

firebase_storage: ^11.2.5 firebase_core: ^2.15.0 cloud_firestore: ^4.14.0 cloud_functions: ^4.4.2 firebase_messaging: ^14.7.10 firebase_crashlytics: ^3.4.9 firebase_database: ^10.2.0 firebase_auth: ^4.9.0

paulb777 commented 8 months ago

@matt-hall-zory Glad to hear it worked for you. 👍

@anmolgupta321 Make sure you include the following two source lines in the Podfile:

source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
source 'https://cdn.cocoapods.org/'
lukemmtt commented 8 months ago

@paulb777, I think you've done it!

In my flutter_project_root/ios directory, I added these lines near the top of my podfile:

source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
source 'https://cdn.cocoapods.org/'

And this line in target 'Runner' do block: pod 'FirebaseFirestore', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => '10.18.0'

This result is just as good as it was a few months ago when the original precompiled binary stopped working. Not sure if there's more work to be done for other implementations, but as far as I can tell, your fix works. Thanks for your contributions!

mikehardy commented 8 months ago

Interesting! I checked this in the react-native-firebase test app, using the non-Flutter instructions - Podfile changes:

diff --git a/tests/ios/Podfile b/tests/ios/Podfile
index 8a09b8d6d..93caa54a3 100644
--- a/tests/ios/Podfile
+++ b/tests/ios/Podfile
@@ -5,6 +5,10 @@ require 'json'
 # source 'https://github.com/firebase/SpecsStaging'
 # source 'https://cdn.cocoapods.org/'

+# Testing https://github.com/invertase/firestore-ios-sdk-frameworks/pull/88
+source 'https://github.com/paulb777/TestFirebaseBinaryStaging.git'
+source 'https://cdn.cocoapods.org/'
+
 # Settings to test various overrides if desired
 appPackage = JSON.parse(File.read(File.join('..', 'node_modules', '@react-native-firebase', 'app', 'package.json')))
 $FirebaseSDKVersion = appPackage['sdkVersions']['ios']['firebase']
@@ -69,6 +73,9 @@ target 'testing' do
   # Use pre-compiled firestore frameworks to optimize compile time. Auto-includes leveldb if needed.
   # pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => $FirebaseSDKVersion

+  # Testing https://github.com/invertase/firestore-ios-sdk-frameworks/pull/88
+  pod 'FirebaseFirestoreBinary', $FirebaseSDKVersion
+
   # If leveldb auto-inclusion fails and build fails with leveldb symbol conflicts, use this subspec:
   # pod 'FirebaseFirestore/WithoutLeveldb', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => $FirebaseSDKVersion

I did not see the abseil / gRPC go away from the Podfile but the binary ones were added:

diff --git a/tests/ios/Podfile.lock b/tests/ios/Podfile.lock
index 6ed746108..7cd199e92 100644
--- a/tests/ios/Podfile.lock
+++ b/tests/ios/Podfile.lock
@@ -764,6 +764,19 @@ PODS:
     - FirebaseCoreExtension (~> 10.0)
     - FirebaseFirestoreInternal (~> 10.17)
     - FirebaseSharedSwift (~> 10.0)
+  - FirebaseFirestoreAbseilBinary (1.2022062300.0)
+  - FirebaseFirestoreBinary (10.20.0):
+    - FirebaseCore (~> 10.20)
+    - FirebaseCoreExtension (~> 10.20)
+    - FirebaseFirestoreInternalBinary (~> 10.20)
+    - FirebaseSharedSwift (~> 10.20)
+  - FirebaseFirestoreGRPCBoringSSLBinary (1.49.1)
+  - FirebaseFirestoreGRPCCoreBinary (1.49.1):
+    - FirebaseFirestoreAbseilBinary (~> 1.2022062300.0)
+    - FirebaseFirestoreGRPCBoringSSLBinary (~> 1.49.1)
+  - FirebaseFirestoreGRPCCPPBinary (1.49.1):
+    - FirebaseFirestoreAbseilBinary (~> 1.2022062300.0)
+    - FirebaseFirestoreGRPCCoreBinary (~> 1.49.1)
   - FirebaseFirestoreInternal (10.20.0):
     - abseil/algorithm (~> 1.20220623.0)
     - abseil/base (~> 1.20220623.0)
@@ -778,6 +791,12 @@ PODS:
     - "gRPC-C++ (~> 1.49.1)"
     - leveldb-library (~> 1.22)
     - nanopb (< 2.30910.0, >= 2.30908.0)
+  - FirebaseFirestoreInternalBinary (10.20.0):
+    - FirebaseCore (~> 10.20)
+    - FirebaseFirestoreAbseilBinary (~> 1.2022062300.0)
+    - FirebaseFirestoreGRPCCPPBinary (~> 1.49.1)
+    - leveldb-library (~> 1.22)
+    - nanopb (< 2.30910.0, >= 2.30908.0)
   - FirebaseFunctions (10.20.0):
     - FirebaseAppCheckInterop (~> 10.10)
     - FirebaseAuthInterop (~> 10.0)
@@ -2083,6 +2102,7 @@ DEPENDENCIES:
   - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
   - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
   - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
+  - FirebaseFirestoreBinary (= 10.20.0)
   - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
   - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
   - Jet (from `../node_modules/jet`)
@@ -2151,6 +2171,13 @@ DEPENDENCIES:
   - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)

 SPEC REPOS:
+  https://github.com/paulb777/TestFirebaseBinaryStaging.git:
+    - FirebaseFirestoreAbseilBinary
+    - FirebaseFirestoreBinary
+    - FirebaseFirestoreGRPCBoringSSLBinary
+    - FirebaseFirestoreGRPCCoreBinary
+    - FirebaseFirestoreGRPCCPPBinary
+    - FirebaseFirestoreInternalBinary
   trunk:
     - abseil
     - AppCheckCore
@@ -2357,7 +2384,13 @@ SPEC CHECKSUMS:
   FirebaseDatabase: 7e838abb62ac2e1a1c792cbeb51df3c4b6607f54
   FirebaseDynamicLinks: 61a82d43b81cd74a3cdbb1d65f07fb0241aaa553
   FirebaseFirestore: 21be9ea244830f6cac15464550c2975c43f9dffc
+  FirebaseFirestoreAbseilBinary: bfaea8f46afee1737cfa36bfb2cedca3d6762af3
+  FirebaseFirestoreBinary: 322e38440fc3aadd7d12934678a626777242defa
+  FirebaseFirestoreGRPCBoringSSLBinary: de993f159ad7a27094de7ff8b080730916409990
+  FirebaseFirestoreGRPCCoreBinary: 1beaa77a8fe26e03c8f2e9d40b4b45651e2acbcc
+  FirebaseFirestoreGRPCCPPBinary: 7fa452b2736744dc5d14f1841a9b215bdb93e33b
   FirebaseFirestoreInternal: 0dc0762afd68192e9d45c31d3dd3017accc84333
+  FirebaseFirestoreInternalBinary: 1337255ff452130dd8378056164c854abd74520e
   FirebaseFunctions: 2b6ec69b93c49347025190ccb0a27cdbfd1cad66
   FirebaseInAppMessaging: 1a9bba3e245cb3ff3fe96e828de2932208d6fc65
   FirebaseInstallations: 558b1da7d65afeb996fd5c814332f013234ece4e
@@ -2447,6 +2480,6 @@ SPEC CHECKSUMS:
   SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
   Yoga: 13c8ef87792450193e117976337b8527b49e8c03

-PODFILE CHECKSUM: fd2f683bc28d2fe2477257935924fd91d3c54766
+PODFILE CHECKSUM: 769ca25f247a61af8c1a4700dca19df4467a71b5

 COCOAPODS: 1.14.3

I did not see the abseil or gRPC stuff go away, and the build failed with duplicate symbol errors

❌ duplicate symbol '_OBJC_CLASS_$_PodsDummy_abseil' in
❌ duplicate symbol '_OBJC_METACLASS_$_PodsDummy_abseil' in
❌ duplicate symbol '_OBJC_CLASS_$_PodsDummy_gRPC_C__' in
❌ duplicate symbol '_OBJC_METACLASS_$_PodsDummy_gRPC_C__' in
❌ duplicate symbol '_OBJC_CLASS_$_PodsDummy_BoringSSL_GRPC' in
❌ duplicate symbol '_OBJC_METACLASS_$_PodsDummy_BoringSSL_GRPC' in
❌ duplicate symbol '_OBJC_CLASS_$_PodsDummy_gRPC_Core' in
❌ duplicate symbol '_OBJC_METACLASS_$_PodsDummy_gRPC_Core' in
❌ ld: 8 duplicate symbols for architecture arm64
❌ clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **

The following build commands failed:
    Ld /Users/mike/work/invertase/react-native-firebase/tests/ios/build/Build/Products/Debug-iphonesimulator/testing.app/testing normal (in target 'testing' from project 'testing')
(1 failure)

When I tried the Flutter style:

+  # Testing https://github.com/invertase/firestore-ios-sdk-frameworks/pull/88
+  pod 'FirebaseFirestoreBinary', :git => 'https://github.com/paulb777/firestore-ios-sdk-frameworks.git', :tag => $FirebaseSDKVersion
+

❓ With the flutter style there was still some LeveldbAutodect pod stuff in the Podfile - is that expected?

...and I received undefined symbol errors:

Undefined symbols for architecture arm64:
  "_$s19FirebaseSharedSwift0A11DataDecoderC0D16DecodingStrategyO4blobyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$s17FirebaseFirestore0B15QueryObservableC13configurationACySayqd__GGAA0bC0V13ConfigurationVyAE_G_tcAERszSeRd__lufcySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_qd__SgSo0g8DocumentH0CXEfU2_qd__yKXEfU_ in FirebaseFirestore(FirestoreQueryObservable.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC19KeyDecodingStrategyO14useDefaultKeysyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$s17FirebaseFirestore0B15QueryObservableC13configurationACySayqd__GGAA0bC0V13ConfigurationVyAE_G_tcAERszSeRd__lufcySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_qd__SgSo0g8DocumentH0CXEfU2_qd__yKXEfU_ in FirebaseFirestore(FirestoreQueryObservable.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC19keyDecodingStrategyAC03KeygH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC20DateDecodingStrategyO6customyAE10Foundation0F0Vs0E0_pKccAEmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$s17FirebaseFirestore0B15QueryObservableC13configurationACySayqd__GGAA0bC0V13ConfigurationVyAE_G_tcAERszSeRd__lufcySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_qd__SgSo0g8DocumentH0CXEfU2_qd__yKXEfU_ in FirebaseFirestore(FirestoreQueryObservable.o)
⚠️       _$s19FirebaseSharedSwift0A11DataDecoderC20DateDecodingStrategyO0A9FirestoreE9timestampAEvgZ in FirebaseFirestore(TimestampDecodingStrategy.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC20dataDecodingStrategyAC0dgH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC20dateDecodingStrategyAC04DategH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC23passthroughTypeResolverAA026StructureCodingPassthroughgH0_pXpvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC34NonConformingFloatDecodingStrategyO5throwyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$s17FirebaseFirestore0B15QueryObservableC13configurationACySayqd__GGAA0bC0V13ConfigurationVyAE_G_tcAERszSeRd__lufcySo16FIRQuerySnapshotCSg_s5Error_pSgtcfU_qd__SgSo0g8DocumentH0CXEfU2_qd__yKXEfU_ in FirebaseFirestore(FirestoreQueryObservable.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC34nonConformingFloatDecodingStrategyAC03NonghiJ0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC6decode_4fromxxm_yptKSeRzlFTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataDecoderC8userInfoSDys010CodingUserG3KeyVypGvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7DecoderC6decode_4fromxxm_yptKSeRzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC0D16EncodingStrategyO4blobyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC19KeyEncodingStrategyO14useDefaultKeysyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC19keyEncodingStrategyAC03KeygH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC20DateEncodingStrategyO6customyAEy10Foundation0F0V_s0E0_ptKccAEmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$s19FirebaseSharedSwift0A11DataEncoderC20DateEncodingStrategyO0A9FirestoreE9timestampAEvgZ in FirebaseFirestore(TimestampEncodingStrategy.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC20dataEncodingStrategyAC0dgH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC20dateEncodingStrategyAC04DategH0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC23passthroughTypeResolverAA026StructureCodingPassthroughgH0_pXpvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC34NonConformingFloatEncodingStrategyO5throwyA2EmFWC", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfC in FirebaseFirestore(EncoderDecoder.o)
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderCAEycfc in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC34nonConformingFloatEncodingStrategyAC03NonghiJ0OvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC6encodeyypxKSERzlFTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift0A11DataEncoderC8userInfoSDys010CodingUserG3KeyVypGvsTj", referenced from:
⚠️       _$sSo12FIRFirestoreC17FirebaseFirestoreE7EncoderC6encodeySDySSypGxKSERzlF in FirebaseFirestore(EncoderDecoder.o)
❌   "_$s19FirebaseSharedSwift38StructureCodingPassthroughTypeResolverP02isfG0ySbqd__lFZTq", referenced from:
⚠️       l_got.$s19FirebaseSharedSwift38StructureCodingPassthroughTypeResolverP02isfG0ySbqd__lFZTq in FirebaseFirestore(CodablePassThroughTypes.o)
❌ ld: symbol(s) not found for architecture arm64
❌ clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **

I've pushed my experiments to this branch in two commits, one attempting the FirebaseFirestoreBinary pod dep, and one attempting the FirebaseFirestore dep that references into the git repo

https://github.com/invertase/react-native-firebase/tree/%40mikehardy/firestore-ios-sdk-frameworks-pr88

So I can't seem to make it work quite yet for the react-native-firebase case - perhaps I'm missing something?

Worth mentioning in the meantime ccache continues to result in builds of approximately 3 minutes total in github runners despite compiling literally every single firebase module plus a bunch of other modules

paulb777 commented 8 months ago

It looks like there may be a lingering binary build of the Firestore Swift sources in your project. It might help to remove DerivedData for the project. If that doesn't help, we need to track down where the FirebaseFirestore(EncoderDecoder.o) is coming from.

With the new design, leveldb should always be built as source. (It's small and fast to build).

If you're stuck with react-native, share repro instructions and I can take a look.