Подтвердить что ты не робот

Поддерживает ли iOS 8 динамическое связывание?

До iOS7 Apple не поддерживала динамическое связывание из-за проблем с безопасностью. Повторное использование кода между разработчиками обычно основывалось на статических библиотеках, которые были созданы как часть исполняемого файла приложения.

Представление расширений в iOS8, похоже, немного изменило это, потому что расширения являются отдельными исполняемыми файлами. Обмен кодом между расширением и его содержащим приложением осуществляется через фреймворк. Apple говорит об этом в своих примечаниях к выпуску:

Рамки для iOS. Теперь разработчики iOS могут создавать структуры динамические. Рамки представляют собой набор кода и ресурсов для инкапсуляции функциональность, которая ценна для нескольких проектов. Каркасы отлично работают с расширениями, разделяя логику, которая может использоваться обоими основное приложение и прилагаемые расширения.

Акцент мой.

Источник: https://developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_6_0.html#//apple_ref/doc/uid/TP40014509-SW14

Кроме того, в руководстве по расширению расширений они объясняют, что вы можете совместно использовать код между расширением и содержащим приложение через "встроенную инфраструктуру".

Источник: https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1

Мой вопрос: что такое встроенная инфраструктура, как она отличается от динамической структуры, и действительно ли мы увидим правильную динамическую компоновку в iOS8? Вся документация, которую я прочитал, кажется двусмысленной.

4b9b3361

Ответ 1

"Встроенные" и "Динамические" рамки не относятся к одному и тому же аспекту фреймворков. Они не противоположны друг другу. Во-первых, давайте определим, какова структура: в Apple lingo фреймворк ссылается на некоторый скомпилированный код + публичные заголовки указанного кода.

  • Теперь динамическая структура - это структура, код которой был создан как динамическая библиотека. Это противоположность "статической" структуры, где код будет построен как статическая библиотека. В случае, если вам интересно, Wikipedia имеет очень приятное объяснение о том, какая разница между статической и динамической библиотекой.

  • И, наконец, встроенная инфраструктура - это инфраструктура, которая упакована в приложение, а не устанавливается в общесистемной среде, например, в "/System/Library/Frameworks".

Ответ 2

Встраиваемая инфраструктура - это просто та, которая включена в комплект приложения, а не глобальную структуру, которая установлена ​​в системном каталоге.

Ответ 3

Static framework - содержит static library и ресурсы

Dynamic framework - содержит dynamic library и ресурсы

System framework - это Dynamic framework который хранится на системном уровне и доступен для всех приложений. Apple оставляет за собой возможность создавать системные рамки для себя; в настоящее время сторонние разработчики не могут создавать системные платформы на iOS.

Embedded framework - это Dynamic framework который помещается в изолированную программную среду приложений и доступен только для этого приложения. Этот тип был создан в первую очередь для расширения для совместного использования общего кода и ресурсов (если целью развертывания является iOS8+).

Узнайте больше здесь

Ответ 4

Dynamic Frameworks не означает динамически связанную структуру. Приложения все еще работают в среде песочницы. Это не похоже на то, что ваши пользовательские рамки будут установлены с iOS. Каждое из ваших приложений, использующих общую структуру, которую вы разработали, будет скопировано внутри каждого пакета приложений.

Вы можете это увидеть сами. Перейдите в каталог Xedode Derived Data и внутри данных приложения, вы найдете все встроенные фреймворки.

Единственная новость с созданием Framework с iOS 8 по сравнению со статическими библиотеками заключается в том, что публичные файлы заголовков и активы попадают в рамки Framework. Если вы делаете такие вещи с более ранними версиями Xcode, вы будете помнить боль с поставкой публичных заголовков, а затем добавлением пути поиска в настройках Xcode и для активов, которые мы должны были передать в отдельном комплекте.

Это единственный недостаток использования Frameworks, который я вижу, заключается в том, что теперь мы не можем просто использовать lipo для создания толстой статической библиотеки для всех типов архитектур.

IMO Apple использует слово "динамический", чтобы предложить "независимый".

Смотреть WWDC2014 - Создание современных рамок для более подробной информации.