Лекция 13 CS193P Spring 2020 — Постоянное хранение (Persistence).

На Лекции 13 курса Стэнфорда CS193p — «Developing  Application for iOS» Spring 2020 («Разработка приложений для iOS». Весна 2020) Пол Хэгерти продолжает излагать темы, которые не являются обязательными на этом курсе, но могут реально понадобится студентам в создании полноценных финальных проектов. Рассматривается уже третья из таких дополнительных тем, а именно обзор всех возможных систем постоянного хранения (Persistence) в iOS. 

  • UserDefaults. Простая. Ограниченная (только Property Lists). Очень небольшая по объему.
  • Codable / JSON. Понятный способ преобразования практически любой структуры данных в формат JSON обмена данными и наоборот.
  • UIDocument. Интегрирует приложение Files и данные, воспринимаемые пользователем как «документы” в ваше приложение. До iOS 13 являлся UIKit ориентированным, в iOS 14 в SwiftUI 2.0 появился DocumentGroup.
  • Core Data Мощная. Объектно-ориентированная. Элегантная интеграция со SwiftUI.
  • Cloud Kit. Запоминание данных в базе данных, расположенной в «облаке» (то есть в интернете), которая работает полностью асинхронно. Следовательно, данные появляются на любых устройствах пользователя. Это очень простая в использовании база данных, у нее есть основные операции базы данных, но не такие полноценные как у Core Data, однако она отлично работает с Core Data (так что ваши данные в Core Data могут также появиться на всех устройствах)
  • FileManager/URL/DataЗапоминание данных в Unix файловой системе в iOS.

Все эти способы хранения, за исключением Codable / JSON, имеют API ещё ДО-Swift эпохи. 

Мы уже видели примеры использования UserDefaults в демонстрационном примере Emoji Art на Лекции 8 и Core Data  в демонстрационном примере Enroute на Лекции 12. На этой лекции профессор подробно рассматривает использование Cloud Kit для хранения данных в «облачной» базе данных и iOS файловую систему хранения данных.

Профессор показывает все этапы работы с «облачной» базой данных в Cloud Kit — её «включение», создание Записей, изменение их Полей, Выборка Записей, Постоянные Запросы (Standing Queries) c подпиской (Subscription) и уведомлениями Push NotificationsК сожалению, работа с Cloud Kit на Лекции 13 рассматривается только на слайдах, но всё, что связано с iCloud, создавалось ещё до появления SwiftUI и даже до появления Swift, поэтому профессор отсылает нас к более ранней версии этого курса CS193P Spring 2016, в котором представлен демонстрационный пример работы с Cloud Kit. Оттуда можно взять основные идеи.

Работа с файловой системой iOS как раз наоборот рассматривается на демонстрационном примере, который посвящен замене системы хранения UserDefaults для хранения «документов» в демонстрационном примере Emoji Art на файловую систему, управляемую FileManager, опирающегося на URL и Data, а также на протокол Codable и JSON. Вы увидите, как можно использовать Data и URL для чтения и записи данных в файловую систему, как получить содержимое директории, как добавлять, удалять и переименовывать файлы.

Профессор является большим поклонником приложений, основанных на документах (Document Based App) и сильно сожалел о том, что в iOS 13 в SwiftUI не было возможности работать с UIDocument, который предназначен для данных, которые пользователь воспринимает как «документы», а именно таким и является наше приложение EmojiArt.

И, о чудо! В  iOS 14 и SwiftUI 2.0 появляется «обертка» UIDocument в виде DocumentGroup, которая способна превратить EmojiArt в много-документное приложение, которое работает как “родное” приложение в среде Files как на iOS, так и на Mac. И профессор предоставляет в наше распоряжение уже после окончания курса великолепный вариант приложения EmojiArt на основе DocumentGroup, который работает в Xcode 12 и iOS 14. Надо сказать, что в интернете практически отсутствует информация  о полноценном применении DocumentGroup, так что это просто подарок тем, кто создает приложения, основанные на документах.

Код демонстрационного примера с файловой системой для Лекции 13 находится на сайте курса CS193P и на Github для iOS 13 в папке EmojiArt L13.

Русскоязычный неавторизованный конспект Лекции 13, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.