web-dev-qa-db-fra.com

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

Dans l'histoire de Git, je suis revenu en arrière pour trouver la cause d'un énorme changement de taille de fichier, mais la seule vraie raison que je puisse trouver est le passage de Xcode 6 à Xcode 7 GM.

J'ai constaté qu'il s'agit des 10 principaux contributeurs de la taille d'un fichier .ipa créé à partir de l'opération Archive sur une configuration de construction 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 loin les plus gros fichiers sont les deux (légèrement différents) libswiftCore.dylib fichiers, qui totalisent plus de 32 Mo. Dans le paquet construit par Xcode 6, ces deux fichiers ne totalisaient que 3 Mo.

La question n ° 1 est donc la suivante: Pourquoi les Swift de base présents deux fois?) (Le contenu incorporé contient Swift) est défini sur Non ).

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

Quelques notes supplémentaires:

  • Ceci est un projet qui était entièrement Objective-C mais est maintenant principalement Swift. Le paramètre Defines Module est défini sur Oui .
  • Le projet utilise CocoaPods avec use_frameworks! ensemble.
  • J'ai confirmé la taille de téléchargement réelle de TestFlight sur plusieurs appareils et versions iOS. Elle se situe dans une plage allant de 30 à 60 Mo (la différence est probablement due au découpage d'application). Il était de 9 Mo.
94
Blixt

Probablement causé par BitCode, j'ai connu la même croissance, mais une fois déployée depuis l'App Store, la taille de l'application n'a pas augmenté.

Vous pouvez également désactiver BitCode dans votre application et les autres cibles, ce qui devrait entraîner une réduction.

26
David Rothera

J'ai testé de nombreux paramètres et combinaisons et il semble que la taille de fichier des ensembles créés par Xcode 7 varie beaucoup en fonction du périphérique et de la version d'iOS. De plus, les versions de TestFlight sont maintenant énormes par rapport à avant, mais la bonne nouvelle est qu’une fois sur l’App Store, il n’ya pas eu d’augmentation considérable (bien que la taille du bundle ait augmenté d’environ 1 à 2 Mo par rapport à avant). .

Voici quelques exemples pour montrer les écarts entre TestFlight, App Store et les appareils:

TestFlight, iPhone 5s sur iOS 9.1
35.6 MB

TestFlight, iPhone 6 sur iOS 8.4.1
70.1 MB

App Store
11.8 MB

La taille de l'App Store était identique sur tous les appareils que j'ai testés. Je ne l'ai pas encore testé sur l'iPhone 6 Plus, mais il est fort possible que la taille de l'ensemble soit plus grande, car il utilise des ressources @ 3x.

19
Blixt

On s'attend à ce que la taille du Swift dylibs, ainsi que votre propre code, soit considérablement plus grande dans .xcarchive, et lors de l'exportation pour la distribution en magasin, en raison de l'inclusion du bitcode. Ceci la taille supplémentaire ne sera pas reflétée dans ce qui sera réellement livré à vos utilisateurs, donc cela ne devrait pas être un problème. Lorsque vous soumettez votre application au magasin, le magasin la traite pour supprimer le bitcode, et cette version traitée de l'IPA est ce que vos utilisateurs vont télécharger.

Si vous effectuez tout type d’exportation à partir de votre archive sauf une exportation de magasin (par exemple, enregistrer pour un déploiement ad hoc), nous effacerons localement le bitcode (et recompilerons en premier vos fichiers binaires à partir de bitcode, si vous laissez cette option cochée dans l’exportation). flux de travail, pour recréer ce qui se passera dans le magasin), afin que vous puissiez voir la taille réelle de votre application. TestFlight supprimera également le bitcode pour vous et vous montrera la vraie taille de votre application.

Vous devez également savoir que la taille de votre application peut également être réduite via une amincissement d'application, que vous pouvez consulter à 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.

11
Rick Ballard

Bitcode incorporé est la raison.

En supposant que vous ne souhaitiez pas désactiver ENABLE_BITCODE, vous pouvez supprimer les symboles de débogage.

Voir http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html comme dépouiller les symboles de débogage avant l’incorporation de bitcode est l’une des options possibles. faire.

5
Nuray Altin

Nous avons également eu ce problème avec Swift 1.2. Voir Comment éviter que les bibliothèques SwiftSupport ne soient incluses deux fois) pour ma question initiale sur ce même problème.

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

0
Stefan Arentz