2015-02-02 2 views
27

Ich habe eine kleine App in Objective-C geschrieben. Es war ungefähr 3 MB groß. Als ich eine Swift-Datei hinzugefügt habe, wuchs die Größe meines Archivs auf 10 MB.Das Hinzufügen von Swift zum Projizieren erhöht die Größe erheblich. Wie und wann kann es vermieden werden

Was ich fand, ist, dass Swift seine tatsächliche Bibliothek in jedes Projekt einbettet. Dies ist notwendig, um das Projekt auch für den Fall ausführen zu können, dass sich Swift Bibliothek in der Zukunft ändert.

Aber 8 Megabyte ist ein großer Overhead für kleine Projekte. Vielleicht gibt es einige Informationen darüber, wann Swift eine stabile Bibliothek erhält, die in OS eingebettet wird?

Oder vielleicht gibt es einige Flags, die dem Projekt hinzugefügt werden können, die den Compiler zwingen, die in iOS eingebettete Swift-Standardbibliothek zu verwenden?

+0

http://owensd.io/blog/swift-app-size-bundles/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS_Dev_Weekly_Issue_265 – Thorax

Antwort

30

Swift ändert sich immer noch. Daher muss die Laufzeit im Moment in jeder App enthalten sein. Vielleicht wird Apple die Swift-Laufzeit in iOS mit einbeziehen, sobald die Entwicklung von Swift langsamer wird.

Swift Quellcode musste nach fast jeder Version von Xcode seit den 6.0 Betaversionen angepasst werden. Die Laufzeit hat sich gleichzeitig mit dem Compiler geändert. iOS kann keine Standard-Swift-Bibliothek verwenden, sondern muss diejenige verwenden, mit der die App kompiliert und verlinkt wurde.

Siehe this explanation by Apple.

können Sie darauf vertrauen, dass Ihre App gut in die Zukunft funktioniert. In der Tat können Sie mit derselben App auf OS X Mavericks oder iOS 7 zielen. Dies ist möglich, weil Xcode eine kleine Swift-Laufzeitbibliothek in das Paket Ihrer App einbettet. Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf früheren, aktuellen und zukünftigen Betriebssystemversionen läuft. Während die Laufzeitkompatibilität Ihrer App gewährleistet ist, werden die Swift-Sprache selbst und die Binärschnittstelle weiter entwickelt wird sich auch ändern.

Da sich Swift ändert, sind diese Frameworks mit dem Rest Ihrer App nicht kompatibel. Wenn das binäre Schnittstelle in einem oder zwei Jahren stabilisiert, wird die Swift Laufzeit Teil des Host-Betriebssystemes werden und diese Einschränkung wird nicht mehr existiert

Nicht Swift mit dem einzigen Weg, um Ihre App Größe zu halten.

Seit Swift 3.0 won't deliver a stable ABI wird dies bis auf weiteres gleich bleiben. So in einem Jahr oder zwei wahrscheinlich übersetzt Swift 5.0 im Jahr 2018

+2

Die Antwort, die Apple in dem Artikel gibt, den Sie verlinkt haben, lautet: _ "Wenn sich die Binärschnittstelle in ein oder zwei Jahren stabilisiert, wird die Swift-Laufzeit Teil des Host-Betriebssystems und diese Einschränkung existiert nicht mehr" _ Also leider gibt es keine andere Option als warten – Thorax

+0

Genau. Ich habe dieses Zitat hinzugefügt, um es klarer zu machen. – orkoden

+1

Weiß jemand, ob oder wann Apple plant, dies zu ändern? Ich weiß, dass vor einem Jahr in dieser Antwort "in ein oder zwei Jahren" stand. –

Verwandte Themen