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:
use_frameworks!
ensemble.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.
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.
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.
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.
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.