При использовании внешней структуры Xcode теперь имеет раздел Embedded Binaries, а также раздел Linked Frameworks .
Когда вы загружаете внешний фреймворк и Finder-> перетаскиваете его в Xcode, он помещает фреймворк в раздел « Связанные фреймворки и библиотеки ».
Когда вы создаете библиотеку с помощью Carthage, рекомендуется перетащить ее в раздел Embedded Binaries .
Оба, похоже, работают с точки зрения связывания, поскольку API становится доступным в любом случае, а при добавлении фреймворка в раздел встроенных двоичных файлов он также автоматически добавляется в раздел связанных фреймворков и библиотек .
Итак, кто прав? Карфаген или остальной Интернет? и почему есть 2 варианта включения внешних ресурсов в проекты Xcode?
Ответы:
Связывание - мы должны связать фреймворк, если мы используем какой-либо определенный в нем API.
Встраивание - этот процесс гарантирует, что добавленная структура будет встроена в пакет приложения, и потенциально поможет обмениваться кодом между приложением и любыми пакетами расширений. Мы встраиваем только сторонние фреймворки, а не те, которые предоставляются iOS, поскольку они легко доступны на устройстве. Если мы внедряем, это означает, что нам также нужно будет связать с ними, чтобы Xcode мог скомпилировать и создать сборку. Когда приложение запускается на устройстве, встроенная структура будет загружена в память при необходимости.
источник
embed
а неlink
он? Наоборот? И почему?Если вы вставите двоичный файл, он будет включен в ваш продукт. Если вы связываете только библиотеку или фреймворк, не встраивая их, они не будут частью вашего продукта.
Однако в iOS8 все сторонние платформы должны быть «встроены». Даже структура, которая является общей для различных программ, должна быть «встроена» в каждую из этих программ. В случае, если он был установлен на устройстве в совместно используемом месте, любой другой процесс установки с использованием того же «встроенного» кода из совместно используемого места может повторно использовать эту существующую установку. Это характерно для iOS8, до iOS8 это было невозможно, и за пределами мира iOS этот ответ не будет точным.
источник
Linking
больше обLinker
этом работает во время компиляции или загрузки / выполнения.Linker
скопироватьLibrary
в целевой двоичный файл. ПосколькуFramework
является автономным,Linker
в этом случае он отвечает за поиск и связываниеDynamic Framework
внутри пути системного загрузчика или за поиск и связывание внутри пакета .Embedding
это процесс копирования двоичного файла в целевой двоичный файл. В результате он окажется внутри.Подробнее здесь
источник
Насколько я понимаю, встроенный двоичный файл включает только динамическую структуру, доступную в iOS 8 и выше, в противном случае вы можете связать только статическую структуру.
источник