firebase / firebase-ios-sdk

Firebase SDK for Apple App Development
https://firebase.google.com
Apache License 2.0
5.59k stars 1.46k forks source link

Remote Config does not work with custom SQLite3 libraries #10884

Closed aaron-foreflight closed 5 months ago

aaron-foreflight commented 1 year ago

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
```json Replace this line with the contents of your Package.resolved. ```

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet
```yml Replace this line with the contents of your Podfile.lock! ```
google-oss-bot commented 1 year ago

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

paulb777 commented 1 year ago

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.

aaron-foreflight commented 1 year ago

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.

paulb777 commented 1 year ago

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

cprince-foreflight commented 6 months ago

Any update here? It's been a year.

morganchen12 commented 6 months ago

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?

ncooke3 commented 5 months ago

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