Depois de mudar para o Xcode 7, o tamanho do aplicativo cresceu de 9 MB para 60 MB, há uma correção?

96

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 .ipacriado 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.
Blixt
fonte
4
O Xcode 7 usa divisão de aplicativos, o tamanho do download provavelmente será diferente, provavelmente até diminuirá. Eu não me preocuparia com isso.
Adam
6
@Adam: Não é o caso. A versão implantada varia dependendo do dispositivo, mas até agora eu vi 30 MB no iPhone 5s e 60 MB no iPhone 6. Os tempos de instalação aumentaram visivelmente. Isso é definitivamente algo para se preocupar quando costumava ser 9 MB.
Blixt
3
Na verdade, a diferença de 30 vs. 60 MB é provavelmente devido ao iPhone 5s estar no iOS 9.1 e o iPhone 6 estar no iOS 8. Mas mesmo se todos os usuários do aplicativo atualizaram para o iOS 9, 30 MB ainda é um grande aumento em relação ao 9 MB.
Blixt de
2
Você implantou via TestFlight? O afinamento do app é feito em servidores Apple, então, a menos que você instale via TestFlight / iTunes, você não conseguirá ver o tamanho reduzido, eu acho.
MirekE de
2
Depois de fazer upload para o TestFlight, o tamanho do meu aplicativo foi reduzido de 74 MB para 9,6 MB, então não se preocupe
Gintama de

Respostas:

27

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.

David Rothera
fonte
Confirmei que o tamanho do download do aplicativo do Apple TestFlight é de 30 a 60 MB em vez de 9 MB. Não acho que vai mudar depois que estiver na App Store, pois eles provavelmente usam o mesmo mecanismo de distribuição. Vou tentar desativar o Bitcode.
Blixt
A desativação do código de bits e dos símbolos de depuração nas etapas de construção e publicação e o arquivamento de uma versão de construção ainda inclui os mesmos dois libswiftCore.dylibarquivos 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.
Blixt de
1
Estou apenas saindo da experiência pessoal, meus .xcarchive são MUITO maiores agora do que pré-Xcode7, no entanto, o download da app store ainda é do mesmo tamanho, se não um pouco menor devido à redução de recursos etc.
David Rothera
10
Olhando agora, o pacote do TestFlight tinha 33 MB e para a mesma compilação na AppStore é de 10,5 MB, isso mostra que o afinamento não é feito nas compilações do TestFlight.
David Rothera de
Ok, é bom saber. Vou executar o aplicativo na App Store e torcer pelo melhor!
Blixt
19

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.

Blixt
fonte
11

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.

Rick ballard
fonte
6

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.

Nuray Altin
fonte
1
Isso não significa que você não receberá relatórios de falhas simbólicos?
Iulian Onofrei