Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

База данных Realm для iOS

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Alex Grigorovich (you can also view the original English article)

Final product image
What You'll Be Creating

Введение

В этом уроке я расскажу вам как использовать мощное и элегантное решение, мобильную базу данных для ваших приложений iOS: Мобильная база данных Realm. Альтернатива Apple Core Data или SQLite с объектно-реляционной моделью (ORM), Мобильная база данных Realm предоставляет разработчикам простой и понятный путь для сохранения данных и запросов к ним.

Что такое мобильная база данных Realm?

Изначально спроектированная как настоящая объектно-ориентированная база данных, Realm отличается от других аналогичных библиотек, тем что рассматривает объекты данных как живые объекты — это значит, что объекты обновляются синхронно. Они мгновенно реагируют на изменения и легко сохраняются. Вам не придётся изучать крутые диаграммы которые есть в сценариях Core Data или SQLite. Вместо этого вы можете работать по настоящему объектно-ориентированным способом. Мобильная база данных Realm распространяется с открытым исходным кодом с 2016 года и бесплатна для разработчиков.

В дополнение к мобильной базе данных Realm, разработчик также предлагает мобильную платформу Realm, и её флагманский продукт PAAS дополняющий мобильную базу данных Realm серверным решением.

Мобильная платформа Realm, расширена синхронизацией данных в реальном времени и обработкой событий на стороне сервера, которые встроены в приложение. Разработчики используют платформу для создания приложений с мощной функциональностью, такие как мессенджеры, приложения для совместной работы и приложения с оффлайн функционалом. Платформа идеально подходит для адаптации под мобильные устройства существующих API, что позволяет легко создавать удобные и мощные приложения подключённые к устаревшим системам и сервисам. (realm.io)

Так что мобильная платформа Realm работает с сервером так же удобно, как и мобильная база данных Realm, обеспечивая автоматическую синхронизацию данных и обработку событий между клиентом и сервером, и в процессе абстракции уводит от сложностей, возникающих при работе с синхронизацией данных. Описание мобильной платформы Realm выходит за рамки данного урока, но я вернусь к нему в следующей статье.

Почему именно база данных Realm?

Помимо того, что она уберегает разработчиков от головной боли и изучения крутых диаграмм Core Data, мобильная база данных Realm предоставляет особые преимущества уже готовые к использованию.

Производительность & Безопасность потока

С позиции работоспособности было доказано что мобильная база данных Realm выполняет запросы и синхронизирует объекты значительно быстрее, чем Core Data, и осуществляет параллельный доступ к данным без проблем. Это значит, что несколько источников могут получить доступ к одному и тому же объекту без необходимости управлять блокировкой или каких-либо проблем с несогласованностью данных.

Шифрование

Мобильная база данных Realm предлагает службы шифрования для защиты базы на диске с помощью AES-256 + SHA2 64-разрядного шифрования.

Это позволяет все данные, хранящиеся на диске зашифровывать и расшифровывать с помощью алгоритма AES-256 и проверять с помощью технологии HMAC SHA-2. Ключ шифрования должен быть сгенерироан каждый раз, когда вы получаете экземпляр Realm.

Кроссплатформенность

В отличие от основных данных, мобильная база данных Realm действительно кроссплатформенная и поддерживает iOS, Android, JavaScript веб-приложения и Xamarin.

Реактивная природа

Тем способом которым работают живые объекты, вы можете присоединить элементы пользовательского интерфейса к модели данных и ваш интерфейса будет обновлён реактивно как и изменения в данных! Больше нет сложного кода синхронизации или путей логики, необходимых, как если бы вы работали с Core Data.

При совместной работе мобильной платформы Realm и сервером объектов Realm, разработчики получают дополнительные преимущества синхронизации своих данных с облаком, просто указав URL Realm объекта.

Даже используя мобильную платформу Realm, вам не придется беспокоиться о прерванных соединениях, так как Realm имеет встроенные возможности автономной работы и будет создавать очередь запросов изменения данных, для отправки на сервер.

Клиенты

Realm имеет многочисленных уважаемых клиентов, которые открыто применяют мобильную базу данных Realm, среди них Netflix и Starbucks.

Альтернативы мобильной базе данных Realm

Конечно, мобильная базы данных Realm это решение не только для работы в памяти приложений. Я уже упоминал Core Data принадлежащий Apple, и хотя он изначально сложный в изучении, тот факт, что он принадлежит Apple означает он будет де-факто решением для многих разработчиков iOS и будут иметь большое сообщество разработчиков и поддержку.

Решение, которое было схоже с мобильной базой Realm это Google Firebase — хотя это комбинированное решение клиента и сервера. Firebase так же прост в использовании и позволяет начать работу бесплатно, но расходы будут возрастать пропорционально использованию ресурсов. Недостаток у Firebase, это то что вы привязаны к их платформе, тогда как с Realm вы можете использовать свою собственную панель управления — или не использовать её вообще!

Ваше первое приложение Realm

Необходимые знания

Это руководство предполагает, что вы работали со Swift, но нет необходимости знания Core Data или других баз данных.

Также как и Realm мы будем использовать следующие части iOS:

  • UIKit: для визуализации наших данных
  • CocoaPods: сторонняя библиотека, которая будет использоваться для установки мобильной базы данных Realm

Цели этого урока

К концу этого урока вы разработаете простое приложение to-do, написанное на Swift с использованием мобильной базы данных Realm для сохранения данных локально. Вы получите полнофункциональный, созданный на Realm приложение to-do, и попутно изучите следующие концепции:

  1. Настройка библиотеки Realm для нового проекта с помощью CocoaPods
  2. Настройка App Delegate для импорта библиотеки Realm
  3. Создание «живых» объектов модели 
  4. Создание представления контроллеров и панели в пользовательском интерфейсе
  5. Подключение модели данных к контроллерам представления и предствлениям

Вы можете скачать исходный код из урока на GitHub.

Настройка проекта

Итак, давайте создадим наше приложение Realm: RealmDo. Мы собираемся создать новый проект Xcode, так что переходим дальше и создаём приложение Master-Detail.

Create a new project

Затем, если CocoaPods не установлен на вашем компьютере, вам нужно сделать это сейчас. Переходите в терминал и введите следующую команду:

$ sudo gem install cocoapods

Вы должны получить подтверждение что cocoapods установлен. Пока вы все еще в терминале, перейдите к только что созданному проекту Xcode и введите следующую команду, чтобы инициализировать новый Podfile:

$ pod init

Вы должны увидеть новый файл с именем Podfile, расположенный в корневом каталоге вашего проекта. В основном этот файл устанавливает библиотеки, которые мы хотим использовать в нашем проекте. Обратитесь к официальной документации CocoaPods для получения дополнительной информации о работе Podfiles.

Далее мы должны добавить библиотеку cocoapod для Realm, так что открывайте Podfile в текстовом редакторе и добавляйте следующие код # Pods for RealmDo:

Сохраните файл, выходите и набирайте:
pod install

После завершения установки библиотеки CocoaPods попросит закрывать наш проект Xcode и открыть рабочую область. Сделайте это, и мы будем готовы приступить к программированию. Мы начнем с AppDelegate.

Настройка делегата App Delegate для импорта библиотеки Realm

В нашем AppDelegate мы импортируем библиотеку Realm, поэтому добавьте следующую запись в файл AppDelegate.swift:

Оставьте класс, таким какой он есть, и обратим наше внимание на объект модели.

Модели "живых" объектов

Определение модели в Realm убийственна проста; вы просто создаёте класс логической модели. В нашем проекте мы будем хранить напоминания, поэтому давайте создадим класс под названием Reminder.swift, с помощью следующего кода:

В этом уроке нам нужно только модель Reminder, так что мы все сделали! Это очень просто и создание экземпляров модели так же проста, о чём мы узнаем позже.

Настройка контроллеров представления и панели

Теперь мы обратим наше внимание на представлении контроллеров, но прежде чем мы перейдем к классу MasterViewController.swift, давайте откроем Main.storyboard и добавим панель кнопки в верхний правый угол, назовём его Add, как показано ниже:

The app main storyboard

Проект был инициализирован Xcode в datasource и delegate связанным с контроллером представления, поэтому все, что нам нужно сделать, это добавить кнопку, которую мы только что создали для контроллера представления IBOutlet. Удерживая и перетаскивая кнопку к контроллеру представления в режиме сплит-просмотра, чтобы создать ссылку.

Link the button to the view controller

Инициализация Realm

Перейдём к файлу MasterViewController.swift, мы объявляем переменные которые нам нужны, эти действия выглядят примерно следующим образом:

Сначала в строке (1), мы объявляем Realm, переменную, на которую мы будем ссылаться чтобы добраться до нашего хранилища данных. Затем мы загружаем remindersList называемый объектами Realm для получения всего списка напоминаний. Наконец, мы инициируем переменную Realm, которую мы объявили в начале. Пока ничего слишком сложного!

Настройка View Delegate и Datasource

Далее, мы устанавливаем наши tableView методы delegate и datasource, следующим образом:

В строке (4) мы получаем количество remindersList списка объектов, которые установят счетчик на количество рядов в нашем разделе tableView.

Затем для каждой ячейки, мы получим свойство живого объекта Reminder для создания метки, а также как отметки выполнен объект или нет.

Записи изменений в базу данных

Мы хотим, чтобы наши пользователи могли переключить элемент как выполненный (и не выполненный), который показывает это, изменив цвет метки. Мы также хотим сделать редактируемой представление таблицы (пользователи смогут удалить ячейки свайпом справа налево), которые мы осуществляем, добавив следующий код:

В строке (6) это первый раз, когда мы записываем в нашу базу данных, которую вы можете выполнить внутри контейнера self.realm.write. Обратите внимание, что все, что вам нужно сделать с экземпляром объекта это установить его значение, и ничего больше. Поэтому в данном случае мы переключаем значение done, делая его item.done =! item.done.

Строка (7) это наш второй пример написания запроса в нашу базу данных: мы удалим объект из базы данных, удалив объект экземпляра.

Добавление новых объектов

Мы сделали большой прогресс, и на самом деле мы почти закончили! Теперь мы можем загружать, редактировать и удалять наши напоминания, но нам не хватает одного из важных действий: Добавление нового напоминания. Чтобы выполнить это, создайте новый метод @IBAction и привяжите ваш макет кнопки Добавить из панели к методу.

Мы собираемся создать простой AlertViewController в нашем примере, но в качестве отдельного упражнения, вместо этого попытайтесь улучшить приложение путем модернизации контроллера в новый вид.

Теперь, переходите дальше и добавьте следующий код:

В строке (8) мы создаем новый экземпляр напоминания и задаём его свойства. Затем в строке (9) мы добавляем напоминание через self.realm.add(item).

Тестирование приложения

Теперь давайте проверим наше приложение, соберём его и запустим в симуляторе. Перейдите вперёд и добавьте два напоминания, установите одно из них как выполненное нажав на него. Если вы выйдите из вашего приложения и снова откроете его обратно, ваши записи должны быть на месте.

The completed app

Браузер Realm

И вот оно! Практически без обучения, минуя сложности работы с основными данными мы получили полнофукнциональную серверную часть на девайсе. Это и есть база данных Realm. Можно также проверить, что данные хранятся на устройстве, загрузив браузер Realm, macOS приложение, которое позволяет просматривать, осуществлять отладку и редактировать объекты данных Realm.

Скачайте приложение из Mac App Store и откройте базу данных Realm, которая расположена в папке CoreSimulator/Devices/appID/data/.... Db.realm файл, который вы ищете.

Finding the Realm database

Открыв его, вы сможете не только просматривать данные, но также редактировать и добавлять новые. Вперёд, попробуйте!

Editing the database with Realm Browser

Заключение

В этом руководстве вы узнали о базе данных Realm и почему она является мощным инструментом для разработчиков iOS. Также, мы кратко коснулись её серверной части, мобильной платформы Realm, о которых мы расскажем подробнее в отдельной статье.

Затем мы создали простое приложение "напоминалку", на основе базы данных Realm. Всего в нескольких десятках строк кода мы смогли:

  1. Установили "живую" объектную модель для "напоминалки"
  2. Привязали наш вид контроллера к модели данных
  3. Объявляли, регистрировали, загружали, добавляли и удаляли из базы данных Realm

И наконец, вы увидели как использовать браузер Realm для отладки и просмотра данных.

Это было лишь только введение в сферу базы данных Realm, но вы можете использовать его как отправную точку для перехода на более сложные темы. В качестве следующих шагов вы можете обратить внимание на статьи:

Обязательно изучите некоторые из продвинутых тем в упомянутой выше документации, такие как, как работа со связями данных, тестирование объектов Realm, заголовки и шифрование.

И пока вы ещё здесь, не забудьте почитать некоторые из наших статей на тему разработки приложений для iOS!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.