Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: Unity Support #1023

Open
rdcm opened this issue Jan 11, 2021 · 7 comments
Open

Question: Unity Support #1023

rdcm opened this issue Jan 11, 2021 · 7 comments

Comments

@rdcm
Copy link

rdcm commented Jan 11, 2021

Hi!

Could the SQLite-net be used in Unity projects?

In the official description Unity not mentioned.

SQLite-net is an open source, minimal library to allow .NET, .NET Core, and Mono applications to store data in SQLite 3 databases. It was first designed to work with Xamarin.iOS, but has since grown up to work on all the platforms (Xamarin.*, .NET, UWP, Azure, etc.).

But I see a merged fix for IL2CPP:
#993

@shiena
Copy link
Contributor

shiena commented Apr 18, 2021

@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)]

@gindemit
Copy link

Hey @shiena, can you please explain, or send some information how SQLite works on Mac/iOS? Why the native library is not necessary?

@shiena
Copy link
Contributor

shiena commented Nov 11, 2021

@khindemit
Mac/iOS includes sqlite3 so it works without adding native libraries.
On my macOS Catalina, /usr/lib/libsqlite3.dylib exists.

@wiverson
Copy link

wiverson commented Dec 5, 2021

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.

@wiverson
Copy link

wiverson commented Dec 5, 2021

Even more magic - I just checked my macOS Monterey 12.0.1 M1 install, and it's now /usr/lib/sqlite3 alone. Interesting.

@shiena
Copy link
Contributor

shiena commented Dec 23, 2021

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)]

@heshuimu
Copy link

heshuimu commented Jan 9, 2022

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants