- PVSM.RU - https://www.pvsm.ru -

Установка SQLite.Swift (CocoaPods)

Введение

В данной статье мне бы хотелось рассказать об одном способе связывания Swift с базой данных. Хочу отметить, что в целом материал не новый, но основное в нем — это пошаговая инструкция как установить SQLite.Swift [1] и как добавить базу данных в свой проект, что может пригодиться начинающим.

Предисловие

При написании своего приложения для IOS было необходимо использовать существующую таблицу. Само приложение очень простое. Существует некая таблица с определенным количеством строк и столбцов. Каждому столбцу соответствует свое текстовое поле (TextField). Пользователь вводит число в любой TextField нажимает «Готово» и во всех остальных текстовых полях автоматически подгружаются значения из таблицы. В случае если такого числа нет, то необходимо выполнять интерполяцию чисел взятых из двух ближайших строк.
Приложения простое, вот только возникла проблема: как связать базу данных и Swift [2].


На просторах интернета очень много различных роликов и статей о том, каким образом можно связать базу данных SQLite [3] и Swift [2]. В основном попадались такие варианты, как использование FMDB [4], или SQLite.Swift [1], или Core Data [5], но, к сожалению, не удалось найти полностью пошаговой инструкции (если так моно выразиться). Для решения своей задачи был выбран SQLite.Swift [1]t. О нем и пойдет речь далее.

Как указано на GitHub [6], существует три способа установки SQLite.Swift: Carthage [7], CocoaPods [8] и Swift Package Manager [9]. При написании приложения был выбран второй способ: CocoaPods [8].

Для начала можно создать новый проект в Xcode [10] (я назову его «myProject») используя шаблон «Single View App». Вы так же можете использовать уже Ваш существующий проект.

Установка SQLite.swift

И так, открываем «Терминал» на Вашем Mac через Launchpad или Spotlight и поехали:
1. Вводим ls -la и получаем содержимое каталога, который выбран на данный момент.
image
2. Далее необходимо указать, где расположен наш проект. Для удобства можно зайти в папку нашего проекта, нажать на image и во всплывающем окне выбрать «Скопировать путь до <Ваша папка>». В моем случае это окно выглядит вот так:
image
Возвращаемся в терминал и вводим cd и вставляем (cmd+V) скопированный путь. Повторно используем ls -la для просмотра содержимого.
image
3. Теперь нам необходимо установить CocoaPods. Для этого вводим в Терминале: Sudo gem install cocoapods
image
4. Вводим пароль от Вашего пользователя (пароль НЕ печатается и это нормально, после ввода возможно потребуется нажать Enter). Установка займет какое-то время. Также стоит отметить, что количество установленных файлов может отличаться от моего.
image
5. По завершению установки вводим Pod init и проверяем все ли в порядке командой ls -la. В полученном списке должен находиться Podfile.
image
6. Далее вводим nano Podfile и попадаем в наш Podfile.
image
7. Здесь меняем версию платформы IOS. После строки «use_frameworks!» вводим следующий код (внимательно следите за регистрами):
pod ‘SQLite.swift’, :git => ‘https://github.com/stephencelis/SQLite.swift.git’, :branch => ‘master’
image
Нажимаем для выхода из «GNU nano» Ctrl+X, затем подтверждаем сохранение «Y», а после нажимаем «Enter» и попадаем обратно в Терминал.

8. Далее вводим cat Podfile. Терминал нам выдаст то, что мы вводили в «GNU nano»
image
9. Для скачивания и установки вводим Pod install. Здесь же мы видим, что если Ваш проект был открыт, то Терминал попросит закрыть его.
image
10. Вновь проверяем содержание нашей папки с проектом: ls -la
image
11. Теперь открываем наш проект. Можно как обычно через Xcode, а можно и через Терминал: open myProject.xcworkspace
image

Установка SQLite.Swift [1] в наш проект завершена и мы можем закрыть наш Терминал.

Напоследок, расскажу о том, как добавить базу данных в проект.

Добавление базы данных в проект

На самом деле существуют различные способы добавления или создания базы данных. О них описано в документации [11]. Я же покажу это на примере «Read-Only Database [12]».

1. Для начала в нашем проекте в Xcode можно создать новую папку, например: Database. Это необязательно, но в дальнейшем поможет Вам легче ориентироваться в проекте.
image
2. Теперь перетаскиваем нашу базу данных (я назвал её TableDB, в формате .db) в эту папку. Стоит отметить, что файл должен быть формата .db, .sqlite, .sqlite3, .db3.
image
3. Создаем новый Swift-файл и добавляем в него следующий код:
import SQLite
class Database {
static let shared = Database()
public let connection: Connection?
private init(){
do {
let dbPath = Bundle.main.path(forResource: "tableVukalovich", ofType: "db")!
connection = try Connection(dbPath)
} catch {
connection = nil
let nserror = error as NSError
print ("Cannot connect to Database. Error is: (nserror), (nserror.userInfo)")
}
}
}

Данный код сначала импортирует модуль SQLite. Затем создается новый класс со статической и публичной переменными. После чего происходит инициализация следующим образом:
3.1 Пытаемся установить соединение с базой данных;
3.2 В случае «успеха» соединение установиться;
3.3 Если же не удалось установить соединение, то выдай ошибку.
image
4. И завершающим шагом является добавление нашей базы данных в TARGETS, а именно в Build Phases в строке Copy Bundle Resources.
image
Нажимаем cmd+B и видим, что ошибок в нашем проекте нет.

Заключение

Таким образом я использовал SQLite.Swift [1] для решения своей задачи. Огромное спасибо хочу сказать разработчику Stephen Celis [13] за разработку и Вам, дорогие читатели! Надеюсь, данный материал кому-нибудь пригодиться. Всего хорошего!

Автор: друже

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/sqlite/299613

Ссылки в тексте:

[1] SQLite.Swift: https://github.com/stephencelis/SQLite.swift

[2] Swift: https://www.apple.com/ru/swift/

[3] SQLite: https://www.sqlite.org/index.html

[4] FMDB: https://github.com/ccgus/fmdb

[5] Core Data: https://developer.apple.com/documentation/coredata

[6] GitHub: https://github.com

[7] Carthage: https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#carthage

[8] CocoaPods: https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#cocoapods

[9] Swift Package Manager: https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#swift-package-manager

[10] Xcode: https://developer.apple.com/xcode/

[11] документации: https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md

[12] Read-Only Database: https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#read-only-databases

[13] Stephen Celis: https://github.com/stephencelis

[14] Источник: http://habrahabr.ru/sandbox/125036/