Ответ
Есть несколько технологий, работу с которыми я стараюсь минимизировать:
- SwiftUI (в продакшене для сложных проектов): Несмотря на преимущества, фреймворк еще «сыроват». Часты критические изменения API между мажорными версиями iOS, что усложняет долгосрочную поддержку. Для сложных, долгоживущих проектов стабильность UIKit часто предпочтительнее.
- Core Data: Объектно-графовая модель и привязка к контекстам создают сложности с многопоточностью и отладкой. Для новых проектов я выбираю Realm или чистый SQLite с оберткой типа GRDB.
- Firebase (как основная бэкенд-инфраструктура): Созет сильную зависимость от Google, а оффлайн-логика может быть нетривиальной. Для полного контроля лучше кастомное решение на основе SwiftNIO или Vapor.
- Objective-C: Язык устарел, и его поддержка Apple постепенно сокращается. Работа с ним в legacy-проектах — это часто необходимость, а не выбор.
Пример проблемы с Core Data:
// Неочевидные ошибки при сохранении из-за состояния контекста.
// Ошибка теряется, если использовать try?, что затрудняет отладку.
try? context.save() // Может завершиться молчаливым сбоем.