Ich bin in der Git-Geschichte zurückgegangen, um die Ursache für eine enorme Änderung der Dateigröße zu finden, aber der einzige wirkliche Grund, den ich finden kann, ist der Wechsel von Xcode 6 zu Xcode 7 GM.
Ich habe festgestellt, dass dies die 10 wichtigsten Beiträge zur Dateigröße in einer .ipa
aus dem Archiv erstellten Operation in einer Release- Build-Konfiguration sind:
$ 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
Bei weitem die größten Dateien sind die zwei (leicht unterschiedlichen) libswiftCore.dylib
Dateien, die insgesamt über 32 MB groß sind. In dem von Xcode 6 erstellten Bundle umfassten diese beiden Dateien nur 3 MB.
Frage 1 lautet also: Warum sind die Swift-Kerndateien dort zweimal? ( Eingebetteter Inhalt enthält Swift-Code ist auf Nein gesetzt ).
Und Frage 2 lautet: Was ist passiert? Warum hat sich die Swift-Kerngröße um 15 MB erhöht? Ist das dauerhaft?
Einige zusätzliche Hinweise:
- Dies ist ein Projekt, das vollständig Objective-C war, jetzt aber größtenteils Swift ist. Die Einstellung Modul definieren ist auf Ja gesetzt .
- Das Projekt verwendet CocoaPods mit
use_frameworks!
Set. - Ich habe die tatsächliche Downloadgröße von TestFlight auf mehreren Geräten und iOS-Versionen bestätigt und sie liegt im Bereich von 30 bis 60 MB (vermutlich ist der Unterschied auf das Schneiden von Apps zurückzuführen). Früher waren es 9 MB.
Antworten:
Höchstwahrscheinlich durch BitCode verursacht, habe ich das gleiche Wachstum gesehen, aber nach der Bereitstellung aus dem App Store ist die App-Größe nicht wirklich gewachsen.
Sie können BitCode auch in Ihrer App und den anderen Zielen deaktivieren, und Sie sollten eine Schrumpfung feststellen.
quelle
libswiftCore.dylib
Dateien mit jeweils ~ 40 MB (~ 16 MB komprimiert). Ich habe die gesamte Bereitstellung nicht über TestFlight bestätigt, aber da diese riesigen Dateien immer noch Teil der .ipa sind, bezweifle ich, dass sich ihr Beitrag zur Dateigröße ändern wird. Die Gesamtgröße schrumpfte um ca. 10 MB, was vermutlich hauptsächlich auf die Unterstützung von Crash-Symbolen zurückzuführen ist.Ich habe viele Einstellungen und Kombinationen getestet und es scheint, dass die Dateigröße der von Xcode 7 erstellten Bundles je nach Gerät und iOS-Version sehr unterschiedlich ist. Auch die TestFlight-Builds sind jetzt im Vergleich zu früher riesig, aber die gute Nachricht ist, dass es im App Store keinen großen Anstieg gab (obwohl ich sehe, dass die Bundle-Größe im Vergleich zu früher um 1–2 MB erweitert wurde). .
Hier einige Beispiele, um die Varianz zwischen TestFlight, App Store und Geräten zu zeigen:
TestFlight, iPhone 5s unter iOS 9.1
35,6 MB
TestFlight, iPhone 6 unter iOS 8.4.1
70,1 MB
App Store
11,8 MB
Die App Store-Größe war auf allen von mir getesteten Geräten identisch. Ich habe es jedoch nicht auf dem iPhone 6 Plus getestet. Es ist sehr wahrscheinlich, dass das Bundle größer ist, da es @ 3x Assets verwendet.
quelle
Es wird erwartet, dass die Größe der schnellen Dylibs und Ihres eigenen Codes im .xcarchive und beim Exportieren für die Filialverteilung aufgrund der Einbeziehung von Bitcode erheblich größer ist. Diese zusätzliche Größe spiegelt sich nicht in dem wider, was tatsächlich an Ihre Benutzer geliefert wird, daher sollte dies kein Problem sein. Wenn Sie Ihre App an den Store senden, verarbeitet der Store sie, um den Bitcode zu entfernen, und diese verarbeitete Version des IPA wird von Ihren Benutzern heruntergeladen.
Wenn Sie einen Export aus Ihrem Archiv ausführen, mit Ausnahme eines Store-Exports (z. B. für Ad-hoc-Bereitstellung speichern), entfernen wir den Bitcode lokal (und kompilieren Ihre Binärdateien sogar zuerst aus dem Bitcode neu, wenn Sie diese Option beim Export aktiviert lassen Workflow, um neu zu erstellen, was im Store passieren wird), damit Sie sehen können, wie groß Ihre App tatsächlich sein wird. TestFlight entfernt auch den Bitcode für Sie und zeigt Ihnen Ihre wahre App-Größe.
Sie sollten sich auch darüber im Klaren sein, dass die Größe Ihrer App auch durch App-Ausdünnung reduziert werden kann, über die Sie unter lesen können https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Möglicherweise möchten Sie einen Ad-hoc-Export durchführen, um die Größe jeder verdünnten Variante Ihrer App zu ermitteln.
quelle
Eingebetteter Bitcode ist der Grund.
Angenommen, Sie möchten ENABLE_BITCODE nicht deaktivieren, können Sie die Debug-Symbole entfernen.
Unter http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html finden Sie Informationen zum Entfernen von Debug-Symbolen vor dem Einbetten von Bitcode.
quelle
Wir hatten auch dieses Problem mit Swift 1.2. Weitere Informationen zu meiner ursprünglichen Frage zu demselben Problem finden Sie unter Verhindern, dass SwiftSupport-Bibliotheken zweimal enthalten sind .
Ich bin mir ziemlich sicher, dass dies ein Toolchain-Problem ist.
quelle