Использовали ли вы фреймворки поверх Core Data
Что проверяют
Есть ли у вас реальный опыт хранения данных на iOS и понимаете ли вы, что происходит под обёрткой: контексты, потоки, миграции. Следом обычно спрашивают, почему выбрали обёртку, а не чистый Core Data, и как у вас были устроены фоновые контексты.
Как отвечать
Сначала уточните, что считается «поверх Core Data», и называйте инструменты точно:
- SwiftData: фреймворк Apple с iOS 17, модели через макрос
@Model,ModelContainer,ModelContext,@Queryв SwiftUI. Хранилище у него построено на Core Data, и оба фреймворка умеют работать с одним файлом базы; - CoreStore: сторонняя обёртка с типобезопасными запросами, транзакциями и пошаговыми миграциями;
- MagicalRecord: был популярен во времена Objective-C и давно не развивается. Если он встречался в легаси, расскажите, как с ним жили или как уходили;
- своя прослойка: протокол репозитория поверх
NSPersistentContainer,viewContextдля интерфейса и фоновые контексты черезperformBackgroundTask.
Realm и GRDB назовите отдельно: это альтернативы Core Data со своим хранилищем (у GRDB это SQLite), а не надстройки над ним. Про Realm полезно знать, что в 2024 году MongoDB объявила о прекращении развития Atlas Device Sync и мобильных SDK, поэтому в новые проекты его берут с оглядкой.
Каркас ответа: проект, что хранили и в каком объёме, почему взяли именно этот слой, какую проблему он решил, во что обошёлся. Детали и цифры нужны свои: сколько сущностей, сколько было миграций. Если обёрток не было, это нормальный ответ: «работал с чистым Core Data через NSPersistentContainer, его API закрывал наши задачи», а дальше покажите, что знаете устройство контекстов.
Где спотыкаются
Называют Realm фреймворком поверх Core Data. Это отдельная база, и такая ошибка сразу выдаёт поверхностный опыт.
Не знают, что под обёрткой. Передают NSManagedObject между потоками и ловят падения, хотя передавать нужно NSManagedObjectID и заново получать объект в своём контексте.
Хвалят обёртку без цены: лишняя зависимость, отставание от новых возможностей iOS, заброшенная библиотека в легаси, а у SwiftData ещё и минимальная версия iOS 17.