Формат файла 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
, расположенная на целевом устройстве. В результате вы не должны упаковывать динамическую библиотеку в ваш пакет. Имеет размерный эффект.
Framework
aka 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]
[Динамический компоновщик]