Todos os anos, a Apple lança um novo iPhone, aumentando gradativamente o tamanho da RAM e da memória principal, adicionando potência ao chip. Hoje, no iPhone 15, você já pode rodar jogos de console como “Resident Evil 4”. E uma pergunta lógica pode surgir – devo otimizar o tamanho do meu aplicativo ou não posso dedicar mais tempo a ele?
Resumindo, ainda vale a pena otimizar o tamanho. Neste artigo, reuni os motivos pelos quais é essencial fazer isso e forneci alguns métodos úteis de otimização.
Então, vamos começar com a resposta mais banal à pergunta “Por que o tamanho é importante?” - As limitações da App Store. O App Store Connect simplesmente não permite que você baixe um arquivo que exceda o limite de tamanho especificado.
Para aplicativos iOS e tvOS, verifique se seu aplicativo não excede os tamanhos máximos de arquivo nos sistemas operacionais compatíveis. O tamanho total descompactado do seu aplicativo deve ser inferior a 4 GB.
Os aplicativos Apple Watch devem ter menos de 75 MB. Além disso, cada arquivo executável do Mach-O — por exemplo, app_name.app/app_name — não deve exceder esses tamanhos máximos de arquivo.
Link
Os arquivos específicos aos quais eles se referem podem ser um pouco confusos. Para entender melhor isso, vamos percorrer o processo de envio de sua inscrição ao App Store Connect.
O primeiro passo é criar um arquivo. Este arquivo armazena uma coleção de artefatos de construção e informações relacionadas para um aplicativo iOS, macOS, watchOS ou tvOS.
Temos a oportunidade de analisar o que exatamente e de que forma está incluído no arquivo.
Entre os principais arquivos você encontrará:
Pasta de produtos com seu App;
dSYMs, (abreviação de “símbolos de depuração”), arquivos especiais gerados pelo Xcode com as informações necessárias para depuração, enfim, crash logs;
Info.plist;
Aliás, o arquivo do Aplicativo também pode ser aberto por “Mostrar conteúdo do pacote”, e entre os arquivos você encontrará o executável e o CodeResources, resultado da assinatura do código; ele monitora as assinaturas digitais de vários recursos do aplicativo (imagens, etc.).
Voltando ao Xcode, após gerar o Archive, o botão Distribute App
fica disponível para você. Nesta fase, .xcarchive se transforma em .ipa .
Um arquivo .ipa pode ser considerado um pacote compactado que inclui uma pasta “Payload”. Dentro desta pasta “Payload”, está o pacote essencial “YourApp.app”. Dentro do pacote ".app", você encontrará todos os componentes críticos do seu aplicativo, incluindo recursos como
Além disso, abriga recursos de assinatura de código para garantir a integridade e segurança do aplicativo.
Para ver o interior do seu .ipa , clique em Export
após distribuição, converta o tipo de .ipa para .zip e apenas extraia.
Em resumo, o arquivo .ipa é o aplicativo empacotado que os usuários finais instalam em seus dispositivos iOS, enquanto o .xcarchive é um arquivo focado no desenvolvedor que contém vários ativos e informações de construção para o aplicativo.
O .ipa é usado para distribuição, enquanto o .xcarchive é usado para depuração, arquivamento e fins de desenvolvimento adicional. Já o executável é o código central que executa as funções do aplicativo e está contido no pacote .ipa .
Assim, as limitações da AppStore podem ser ilustradas da seguinte forma.
Versão do sistema operacional | Tamanho .ipa | .ipa -> Carga útil -> Aplicativo -> tamanho do exe |
---|---|---|
iOS 9.0 e posteriortvOS 9.0 e posterior | 4GB | 500MB |
iOS 7.X até iOS 8.X | 2GB | 60MB |
Porém, para estimar o tamanho da sua aplicação final, ou seja, quantos bytes um determinado usuário terá que instalar em seu dispositivo, serão necessárias ações adicionais, ou seja, gerar um relatório de tamanho da aplicação. A documentação descreve bem o procedimento para criá-lo, então deixarei um
O próximo motivo para pensar no tamanho do seu aplicativo é… a AppStore de novo, mas agora não estamos falando de restrições do sistema, mas sim da velocidade de download . Tudo é evidente aqui - quanto menor o tamanho, maior a taxa.
Além disso, há um limite de 200 MB, atingindo o qual os usuários precisam se conectar a uma rede Wi-Fi para instalar o aplicativo. O atraso pode desencorajar os utilizadores e levar a taxas de abandono mais elevadas.
Os algoritmos de busca e descoberta da App Store da Apple geralmente favorecem aplicativos menores, pois são mais fáceis para os usuários baixarem e experimentarem. Tamanhos menores de aplicativos podem melhorar potencialmente a visibilidade do seu aplicativo nos resultados de pesquisa e nas recomendações.
Depois que o aplicativo estiver no dispositivo, seu tamanho ainda será importante. Aplicativos menores são iniciados mais rapidamente, proporcionando uma melhor experiência ao usuário. Quando um aplicativo otimiza o armazenamento, ele contribui para prolongar a vida útil da bateria, reduzir o espaço ocupado pelo aplicativo e melhorar a integridade do dispositivo. Como resultado, quanto mais pessoas estiverem satisfeitas com o iPhone, mais usuários em potencial você terá.
Existem algumas dicas simples para evitar aumentar desnecessariamente o tamanho da sua aplicação durante o desenvolvimento. O primeiro deles é o trabalho consciente com imagens.
Primeiro, escolha HEIC em vez de JPEG. HEIC fornece arquivos 50% menores em comparação com JPEG, ao mesmo tempo que mantém qualidade de imagem semelhante. Isso resulta em espaço de armazenamento reduzido no seu dispositivo. Arquivos menores são mais fáceis de transferir entre redes, bem como carregar e salvar em disco mais rapidamente.
HEICs suportam transparência de imagem e capacidade de armazenar imagens suplementares contendo informações de profundidade e disparidade. Ele suporta compactação sem perdas e permite armazenar várias imagens em um único contêiner.
Em segundo lugar, tente adotar SVG (um formato de imagem vetorial baseado em XML usado para exibir gráficos vetoriais bidimensionais) em vez de PDF e PNG. Em contraste com as imagens raster, os gráficos vetoriais normalmente exibem tamanhos de arquivo menores, porque são caracterizados por equações matemáticas que definem formas e curvas, em vez de armazenar pixels individuais.
Inicialmente foi necessário adicionar 3 imagens com prefixos (para cada densidade de pixels). Depois foi adicionado suporte a PNG (= imagem vetorial com um determinado tamanho), mas ainda funcionou no nível de “cortar 3 PNGs do PDF quando montamos o projeto”.
E só então foi possível usar SVG + incluir a caixa de seleção “usar data do vetor” no catálogo de ativos, reduzindo realmente o tamanho das imagens utilizadas + acrescentando a possibilidade de escala infinita, sem perda de qualidade.
Em terceiro lugar, aproveite ao máximo os recursos dos Catálogos de Ativos . Os Catálogos de Ativos fornecem um armazenamento fácil de usar para múltiplas resoluções da mesma imagem. Além disso, os catálogos armazenam todos os ativos de imagem em um único formato otimizado com metadados em vez de arquivos individuais.
Ele permite que a App Store forneça apenas os recursos necessários para seu dispositivo específico. Isso leva ao aumento da velocidade de download e já sabemos que os usuários não gostam de esperar.
É possível configurar “sob demanda” no recurso, ou seja, o recurso será baixado no aparelho apenas se necessário, e após algum tempo de desuso, será removido.
Não se esqueça que você tem um enorme catálogo de imagens “gratuitas” - Símbolos SF . A Apple está constantemente trabalhando no aumento dos personagens, adicionando a capacidade de personalizar cores e até animações.
Assim, com fotos e outros recursos gráficos, tudo parece claro - usamos os formatos corretos e adicionamos um catálogo através do Assets. Sempre existe a oportunidade de não incluir grandes recursos na montagem final, mas simplesmente fazer upload da Internet quando necessário. Agora vamos falar sobre o código e o uso de bibliotecas.
Deixe-me lembrá-lo rapidamente sobre o Linking. Existem dois tipos: estático e dinâmico.
| Estático | Dinâmico |
---|---|---|
Quando ocorre a vinculação | Tempo de construção | Tempo de execução |
Onde as dependências são armazenadas | No arquivo executável final | Em bibliotecas dinâmicas separadas |
Como as dependências são compartilhadas | A mesma cópia é usada por todas as instâncias do aplicativo | Cada instância do aplicativo tem sua própria cópia |
Como as atualizações nas dependências são tratadas | Reconstrua o aplicativo | Atualizar a biblioteca dinâmica |
De acordo com o tema deste artigo, o armazenamento de dependências é especialmente importante para nós, e a vinculação dinâmica parece ser a nossa favorita.
Bibliotecas dinâmicas não são vinculadas estaticamente a aplicativos clientes; eles não se tornam parte do arquivo executável. Em vez disso, bibliotecas dinâmicas podem ser carregadas (e vinculadas) em um aplicativo quando o aplicativo é iniciado ou durante a execução.
Link
Resumindo, optar por bibliotecas dinâmicas em vez de bibliotecas estáticas resulta em tamanhos menores de arquivos de aplicativos e menor uso inicial de memória. No entanto, ainda é importante encontrar um equilíbrio e evitar o uso excessivo de bibliotecas dinâmicas, pois isso pode criar um atraso no desempenho durante a inicialização do aplicativo.
A Apple também recomenda a criação de uma base de código modular ( SPM ) em seu aplicativo, o que pode ser útil ao compartilhar código com outros alvos, App Clipps, por exemplo.
O Swift Package Manager oferece uma maneira simplificada e nativa de gerenciar dependências em seus projetos Swift.
Uma das maneiras mais eficazes de reduzir o tamanho do seu aplicativo é remover todos os arquivos desnecessários. Esses arquivos extras podem ser, por exemplo, Read.me ou imagens restantes. Na verdade, logo no início do artigo, onde descobrimos o que é um .ipa, já aprendemos como encontrar todos os arquivos que irão para a AppStore: .ipa -> .zip -> App -> show package conteúdo.
Descubra todos os recursos que você não precisa e fique à vontade para excluí- los do seu aplicativo.
Apenas para resumir isso. Ainda existem alguns motivos importantes pelos quais devemos ficar de olho no tamanho do nosso aplicativo:
E existem alguns métodos para reduzir o tamanho do aplicativo:
Então só não se esqueça disso durante o desenvolvimento da sua rotina; torne-se mais inteligente a cada dia 🙃