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 Packageou com um Bundle. Você pode usar Show Package Contentsem 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 bundlee versioned bundlecomo 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 .dylibarquivo. 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 libraryque 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.
Frameworkaka 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 dynamicbiblioteca compilada , arquivos e recursos de cabeçalho.
Static frameworkconter um static librarypacote com seus recursos.
Dynamic frameworkcontém os dynamic libraryrecursos 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 frameworkque 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 librarypara criar um pacote com .frameworkextensã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.modulemaparquivo 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]