Formato de arquivo Mach-O (Mach Object - .o
)
No mundo iOS, todos os arquivos de origem são convertidos em arquivos de objetos - arquivo ABI [About] Mach-O [About], que será empacotado em um pacote executável final (por exemplo, aplicativo, framework ...), arquivo (por exemplo, biblioteca ...) e seu comportamento é determinado por Mach-O type
[Sobre]
Package
é um diretório que se comporta como um arquivo - opaque file
. É criado para a experiência do usuário complique algumas alterações na estrutura interna que podem causar comportamento imprevisível do programa. O pacote é usado em Document Package
ou com um Bundle
. Você pode usar Show Package Contents
em um localizador
Bundle
é um diretório com uma estrutura específica para organizar um binário (código executável) e recursos para esse código (por exemplo, imagens, pontas ...). O pacote contém Info.plist
[Sobre] arquivo . O pacote foi criado para a experiência do desenvolvedor . Também pode ser empacotado. Existem vários tipos de pacote configurável:
application bundle
- Application target
framework bundle
e versioned bundle
como um subtipo -Framework Target
loadable bundle
(aka plug-in bundle
) - Bundle target
(Pacote de testes de interface do usuário, Pacote de testes de unidade)
- outros (
dSYM
[Sobre] pacote)
Application
- .ipa
, .app
[Sobre] -packaged
application bundle
- programa iniciável.
Tests
- packaged
loadable bundle
que é usado para testar um binário. A arquitetura de plug-in nos permite adicionar uma nova funcionalidade (casos de teste) como um módulo separado aos binários existentes
Bibliotecas e estruturas
Martin Fowler em InversionOfControl
Uma biblioteca é essencialmente um conjunto de funções que você pode chamar, atualmente organizado em classes. Cada chamada realiza algum trabalho e retorna o controle ao cliente.
Um Framework incorpora algum design abstrato, com mais comportamento incorporado. Para usá-lo, você precisa inserir seu comportamento em vários locais do framework, subclassificando ou conectando suas próprias classes. O código da estrutura chama seu código nesses pontos. O controle principal do programa é invertido, afastado de você para o framework. (Inversão de controle)
Bibliotecas e estruturas no iOS
Library
é uma coleção de arquivos de objetos Mach-O [verifique estáticos ou dinâmicos] compilados para uma ou mais arquiteturas.
Static library
- .a
(também conhecida como biblioteca de archive estático, biblioteca compartilhada vinculada estática [doc] ) - Quando você o adiciona ao aplicativo, o vinculador estático durante o tempo de compilação mescla os arquivos de objeto da biblioteca e os empacota junto com os arquivos de objeto do aplicativo em um único executável Arquivo. A desvantagem é um grande arquivo de saída
A partir do Xcode 9.0, a biblioteca estática Swift é suportada.
Dynamic library
- .dylib
(também conhecida como biblioteca compartilhada dinâmica, objeto compartilhado, biblioteca vinculada dinamicamente [doc] ) é vinculada dinamicamente ao executável do aplicativo em carga ou tempo de execução , mas não é copiada para ele. Na prática, o pacote do aplicativo conterá a pasta Frameworks com o .dylib
arquivo. Todas as bibliotecas do sistema iOS e macOS são dynamic
. A desvantagem é um tempo de inicialização lento, pois todas as bibliotecas dinâmicas devem ser copiadas e vinculadas.
[Ligação estática vs dinâmica]
Text-based stub library
- .tbd
[Sobre] , é um esboço dynamic library
que está localizado no dispositivo de destino. Como resultado, você não deve empacotar uma biblioteca dinâmica em seu pacote. Tem um efeito de tamanho.
Framework
aka binary framework
- .framework
é um not packaged framework bundle
(para permitir que os desenvolvedores analisem facilmente cabeçalhos e recursos) que contém uma static or dynamic
biblioteca compilada , arquivos e recursos de cabeçalho.
Static framework
conter um static library
pacote com seus recursos.
Dynamic framework
contém os dynamic library
recursos Além disso, a estrutura dinâmica pode incluir versões diferentes da mesma biblioteca dinâmica em um único pacote configurável ( versioned bundle
)
[Estrutura estática versus dinâmica]
Embedded framework
é um dynamic framework
que vive na caixa de areia do aplicativo. Esse tipo foi criado antes de tudo para a extensão compartilhar códigos e recursos comuns. Está disponível quando o destino de implantação é o iOS 8 ou superior.
Umbrella framework
[Destino agregado] é uma estrutura que contém outras estruturas. Não é oficialmente suportado no iOS e é por isso que não é recomendado que os desenvolvedores os criem [Documento oficial] . Na realidade, é um conjunto de subestruturas (ou estruturas aninhadas). Quando você cria uma estrutura que possui uma dependência, um consumidor (como um aplicativo) é responsável por adicionar essa dependência junto com sua estrutura no projeto. Como desenvolvedor, é natural tentar encontrar uma maneira de transferir esse imposto do consumidor para o seu. Como resultado, você acha que esseUmbrella framework
é o resgate, mas geralmente leva a problemas sérios no gerenciamento de versões e na complexidade de sua criação e suporte.
Fake Framework
- é o resultado de operações específicas sob a static library
para criar um pacote com .framework
extensão que se comportará como a dynamic framework
. Essa técnica foi usada quando o Xcode não suportava a criação de uma estrutura, pois não possuía um modelo de estrutura. Um dos realização de um quadro falso . Com o Xcode 6, a Apple adicionou suporte à estrutura do iOS.
Modular Framework
[About] -@import
é uma estrutura que contém um.modulemap
arquivo dentro. O módulo pode conter submódulos. A principal vantagem é que você economiza um tempo de compilaçãoModular Framework
.
Universal Library or Framework
(aka Fat) [lipo] [destino agregado] contém várias arquiteturas. Por exemplo, a versão do seu release deve suportar um arco que você pode regular via Build Active Architecture Only
[ONLY_ACTIVE_ARCH]
Dependency
[Sobre] Você pode usar código de terceiros como parte do seu destino. Ele permite que você reutilize um código de várias fontes, como - outro projeto, projeto no mesmo espaço de trabalho, outro destino, biblioteca, estrutura etc.
Como criar e usar uma biblioteca estática:
Como criar e usar um Dynamic Framework [mude para estático]
[Sistema de compilação do Xcode]
[componentes do Xcode]
[Linker dinâmico]