95 votes

Après le passage à Xcode 7, la taille de l'application est passée de 9 Mo à 60 Mo. Existe-t-il une solution ?

J'ai remonté l'historique de Git pour trouver la cause d'un changement de taille de fichier énorme, mais la seule vraie raison que je peux trouver est le passage de Xcode 6 à Xcode 7 GM.

J'ai constaté que ce sont les 10 facteurs qui contribuent le plus à la taille des fichiers dans une entreprise. .ipa créé à partir du Archives sur une Communiqué de presse configuration de la construction :

$ 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

Les fichiers les plus volumineux sont de loin les deux fichiers (légèrement différents) suivants libswiftCore.dylib qui totalisent plus de 32 Mo. Dans le paquet construit par Xcode 6, ces deux fichiers totalisent seulement 3 MB.

Donc la question n°1 est : Pourquoi les fichiers du noyau Swift sont-ils présents deux fois ? ( Le contenu intégré contient du code Swift est réglé sur Non ).

Et la question n°2 est : Que s'est-il passé ? Pourquoi la taille du noyau Swift a-t-elle augmenté de 15 Mo ? Est-ce permanent ?

Quelques notes supplémentaires :

  • Il s'agit d'un projet qui était entièrement en Objective-C mais qui est maintenant principalement en Swift. Le site Définit le module est réglé sur Oui .
  • Le projet utilise CocoaPods avec use_frameworks! set.
  • J'ai confirmé la taille réelle du téléchargement à partir de TestFlight sur plusieurs appareils et versions d'iOS et elle est comprise entre 30 et 60 Mo (la différence est probablement due au découpage de l'application). Avant, il était de 9 Mo.

26voto

David Rothera Points 140

Très probablement causé par BitCode, j'ai vu la même croissance, mais une fois déployée depuis l'App Store, la taille de l'application n'a pas vraiment augmenté.

Vous pouvez désactiver BitCode dans votre application et les autres cibles également et vous devriez voir une diminution.

11voto

Rick Ballard Points 876

On s'attend à ce que la taille des dylibs swift, et de votre propre code, soit significativement plus grande dans le .xcarchive, et lorsque vous exportez pour la distribution en magasin, en raison de l'inclusion du bitcode. Cette taille supplémentaire ne sera pas reflétée dans ce qui sera effectivement livré à vos utilisateurs, et ne devrait donc pas poser de problème. Lorsque vous soumettez votre application au magasin, celui-ci la traite pour supprimer le bitcode, et c'est cette version traitée de l'IPA que vos utilisateurs téléchargeront.

Si vous effectuez un quelconque type d'exportation à partir de votre archive, à l'exception d'une exportation vers le magasin (par exemple, pour un déploiement ad hoc), nous supprimerons localement le bitcode (et recompilerons même vos binaires à partir du bitcode d'abord, si vous laissez cette option cochée dans le flux de travail d'exportation, pour recréer ce qui se passera sur le magasin), afin que vous puissiez voir la taille réelle de votre application. TestFlight va également dépouiller le bitcode pour vous et vous montrer la taille réelle de votre application.

Vous devez également savoir que la taille de votre application peut également être réduite grâce à l'app thinning, que vous pouvez lire à l'adresse suivante https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Vous voudrez probablement effectuer une exportation ad-hoc pour voir la taille de chaque variante amincie de votre application de toute façon.

2voto

Xaositek Points 21

Voici le mien - les deux sont des applications Swift. La première construit ce qui était à l'origine dans l'App Store et est considérée comme Swift 1, la seconde est "mise à jour" pour être Swift 2. L'application Swift 1 a été compilée avec Xcode 6, l'application Swift 2 construite avec Xcode 7 (GM).

4.1M    ./Swift1_Version_of_App
 39M    ./Swift2_Version_of_App

J'ai étendu les fichiers .ipa aux fichiers bruts (en les renommant en .zip, etc.) et voici les différences.

----Swift 1----
xaositek$ ls -alh
total 16
drwx------   6 xaositek  staff   204B Sep 15 12:46 .
drwxr-xr-x   4 xaositek  staff   136B Sep 15 12:46 ..
-rw-r--r--@  1 xaositek  staff   6.0K Sep 15 12:46 .DS_Store
drwxr-xr-x   3 xaositek  staff   102B Sep 15 12:42 Payload
drwxr-xr-x  11 xaositek  staff   374B May  1 08:55 SwiftSupport
drwxr-xr-x   4 xaositek  staff   136B Sep 15 12:42 Symbols

xaositek$ du -d 25 -h
8.0K    ./Payload/MyApp.app/_CodeSignature
 12K    ./Payload/MyApp.app/Base.lproj/Main.storyboardc
 16K    ./Payload/MyApp.app/Base.lproj
7.9M    ./Payload/MyApp.app/Frameworks
8.6M    ./Payload/MyApp.app
8.6M    ./Payload
7.9M    ./SwiftSupport
184K    ./Symbols
 17M    .

----Swift 2----
xaositek$ ls -alh
total 0
drwx------   6 xaositek  staff   204B Sep 15 12:46 .
drwxr-xr-x   4 xaositek  staff   136B Sep 15 12:46 ..
drwxr-xr-x   4 xaositek  staff   136B Sep 15 12:43 BCSymbolMaps
drwxr-xr-x   3 xaositek  staff   102B Sep 15 12:43 Payload
drwxr-xr-x   3 xaositek  staff   102B Sep 13 15:36 SwiftSupport
drwxr-xr-x  28 xaositek  staff   952B Sep 15 12:43 Symbols

xaositek$ du -d 25 -h
 48K    ./BCSymbolMaps
8.0K    ./Payload/MyApp.app/_CodeSignature
 12K    ./Payload/MyApp.app/Base.lproj/Main.storyboardc
 16K    ./Payload/MyApp.app/Base.lproj
 47M    ./Payload/MyApp.app/Frameworks
 48M    ./Payload/MyApp.app
 48M    ./Payload
 47M    ./SwiftSupport/iphoneos
 47M    ./SwiftSupport
9.5M    ./Symbols
105M    .

0voto

St3fan Points 16196

Nous avons également rencontré ce problème avec Swift 1.2. Voir Comment empêcher les bibliothèques SwiftSupport d'être incluses deux fois ? pour ma question originale sur ce même problème.

Je suis presque sûr que c'est un problème de chaîne d'outils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X