firebase-ios-sdk icon indicating copy to clipboard operation
firebase-ios-sdk copied to clipboard

Remote Config does not work with custom SQLite3 libraries

Open aaron-foreflight opened this issue 1 year ago • 6 comments

Description

Currently SQLITE_OPEN_FILEPROTECTION_COMPLETEUNTILFIRSTUSERAUTHENTICATION is passed to sqlite3_open_v2(...) in - (void)createOrOpenDatabase in RCNConfigDBManager.m.

If an app eschews the standard Apple sqlite3 library shipped on iOS and uses their own custom sqlite3 build with source directly from the SQLite3 repo, the SQLITE_OPEN_FILEPROTECTION_COMPLETEUNTILFIRSTUSERAUTHENTICATION flag does not exist as Apple has only implemented this in their version of sqlite3 and not contributed it back to the main repo.

We cannot use the Apple's sqlite3 implementation as we need additional spatial querying capabilities built into the library for our application. It would be useful if Remote Config checked if the flag exists before using it.

e.g.:

#ifdef SQLITE_OPEN_FILEPROTECTION_COMPLETEUNTILFIRSTUSERAUTHENTICATION
    int flags = SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE |
                SQLITE_OPEN_FILEPROTECTION_COMPLETEUNTILFIRSTUSERAUTHENTICATION |
                SQLITE_OPEN_FULLMUTEX;

#else
    int flags = SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE |
                SQLITE_OPEN_FULLMUTEX;
#endif

Reproducing the issue

No response

Firebase SDK Version

10.6.0

Xcode Version

14.2.0

Installation Method

Swift Package Manager

Firebase Product(s)

Remote Config

Targeted Platforms

iOS

Relevant Log Output

No response

If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet

Replace this line with the contents of your Package.resolved.

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet

Replace this line with the contents of your Podfile.lock!

aaron-foreflight avatar Mar 02 '23 14:03 aaron-foreflight

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

google-oss-bot avatar Mar 02 '23 14:03 google-oss-bot

Thanks for the report. I'm not sure that the suggested change would redirect the Remote Configuration to point to alternative headers for the sqlite3. Also, there may be other issues since we only test with the system sqlite3.

paulb777 avatar Mar 02 '23 18:03 paulb777

In the context of Package.swift builds, It does indeed look for other headers because there is nothing in the linkerSettings for sqlite3 on that target. I verified that my headers were used in my local fork of Firebase by using a symbol only available from my sqlite3 package. I do realize that this does not apply to any of the other build systems you support.

I can continue with my fork, but I thought I would point this out as it is a blocker for Firebase adoption for anyone doing spatialite and geos stuff with iOS, and probably many other applications that require sqlite features not in Apples platform build.

aaron-foreflight avatar Mar 02 '23 22:03 aaron-foreflight

Thanks. We may want to consider an alternative to sqlite3 for the Remote Config implementation.

paulb777 avatar Mar 02 '23 22:03 paulb777

Any update here? It's been a year.

cprince-foreflight avatar Mar 12 '24 22:03 cprince-foreflight

We do not have plans to allocate dev time to make this change. Would you be willing to contribute a patch based on the code posted by Aaron above?

morganchen12 avatar Mar 13 '24 18:03 morganchen12

Closed via #12548. Thanks, @cprince-foreflight, for the fix!

ncooke3 avatar Apr 22 '24 17:04 ncooke3