Custom SQLite Library

PSPDFKit for iOS does not include a custom version of SQLite, as iOS comes with SQLite already bundled. Depending on the version of iOS, this version is different and will also have different capabilities enabled:

iOS SQLite
12.0-12.1 / macOS High Sierra 10.14 3.24.0 with FTS5 Extension (2018-06-04)
11.4 3.19.3 with FTS5 Extension (2017-06-08)
11.0 / macOS High Sierra 10.13 3.18.0 with FTS5 Extension (2017-03-28)
10.3 / macOS Sierra 10.12.4 3.16.0 (2017-01-02)
10.0-10.2 / macOS Sierra 10.12.0 3.14.0 (2016-08-08)

If you see SQLite log warnings, read up on our troubleshooting tips.

Check the SQLite website to see what version is the most current. Sometimes your app requires a specific SQLite version. For example:

  • you need to have the same SQLite version on every iOS version you support,
  • you want to use some new SQLite features that are not yet available in SQLite shipped with iOS.
  • you want to encrypt your SQLite database (see SQLite Database Encryption).
  • you want to use FTS5 with PSPDFLibrary

In such cases you usually link your app with a custom build of SQLite.

Detect what version is currently active

Call this in code to see what version of SQLite you currently use

1
2
// e.g. "3016000" for macOS 10.12.4
int sqliteVersion = sqlite3_libversion_number();

PSPDFKit and a custom SQLite library

PSPDFKit is dynamically linked with SQLite provided by iOS SDK. However if you link your app with a custom SQLite library, PSPDFKit will automatically use it. You might want to remove the -lsqlite3 string from PSPDFKit.xcconfig inside the framework to remove the system linking.

Make sure your custom SQLite library is built with the following flags:

  • SQLITE_THREADSAFE=1 or SQLITE_THREADSAFE=2

and if you're using PSPDFLibrary:

To use FTS5:

  • SQLITE_ENABLE_FTS5

To use FTS4:

  • SQLITE_ENABLE_FTS3
  • SQLITE_ENABLE_FTS3_PARENTHESIS

PSPDFKit expects these options and fails early if any of these are missing.