Как я уже упоминал в моем комментарии выше, я получил эту работу, и, так как переполнение стека действительно помогло мне, я хотел внести небольшой вклад в развитие сообщества.
Ответственность
Это исходит от разработчика .NET, который является N00B, когда дело доходит до iOS / MacOS / XCode / Monotouch.
Несмотря на то, что я тестировал это на симуляторе iPad, мне еще предстоит протестировать его на реальном устройстве.
Конечный отказ от ответственности
Это краткое руководство по компиляции собственной версии SQLite и ее включению в проект Monotouch с целью поддержки полнотекстового поиска.
Шаг 1:
Загрузите файл объединения SQLite.
Сюда входит весь SQLite в одном файле.
http://www.sqlite.org/download.html
Шаг 2. Скомпилируйте исходный код SQLite в Xcode для iOS.
Здесь есть хорошее руководство по тому, как это сделать:
http://pp.hillrippers.ch/blog/2009/08/08/Static+SQLite+Library+with+Unicode+Support+for+the+iPhone/
Я выполнил шаги 1-5, пропустил # 6, поскольку мы не добавляем дополнительные заголовки.
Вместо использования флагов компиляции, используемых в пошаговом руководстве, я использовал:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS4
Возможно, вы захотите добавить и других.
Эти флаги компиляции добавляются в XCode на вкладку «Сборка» проекта в разделе «Макросы препроцессора».
После того, как вы скомпилировали это, вы должны иметь «mylibrary.a».
Шаг 3: Включите этот файл в ваш проект MonoDevelop
Добавьте mylibrary.a в MonoDevelop, как и любой другой файл, щелкните по нему правой кнопкой мыши и убедитесь, что действие по сборке - «Ничего».
В опциях вашего проекта выберите «Сборка iPhone». Вам нужно добавить дополнительные аргументы mtouch. Добавить следующее
-gcc_flags "-L${ProjectDir} -lmylibrary -force_load ${ProjectDir}/mylibrary.a"
Шаг 4: создание оболочки c #
Возможно, вы могли бы найти хорошую обертку для включения в этот момент, но я просто быстро свернул свою собственную.
Для хорошего руководства по написанию оболочки SQLite на C # посмотрите эту страницу:
http://www.switchonthecode.com/tutorials/csharp-tutorial-writing-a-dotnet-wrapper-for-sqlite
Поскольку ваша библиотека является частью проекта, вам не нужно ссылаться на библиотеку по имени, вместо этого используйте ключевое слово "__Internal". * ВНИМАНИЕ В "__INTERNAL" ДВА ПОДПИСЫВАЮТСЯ * (не спрашивайте меня, сколько времени я потратил впустую, прежде чем понял это)
Вот образец одного из моих
[DllImport ("__Internal", EntryPoint="sqlite3_open")]
static extern int sqlite3_open_v2(string filename, out IntPtr db);
Очевидно, что собрать обертку гораздо больше, но есть много информации о том, как это сделать. Один из способов - правильно распределить строки, возвращаемые из SQLite. (см. http://blog.gebhardtcomputing.com/2007/11/marshal-utf8-strings-in-net.html для получения дополнительной информации о маршалинге)
Это было задумано как быстрое пошаговое руководство по сборке встроенной библиотеки в MonoDevelop / monotouch, и я надеюсь, что это кому-нибудь поможет.