Есть ли вопросы по интеграции с командой Core и их ABI
Что проверяют
Этим вопросом часто заканчивают интервью, и проверяют две вещи: вовлечены ли вы и понимаете ли, что такое бинарная совместимость. Ответ «вопросов нет» тут проигрышный. Если спросите по делу, следом могут попросить объяснить, что именно ломает ABI.
Как отвечать
Сначала коротко покажите понимание. API это контракт на уровне исходников, ABI на уровне скомпилированного кода: раскладка структур, соглашения о вызовах, имена символов. У Swift ABI стабилен на платформах Apple с версии 5.0, стабильность модулей (.swiftinterface) появилась в 5.1. Бинарный фреймворк, который переживёт обновление компилятора, собирают с BUILD_LIBRARY_FOR_DISTRIBUTION = YES, то есть с library evolution.
Потом задайте несколько вопросов, которые реально влияют на вашу работу:
- как поставляется Core: исходниками через SPM или бинарным XCFramework, статическая или динамическая линковка;
- включён ли library evolution: если нет, обновление Xcode у одной команды требует синхронной пересборки у всех;
- как версионируются изменения: semver, пометки
@available(*, deprecated), срок жизни старого API, кто и как сообщает о ломающих правках; - что внутри: если Core на C++, как устроена граница. C++ ABI между компиляторами не гарантирован, поэтому обычно через C-интерфейс, обёртки на Objective-C++ или прямой interop Swift и C++;
- как проверяется совместимость: контрактные тесты в CI, кто разбирает крэш, если он в коде Core.
Если с бинарными фреймворками вы не работали, скажите прямо и спросите, как новичок обычно входит в интеграцию. Это честно и тоже показывает интерес.
Где спотыкаются
Говорят, что вопросов нет. Интервьюер сам подсказал тему, и молчание читается как равнодушие к ней.
Путают ABI с API. Смена сигнатуры публичной функции ломает оба контракта, а новое хранимое свойство в структуре без library evolution ломает только ABI: исходники клиентов компилируются как раньше, а старые бинарники падают.
Спрашивают только о процессе, созвонах и чатах, и ни слова о версиях, линковке и сборке. Для iOS-разработчика это выглядит как незнание того, где на практике ломается интеграция.