Формат файла Mach-O (объект Mach - .o)
В мире iOS каждый исходный файл преобразуется в объектные файлы - ABI [About] Mach-O file [About], который будет упакован в окончательный исполняемый пакет (например, приложение, инфраструктура ...), файл (например, библиотека ...) и это поведение определяется Mach-O type[О]
Packageкаталог, который ведет себя как файл - opaque file. Он создан для удобства пользователя, чтобы усложнить внесение некоторых изменений во внутреннюю структуру, которые могут вызвать непредсказуемое поведение программы. Пакет используется в Document Packageили с Bundle. Ты можешь использоватьShow Package Contents в Finder
Bundleкаталог с определенной структурой для организации двоичного кода (исполняемый код) и ресурсов для этого кода (например, изображения, перья ...). Пакет содержит файл Info.plist[About] . Пакет был создан для разработчиков . Также это может быть упаковано. Существует несколько типов комплектов:
application bundle - Application target
framework bundleи versioned bundleкак подтип -Framework Target
loadable bundle(иначе plug-in bundle) -Bundle target (Пакет тестирования пользовательского интерфейса, Пакет модульного тестирования)
- другие (
dSYM[О] расслоение)
Application- .ipa, .app[О] -packaged application bundle - запускаемая программа.
Tests- packaged loadable bundleкоторый используется для проверки двоичного файла. Архитектура плагина позволяет нам добавлять новую функциональность (тестовые случаи) в виде отдельного модуля в существующий бинарный файл
Библиотеки и рамки
Мартин Фаулер на InversionOfControl
Библиотека - это, по сути, набор функций, которые вы можете вызывать, в наши дни обычно организованные в классы. Каждый звонок выполняет некоторую работу и возвращает управление клиенту.
Платформа воплощает в себе некоторый абстрактный дизайн с большим количеством встроенного поведения. Чтобы использовать его, вам нужно вставить свое поведение в различные места в платформе либо путем создания подклассов, либо путем подключения ваших собственных классов. Код фреймворка затем вызывает ваш код в этих точках. Основной элемент управления программы перевернут, отодвинут от вас в рамки. (Инверсия контроля)
Библиотеки и фреймворки на iOS
Libraryпредставляет собой набор объектных файлов Mach-O [проверьте статические или динамические], скомпилированных для одной или нескольких архитектур.
Static library- .a(он же статическая архивная библиотека, статическая связанная общая библиотека [doc] ) - когда вы добавляете в приложение статический компоновщик во время компиляции объединит объектные файлы из библиотеки и упакует их вместе с объектными файлами приложения в один исполняемый файл. файл. Недостатком является большой выходной файл
Начиная с Xcode 9.0, поддерживается статическая библиотека Swift.
Dynamic library- .dylib( так называемый динамический общей библиотеки разделяемый объект, динамически подключаемая библиотека [документ] ) является динамически связана с исполняемом приложения при загрузке или выполнения , но не копируется в него. На практике пакет приложения будет содержать папку Frameworks с .dylibфайлом. Все системные библиотеки iOS и macOS есть dynamic. Недостатком является медленное время запуска, поскольку все динамические библиотеки должны быть скопированы и связаны.
[Статическое и динамическое связывание]
Text-based stub library- .tbd[О программе] , это текстовая заглушка dynamic library, расположенная на целевом устройстве. В результате вы не должны упаковывать динамическую библиотеку в ваш пакет. Имеет размерный эффект.
Frameworkaka binary framework- .frameworkэто not packaged framework bundle(чтобы позволить разработчикам легко взглянуть на заголовки и ресурсы), который содержит скомпилированную static or dynamicбиблиотеку, заголовочные файлы и ресурсы.
Static frameworkсодержать static libraryпакет с его ресурсами.
Dynamic frameworkсодержит dynamic libraryи ресурсы. В дополнение к этому, динамический каркас может включать в себя разные версии одной и той же динамической библиотеки в одном комплекте ( versioned bundle).
[Статический против динамического каркаса]
Embedded frameworkэто то, dynamic frameworkчто живет в песочнице приложения. Этот тип был создан в первую очередь для расширения для совместного использования общего кода и ресурсов. Это доступно, когда целью развертывания является iOS 8+.
Umbrella framework [Совокупная цель] - это структура, которая содержит другие структуры. Это официально не поддерживается на iOS, и поэтомуразработчикам не рекомендуется создавать их [Официальный документ] . В действительности это набор под-фреймворков (или вложенных фреймворков). Когда вы создаете фреймворк с зависимостью, потребитель (например, приложение) отвечает за добавление этой зависимости вместе с вашей фреймворком в проект. Как разработчик, естественно попытаться найти способ передать эту обязанность от потребителя к вам. В результате вы думаете, чтоUmbrella frameworkэто спасение, но обычно это приводит к серьезным проблемам с управлением версиями и сложностью их создания и поддержки.
Fake Framework- является результатом определенных операций под static libraryсозданием пакета с .frameworkрасширением, который будет вести себя как dynamic framework. Эта техника использовалась, когда XCode не поддерживал создание структуры, так как не имел шаблона структуры. Одна из реализаций поддельных рамок . С Xcode 6 Apple добавила поддержку фреймворка iOS.
Modular Framework[About] -@importэто фреймворк, который содержит.modulemapфайл внутри. Модуль может содержать подмодули. Основным преимуществом является то, что вы экономите время сборки сModular Framework.
Universal Library or Framework(он же Fat) [lipo] [Aggregate target] содержит несколько архитектур. Например, ваша сборка релиза должна поддерживать некоторую арку, которую вы можете регулировать с помощью Build Active Architecture Only [ONLY_ACTIVE_ARCH]
Dependency[О программе] Вы можете использовать сторонний код как часть вашей цели. Это позволяет вам повторно использовать код из множества источников, таких как - другой проект, проект в той же рабочей области, другая цель, библиотека, фреймворк и т. Д.
Как создать и использовать статическую библиотеку:
Как построить и использовать динамический фреймворк [сменить на статический]
[Система сборки XCode]
[Компоненты XCode]
[Динамический компоновщик]