Xcode 7に切り替えた後、アプリのサイズが9 MBから60 MBに増加しました。修正はありますか?


96

私はGitの歴史をさかのぼって、巨大なファイルサイズの変更の原因を見つけましたが、私が見つけることができる唯一の本当の理由は、Xcode 6からXcode 7 GMへの切り替えです。

これらは、リリースビルド構成のアーカイブ操作.ipaから作成されたファイルサイズのトップ10の原因であることがわかりました。

$ 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

圧倒的に大きいファイルは2つの(わずかに異なる)libswiftCore.dylibファイルで、合計で32 MBを超えます。Xcode 6によってビルドされたバンドルでは、これら2つのファイルの合計はわずか3 MBでした。

したがって、質問1は次のとおりです。なぜSwiftコアファイルが2度存在するのですか。(埋め込みコンテンツに含まれるSwiftコードNoに設定されている)。

そして質問#2は:何が起こったのですか?Swiftコアのサイズが15 MB増加したのはなぜですか?これは永続的ですか?

追加のメモ:

  • これは完全にObjective-Cでしたが、現在はほとんどSwiftのプロジェクトです。[ モジュール定義]設定は[ はい]に設定されています。
  • プロジェクトでは、CocoaPodsをuse_frameworks!セットで使用します。
  • 複数のデバイスとiOSバージョンでのTestFlightからの実際のダウンロードサイズを確認しました。それは30〜60 MBの範囲です(おそらく、アプリのスライスによる違いです)。以前は9 MBでした。

4
Xcode 7はアプリのスライスを使用します。ダウンロードサイズはおそらく異なり、おそらく減少します。私はこれについて心配しません。
Adam

6
@アダム:これはそうではありません。デプロイされたバージョンはデバイスによって異なりますが、これまでのところ、iPhone 5sでは30 MB、iPhone 6では60 MBです。インストール時間は著しく増加しています。以前は9 MBでしたが、これは間違いなく気になる問題です。
Blixt

3
実際、30 MBと60 MBの違いは、iPhone 5がiOS 9.1にあり、iPhone 6がiOS 8にあることが原因である可能性が高いです。 MB。
Blixt

2
TestFlight経由でデプロイしましたか?アプリの薄化はAppleサーバーで行われるので、TestFlight / iTunesを介してインストールしない限り、縮小されたサイズを確認することはできないと思います。
MirekE

2
TestFlightにアップロードした後、アプリのサイズが74MBから9.6MBに減少したので心配しないでください
Gintama

回答:


27

BitCodeが原因である可能性が最も高いですが、同じ増加が見られましたが、App Storeからデプロイされた後、アプリのサイズは実際には増加していません。

アプリやその他のターゲットでBitCodeを無効にすることもでき、縮小が表示されます。


Apple TestFlightからのアプリのダウンロードサイズが9 MBではなく30〜60 MBであることを確認しました。おそらく同じ配布メカニズムを使用しているため、App Storeに掲載されれば変更されるとは思いません。ビットコードを無効にしてみます。
Blixt

ビルドとパブリッシュのステップでビットコードとデバッグシンボルを無効にし、ビルドバージョンをアーカイブしても、それぞれ同じサイズの2つのlibswiftCore.dylibファイルがそれぞれ約40 MB(圧縮で約16 MB)含まれます。TestFlightによる展開全体を確認していませんが、これらの巨大なファイルが.ipaの一部であるため、ファイルサイズへの影響が変わるとは思えません。全体のサイズは約10 MB縮小しましたが、これはおそらくクラッシュシンボルのサポートを削除したためと考えられます。
Blixt

1
私は個人的な経験をしているところです。私の.xcarchiveはXcode7より前のバージョンよりもLOTですが、リソースの薄化などにより、App Storeのダウンロードはわずかに小さくない場合でも同じサイズです
David Rothera

10
今見てみると、TestFlightからのバンドルは33MBで、AppStoreでの同じビルドの場合は10.5MBです。これは、TestFlightビルドでシンニングが行われていないことを示しています。
David Rothera

わかりました。アプリをApp Storeまで実行して、最高のものを期待します!
Blixt

19

私は多くの設定と組み合わせをテストしてきましたが、Xcode 7によって作成されたバンドルのファイルサイズは、デバイスとiOSのバージョンの両方によって大きく異なるようです。また、TestFlightビルドは以前と比べて非常に大きくなっていますが、良いニュースとして、App Storeでの大幅な増加はありませんでした(ただし、以前に比べてバンドルサイズに約1〜2 MBが追加されています)。 。

TestFlight、App Store、およびデバイス間の差異を示すためのいくつかのサンプルを以下に示します。

TestFlight、iOS 5上のiPhone 5s
35.6 MB

TestFlight、iOS 8.4.1上のiPhone 6
70.1 MB

App Store
11.8 MB

App Storeのサイズは、テストしたすべてのデバイスで同じでした。ただし、iPhone 6 Plusではテストしていません。@ 3xアセットを使用しているため、バンドルサイズが大きくなる可能性があります。


11

迅速なdylibと独自のコードのサイズは、ビットコードが含まれているため、.xcarchiveで、およびストア配布用にエクスポートするときに大幅に大きくなることが予想されます。この追加のサイズは、実際にユーザーに配信されるものには反映されないため、問題にはなりません。アプリをストアに送信すると、ストアはそれを処理してビットコードを取り除き、その処理されたバージョンのIPAがユーザーがダウンロードするものになります。

ストアエクスポート以外の種類のエクスポートをアーカイブから行う場合(アドホック展開用に保存など)、ビットコードをローカルで削除します(エクスポートでそのオプションをオンにしておくと、最初にビットコードからバイナリを再コンパイルします)ワークフロー、ストアで何が起こるかを再現するため)、アプリの実際の大きさを確認できます。TestFlightは、ビットコードも取り除き、実際のアプリサイズを表示します。

また、アプリの薄化によってアプリのサイズを縮小できることにも注意してください。これについては、https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.htmlを参照してください。。とにかく、アドホックエクスポートを実行して、アプリの間引き後の各バリアントのサイズを確認することをお勧めします。


6

埋め込まれたビットコードが理由です。

ENABLE_BITCODEを無効にしたくない場合は、デバッグシンボルを削除できます。

ビットコードを埋め込むことができるオプションの1つとして、デバッグシンボルを取り除く前にhttp://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.htmlを参照してください。


1
これは、象徴的なクラッシュレポートが表示されないことを意味しませんか?
Iulian Onofrei 2017

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.