web-dev-qa-db-ja.com

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

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

これらは、Archiveビルド構成のRelease操作から作成された.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のプロジェクトです。 Defines Module設定はYesに設定されます。
  • プロジェクトは、use_frameworks!が設定されたCocoaPodsを使用します。
  • 複数のデバイスとiOSバージョンでのTestFlightからの実際のダウンロードサイズを確認しましたが、30〜60 MBの範囲にあります(おそらく、アプリのスライスによる違いです)。以前は9 MBでした。
94
Blixt

最も可能性が高いのはBitCodeであり、App Storeから展開してもアプリのサイズは実際には成長していませんが、同じ成長を見ています。

アプリや他のターゲットでもBitCodeを無効にすることができ、縮小が見られるはずです。

26
David Rothera

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

TestFlight、App Store、およびデバイス間の差異を示すサンプルを次に示します。

TestFlight、iOS 9.1上の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アセットを使用するため、バンドルサイズが大きくなる可能性が非常に高くなります。

19
Blixt

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

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

また、アプリのサイズはアプリの細線化によっても縮小できることに注意する必要があります。これについては、 https://developer.Apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introductionで確認できます。 /Introduction.html 。アドホックエクスポートを実行して、とにかくアプリの各間引きバリアントのサイズを確認することができます。

11
Rick Ballard

埋め込みビットコードが理由です。

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

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

5
Nuray Altin

Swift 1.2でもこの問題が発生しました。この同じ問題に関する元の質問については、 SwiftSupportライブラリが2回含まれないようにする方法 を参照してください。

これはツールチェーンの問題だと確信しています。

0
Stefan Arentz