В чем разница между встроенными бинарниками и связанными структурами
При использовании внешней инфраструктуры Xcode теперь имеет Встроенные двоичные файлы, а также Связанные рамки.
![введите описание изображения здесь]()
Когда вы загружаете внешнюю инфраструктуру и Finder- > перетаскиваете ее в Xcode, она помещает структуру в раздел Связанные рамки и библиотеки.
Когда вы создаете библиотеку с Carthage, рекомендуется перетаскивать ее в раздел Встроенные двоичные файлы.
Оба, похоже, работают с точки зрения связи, поскольку API становится доступным в любом случае, еще больше при добавлении фреймворка в раздел Встроенные двоичные файлы, он также автоматически добавляется в Связанные структуры и библиотеки.
Итак, кто прав? Карфаген или остальная часть Интернета? и почему существуют 2 варианта включения внешних ресурсов в проекты Xcode?
Ответы
Ответ 1
-
Связывание. Мы должны связать структуру, если мы используем какой-либо API, определенный в нем.
-
Встраивание. Этот процесс обеспечит добавление дополнительных фреймов в пакет приложений и потенциально поможет обмен кодами между приложением и любыми пакетами расширения. Мы внедряем только сторонние фреймворки, а не те, которые предоставляются iOS, поскольку они легко доступны в устройстве. Если мы внедряем, это означает, что нам также нужно будет связать их, чтобы Xcode мог скомпилировать и создать сборку. Когда приложение запускается в устройстве, тогда встроенная фреймворк будет загружаться в память при необходимости.
Ответ 2
Если вы встраиваете двоичный файл, он будет включен в ваш продукт. Если вы просто связываете библиотеку или фреймворк без встраивания, она не будет частью вашего продукта.
Однако в iOS8 все сторонние фреймворки должны быть "встроенными". Даже фреймворк, который разделяется между различными программами, должен быть "встроен" в каждую из этих программ. В случае, если оно было установлено на устройстве в общем расположении, любой другой процесс установки, использующий тот же "встроенный" код из общего расположения, может повторно использовать эту существующую установку. Это относится к iOS8, до iOS8 это было невозможно, и вне мира iOS этот ответ не будет точным.
Ответ 3
Linking
подробнее о Linker
, который работает во время компиляции или во время загрузки/запуска. Linker
скопировать a Library
в целевой двоичный файл. Поскольку Framework
является автономным, в этом случае Linker
отвечает за поиск и связывание Dynamic Framework
внутри пути системного загрузчика или за поиск и связывание внутри пакета.
Embedding
- это процесс копирования двоичного файла в целевой двоичный файл. В результате он будет расположен внутри.
Подробнее здесь
Ответ 4
Насколько я понимаю, встроенная двоичная система включает только динамическую структуру, доступную на iOS 8 и выше, в противном случае вы можете связать только статическую фреймворк.