Open rdcm opened 3 years ago
@rdcm
diff --git a/src/SQLite.cs b/src/SQLite.cs
--- a/src/SQLite.cs (date 1618732310971)
+++ b/src/SQLite.cs (date 1618732310971)
@@ -4356,7 +4356,11 @@
Serialized = 3
}
+#if UNITY_ANDROID && !UNITY_EDITOR
+ const string LibraryPath = "sqliteX";
+#else
const string LibraryPath = "sqlite3";
+#endif
#if !USE_CSHARP_SQLITE && !USE_WP8_NATIVE_SQLITE && !USE_SQLITEPCL_RAW
[DllImport(LibraryPath, EntryPoint = "sqlite3_threadsafe", CallingConvention=CallingConvention.Cdecl)]
Hey @shiena, can you please explain, or send some information how SQLite works on Mac/iOS? Why the native library is not necessary?
@khindemit
Mac/iOS includes sqlite3 so it works without adding native libraries.
On my macOS Catalina, /usr/lib/libsqlite3.dylib
exists.
Just to add a comment after doing some research - on macOS, if the library asked for in sqlite-net is "sqlite3" macOS will automatically look for a library with libsqlite3.dylib, which is included in the library lookup path by default. The lib prefix and .dylib are magic strings added to the lookup.
Even more magic - I just checked my macOS Monterey 12.0.1 M1 install, and it's now /usr/lib/sqlite3 alone. Interesting.
I forgot that DllImport should be __Internal
in iOS.
So the patch is as follows, along with the one for Android.
https://docs.unity3d.com/2022.1/Documentation/Manual/NativePlugins.html
diff --git a/src/SQLite.cs b/src/SQLite.cs
index e5712f3..dc9e0d4 100644
--- a/src/SQLite.cs
+++ b/src/SQLite.cs
@@ -4468,7 +4468,13 @@ namespace SQLite
Serialized = 3
}
+#if UNITY_IOS && !UNITY_EDITOR
+ const string LibraryPath = "__Internal";
+#elif UNITY_ANDROID && !UNITY_EDITOR
+ const string LibraryPath = "sqliteX";
+#else
const string LibraryPath = "sqlite3";
+#endif
#if !USE_CSHARP_SQLITE && !USE_WP8_NATIVE_SQLITE && !USE_SQLITEPCL_RAW
[DllImport(LibraryPath, EntryPoint = "sqlite3_threadsafe", CallingConvention=CallingConvention.Cdecl)]
@shiena
For iOS, If the intent is using the system-provided libsqlite3
, LibraryPath
should be kept as sqlite3
.
__Internal
is only for linking extern methods with statically-linked native functions in Unity IL2CPP. Unity's documentation was not updated to include the fact that dynamic linking was supported since iOS 8.
However, if the Unity project integrates SQLite using static library or source code, then LibraryPath
should be kept as __Internal
for all platforms, including Android.
Hi!
Could the SQLite-net be used in Unity projects?
In the official description Unity not mentioned.
But I see a merged fix for IL2CPP: https://github.com/praeclarum/sqlite-net/pull/993