Dopo il passaggio a Xcode 7, le dimensioni dell'app sono aumentate da 9 MB a 60 MB, c'è una soluzione?


96

Sono andato indietro nella storia di Git per trovare la causa di un enorme cambiamento di dimensione del file, ma l'unica vera ragione che posso trovare è il passaggio da Xcode 6 a Xcode 7 GM.

Ho scoperto che questi sono i primi 10 contribuenti dimensione del file in un .ipacreato dal Archive operazione su un rilascio configurazione di generazione:

$ 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

I file di gran lunga più grandi sono i due file (leggermente diversi) libswiftCore.dylib, per un totale di oltre 32 MB. Nel bundle creato da Xcode 6 questi due file ammontavano a soli 3 MB.

Quindi la domanda n. 1 è: perché i file core di Swift sono presenti due volte? ( Il contenuto incorporato contiene il codice Swift è impostato su No ).

E la domanda n. 2 è: cosa è successo? Perché la dimensione del core di Swift è aumentata di 15 MB? È permanente?

Alcune note aggiuntive:

  • Questo è un progetto che era interamente Objective-C ma ora è principalmente Swift. L' impostazione Definisce il modulo è impostata su .
  • Il progetto utilizza CocoaPods con use_frameworks!set.
  • Ho confermato la dimensione effettiva del download da TestFlight su più dispositivi e versioni iOS ed è compresa tra 30 e 60 MB (presumibilmente la differenza è dovuta all'affettamento dell'app). Una volta era 9 MB.

4
Xcode 7 utilizza il taglio delle app, molto probabilmente la dimensione del download sarà diversa, probabilmente addirittura diminuirà. Non mi preoccuperei di questo.
Adam

6
@ Adam: non è questo il caso. La versione distribuita varia a seconda del dispositivo, ma finora ho visto 30 MB su iPhone 5s e 60 MB su iPhone 6. I tempi di installazione sono aumentati notevolmente. Questo è sicuramente qualcosa di cui preoccuparsi quando era 9 MB.
Blixt

3
In realtà la differenza di 30 contro 60 MB è molto probabilmente dovuta al fatto che l'iPhone 5s è su iOS 9.1 e l'iPhone 6 è su iOS 8. Ma anche se tutti gli utenti di app hanno aggiornato a iOS 9, 30 MB è ancora un aumento molto grande da 9 MB.
Blixt

2
Hai distribuito tramite TestFlight? Il diradamento delle app viene eseguito sui server Apple, quindi a meno che non lo installi tramite TestFlight / iTunes, non sarai in grado di vedere le dimensioni ridotte, penso.
MirekE

2
Dopo il caricamento su TestFlight, la dimensione della mia app è stata ridotta da 74 MB a 9,6 MB, quindi non preoccuparti
Gintama

Risposte:


27

Molto probabilmente causato da BitCode, ho visto la stessa crescita, tuttavia una volta distribuita dall'App Store la dimensione dell'app non è effettivamente aumentata.

Puoi disabilitare BitCode nella tua app e anche negli altri obiettivi e dovresti vedere un restringimento.


Ho confermato che la dimensione del download dell'app da Apple TestFlight è compresa tra 30 e 60 MB invece di 9 MB. Non penso che cambierà una volta che sarà sull'App Store poiché presumibilmente utilizzano lo stesso meccanismo di distribuzione. Proverò a disabilitare Bitcode.
Blixt

La disabilitazione del codice bit e dei simboli di debug nei passaggi di compilazione e pubblicazione e l'archiviazione di una versione di compilazione includono ancora gli stessi identici due libswiftCore.dylibfile a ~ 40 MB ciascuno (~ 16 MB compressi). Non ho confermato l'intera distribuzione tramite TestFlight, ma poiché questi file enormi fanno ancora parte del .ipa dubito che il loro contributo alla dimensione del file cambierà. La dimensione complessiva si è ridotta di circa ~ 10 MB, presumibilmente principalmente per l'eliminazione del supporto dei simboli di crash.
Blixt

1
Sto solo uscendo dall'esperienza personale, i miei .xcarchive sono MOLTO più grandi ora rispetto a pre-Xcode7, tuttavia il download dell'app store ha ancora le stesse dimensioni se non leggermente più piccole a causa dell'assottigliamento delle risorse ecc.
David Rothera

10
Guardando ora, il bundle di TestFlight era 33 MB e per la stessa build su AppStore è 10,5 MB, questo mostra l'assottigliamento non è stato fatto su build TestFlight.
David Rothera

Va bene, buono a sapersi. Eseguirò l'app sull'App Store e spero per il meglio!
Blixt

19

Ho testato molte impostazioni e combinazioni e sembra che la dimensione del file dei bundle creati da Xcode 7 vari molto a seconda del dispositivo e della versione di iOS. Inoltre, le build di TestFlight ora sono enormi rispetto a prima, ma la buona notizia è che una volta sull'App Store non c'è stato un enorme aumento (anche se vedo circa 1-2 MB aggiunti alla dimensione del pacchetto rispetto a prima) .

Ecco alcuni esempi per mostrare la varianza tra TestFlight, App Store e dispositivi:

TestFlight, iPhone 5s su iOS 9.1
35,6 MB

TestFlight, iPhone 6 su iOS 8.4.1
70,1 MB

App Store
11,8 MB

Le dimensioni dell'App Store erano identiche su tutti i dispositivi che ho testato. Tuttavia, non l'ho testato su iPhone 6 Plus, è molto probabile che la dimensione del pacchetto sia maggiore poiché utilizza risorse @ 3x.


11

Ci si aspetta che la dimensione dei dylibs swift e il proprio codice saranno notevolmente maggiori nel .xcarchive e quando si esporta per la distribuzione in negozio, a causa dell'inclusione del bitcode. Questa dimensione aggiuntiva non si rifletterà in ciò che viene effettivamente consegnato ai tuoi utenti, quindi non dovrebbe essere un problema. Quando invii la tua app allo store, quest'ultimo la elaborerà per rimuovere il bitcode e quella versione elaborata dell'IPA sarà quella che i tuoi utenti scaricheranno.

Se esegui qualsiasi tipo di esportazione dal tuo archivio eccetto un'esportazione del negozio (ad es. Salva per la distribuzione ad hoc), elimineremo localmente il bitcode (e persino ricompileremo prima i tuoi binari dal bitcode, se lasci selezionata l'opzione nell'esportazione flusso di lavoro, per ricreare ciò che accadrà nello store), così puoi vedere quanto sarà effettivamente grande la tua app. TestFlight eliminerà anche il bitcode per te e ti mostrerà le dimensioni reali della tua app.

Dovresti anche essere consapevole del fatto che le dimensioni della tua app possono essere ridotte anche tramite il diradamento delle app, di cui puoi leggere su https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Probabilmente vorrai eseguire un'esportazione ad hoc per vedere comunque le dimensioni di ciascuna variante ridotta della tua app.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.