Tenho voltado atrás na história do Git para encontrar a causa de uma enorme mudança no tamanho do arquivo, mas o único motivo real que consigo encontrar é a troca do Xcode 6 para o Xcode 7 GM.
Descobri que estes são os 10 maiores contribuidores de tamanho de arquivo em um .ipa
criado a partir da operação Archive em uma configuração de build Release :
$ unzip -lv Roger\ Release.ipa | sort -k +3nr | head
41802768 Defl:N 16887199 60% 09-14-15 23:47 dc24cdc1 Payload/Roger.app/Frameworks/libswiftCore.dylib
41802400 Defl:N 16886076 60% 09-06-15 18:33 f939ea6a SwiftSupport/iphoneos/libswiftCore.dylib
11184032 Defl:N 5915625 47% 09-14-15 23:48 6ceac4a2 Payload/Roger.app/Roger
6399584 Defl:N 2670275 58% 09-14-15 23:47 0ac52d3f Payload/Roger.app/Frameworks/libPhoneNumber_iOS.framework/libPhoneNumber_iOS
5410384 Defl:N 2334189 57% 09-14-15 23:47 7a8cb03f Payload/Roger.app/Frameworks/Alamofire.framework/Alamofire
4521904 Defl:N 2292789 49% 09-14-15 23:47 95da0882 Payload/Roger.app/Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit
4731552 Defl:N 1926357 59% 09-14-15 23:48 e05337de Payload/Roger.app/Frameworks/libswiftFoundation.dylib
4731168 Defl:N 1925355 59% 09-06-15 18:33 19a5c3c4 SwiftSupport/iphoneos/libswiftFoundation.dylib
2659232 Defl:N 1232897 54% 09-14-15 23:47 1a53a401 Payload/Roger.app/Frameworks/AFNetworking.framework/AFNetworking
1196624 Defl:N 545343 54% 09-14-15 23:47 19a063cb Payload/Roger.app/Frameworks/Bolts.framework/Bolts
De longe, os maiores arquivos são os dois arquivos (ligeiramente diferentes) libswiftCore.dylib
, que totalizam mais de 32 MB. No pacote construído pelo Xcode 6, esses dois arquivos totalizavam apenas 3 MB.
Portanto, a pergunta nº 1 é: Por que os arquivos principais do Swift estão lá duas vezes? ( O conteúdo incorporado contém código Swift está definido como Não ).
E a pergunta nº 2 é: o que aconteceu? Por que o tamanho do núcleo do Swift aumentou em 15 MB? Isso é permanente?
Algumas notas adicionais:
- Este é um projeto que era inteiramente Objective-C, mas agora é principalmente Swift. A configuração Defines Module está definida como Yes .
- O projeto usa CocoaPods com
use_frameworks!
set. - Eu confirmei o tamanho real do download do TestFlight em vários dispositivos e versões do iOS e está na faixa de 30 a 60 MB (presumivelmente, a diferença é devido à divisão do aplicativo). Costumava ter 9 MB.
Respostas:
Provavelmente causado pelo BitCode, vi o mesmo crescimento, no entanto, uma vez implantado na App Store, o tamanho do aplicativo não aumentou de fato.
Você pode desabilitar o BitCode em seu aplicativo e em outros destinos também e deverá ver uma redução.
fonte
libswiftCore.dylib
arquivos de aproximadamente 40 MB cada (aproximadamente 16 MB compactados). Não confirmei toda a implantação por meio do TestFlight, mas como esses arquivos enormes ainda fazem parte do .ipa, duvido que sua contribuição para o tamanho do arquivo seja alterada. O tamanho geral diminuiu em cerca de 10 MB, o que provavelmente se deve principalmente à redução do suporte ao símbolo de travamento.Estive testando muitas configurações e combinações e parece que o tamanho dos arquivos dos pacotes criados pelo Xcode 7 variam muito dependendo do dispositivo e da versão do iOS. Além disso, as compilações do TestFlight agora são enormes em comparação com antes, mas a boa notícia é que uma vez na App Store não houve um grande aumento (embora eu esteja vendo cerca de 1–2 MB adicionados ao tamanho do pacote em comparação com antes) .
Aqui estão alguns exemplos para mostrar a variação entre TestFlight, App Store e dispositivos:
TestFlight, iPhone 5s no iOS 9.1
35,6 MB
TestFlight, iPhone 6 no iOS 8.4.1
70.1 MB
App Store
11,8 MB
O tamanho da App Store era idêntico em todos os dispositivos que testei. Eu não testei no iPhone 6 Plus, porém, é muito possível que o tamanho do pacote seja maior, pois ele usa recursos @ 3x.
fonte
Espera-se que o tamanho dos dylibs swift, e do seu próprio código, seja significativamente maior no .xcarchive, e ao exportar para distribuição na loja, devido à inclusão do bitcode. Esse tamanho adicional não será refletido no que realmente é entregue aos usuários, portanto, não deve ser um problema. Quando você enviar seu aplicativo para a loja, a loja irá processá-lo para retirar o código de bits, e essa versão processada do IPA é o que seus usuários irão baixar.
Se você fizer qualquer tipo de exportação de seu arquivo, exceto uma exportação de loja (por exemplo, salvar para implantação ad-hoc), removeremos localmente o bitcode (e até mesmo recompilaremos seus binários do bitcode primeiro, se você deixar essa opção marcada na exportação workflow, para recriar o que vai acontecer na loja), para que você possa ver o quão grande será o seu aplicativo. TestFlight também removerá o código de bits para você e mostrará o tamanho real do seu aplicativo.
Você também deve estar ciente de que o tamanho do seu aplicativo também pode ser reduzido por meio da redução do aplicativo, sobre o qual você pode ler em https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Você provavelmente desejará realizar uma exportação ad-hoc para ver o tamanho de cada variante diluída de seu aplicativo de qualquer maneira.
fonte
Bitcode embutido é o motivo.
Assumindo que você não deseja desabilitar ENABLE_BITCODE, você pode remover os símbolos de depuração.
Consulte http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html, pois remover os símbolos de depuração antes de incorporar o código de bits é uma das opções que você pode fazer.
fonte
Também tivemos esse problema com o Swift 1.2. Veja Como evitar que bibliotecas SwiftSupport sejam incluídas duas vezes para minha pergunta original sobre o mesmo problema.
Tenho certeza de que é um problema do conjunto de ferramentas.
fonte