Ответ
Линковка (Linking) — это этап сборки приложения, на котором компоновщик (linker) объединяет скомпилированные объектные файлы (.o) и библиотеки, разрешая ссылки между ними, чтобы создать исполняемый файл или библиотеку.
Типы линковки в iOS/macOS разработке
| Тип | Описание | Пример |
|---|---|---|
| Статическая | Код библиотеки включается напрямую в бинарник приложения на этапе сборки. | libStaticLibrary.a |
| Динамическая | Библиотека загружается в память во время выполнения (runtime). Приложение содержит лишь ссылку на неё. | UIKit.framework, libSwiftCore.dylib |
Практический пример
// Импорт фреймворка, который будет динамически слинкован
import UIKit
import MyStaticLibrary // Предполагается, что это статическая библиотека
Ключевые особенности Swift
- Стабильный ABI (Application Binary Interface): начиная с Swift 5 и iOS 12.2, скомпилированные Swift-библиотеки могут быть использованы разными версиями компилятора, что упрощает распространение бинарных зависимостей.
- Модульность: директива
importзагружает скомпилированный модуль (.swiftmodule), что ускоряет компиляцию. - Атрибут
@_implementationOnly: позволяет импортировать модуль только для реализации текущего модуля, скрывая его от клиентского кода.@_implementationOnly import InternalHelperLibrary
Распространённые проблемы
- Дублирование символов: возникает при статической линковке одной и той же библиотеки в несколько зависимостей.
- Неразрешённые символы: линковщик не может найти реализацию объявленной функции или класса (обычно из-за отсутствующей библиотеки или фреймворка).
- Смешивание Swift и Objective-C: требует корректной настройки bridging header и может усложнять линковку.
Процесс линковки управляется настройками Other Linker Flags (например, -ObjC) в Xcode.