Оказалось, что проблема была в самой SQLite.swift
, как я и подозревал. Я обнаружил следующие SQLite.swift
проблемы на GitHub, сообщавшие об этой проблеме несколько дней назад.
Проблема заключалась в следующем, как описано репортером, tanzolone :
В Xcode 10.2 beta 4 функции macro # показывают другое поведение. Как
SQLite.swift использует #function в различных подпрограммах для
составление запросов SQLite, несколько ошибок, связанных с неверным SQLite
утверждения, кажется, введены.
Я только что выполнил тесты SQLite.swift с Xcode 10.2 beta 4 и
с этой проблемой связано несколько сбоев.
Пример выглядит следующим образом:
В следующей вспомогательной функции (строка Helpers.swift 107):
func wrap<T>(_ expression: Expressible, function: String = #function) -> Expression<T> {
return function.wrap(expression)
}
при вызове с
static func count(_ star: Star) -> Expression<UnderlyingType>
значение функции при запуске в Xcode 10.2 beta 4 равно
count(_:)
вместо count
. Это приводит к неверному SQLite
операторы типа SELECT count(_:)(*) myTable
.
Сопровождающие проекта теперь решили эту проблему не позднее HEAD
из master
(в настоящее время 1a908a7da11852f252e7c6b6366a4d9f8a7d5272 ).
В моем проекте строка, которая требовала обновления, была следующей в моем Podfile
:
pod 'SQLite.swift/SQLCipher', :git => 'https://github.com/stephencelis/SQLite.swift.git', :commit => 'ed8f603f856e9f1f4adb76b63b7234547257ec5a'
Это было обновлено до:
pod 'SQLite.swift/SQLCipher', :git => 'https://github.com/stephencelis/SQLite.swift.git', :branch => 'master'
В качестве альтернативы можно ссылаться на сам коммит:
pod 'SQLite.swift/SQLCipher', :git => 'https://github.com/stephencelis/SQLite.swift.git', :commit => '1a908a7da11852f252e7c6b6366a4d9f8a7d5272'
Чтобы обновить эту ссылку, я предпринял следующие шаги CLI в корне моего проекта, чтобы удалить, обновить и установить модули проектов:
$ pod cache clean --all
$ rm -rf Pods/
$ rm Podfile.lock
$ open -a Xcode Podfile # Updated the SQLite.swift project ref to the above
$ pod install
Это решило проблему, и исключение больше не выдается.