AppStoreのアプリのサイズを小さくしようとして頑張ったけど無駄だった件

AppStoreでアプリを公開するときにアプリのサイズが50MBを超えてしまうとWiFiでないとダウンロードできなくなってしまうので、開発者の皆さんはなるべく50MB以内に抑えるようにしてるはず。

筆者も作ってたアプリのサイズが50MBに近づいてきたのでなんとかしようと考えたのが、

アプリ内で持っているデータをZIPに圧縮しておいて、使うときに解凍しよう

ということで、やってみました。

アプリ内で用意していたデータが30Mほどあったので、ZIPに圧縮してみたら10MB程度に減りました。
おお、これはいいぞということで、もともとアプリ内に格納していたデータを消して、かわりにZIPに固めたファイルを格納。

アプリが起動されたときにZIPを解凍するようにしました。
ZIPファイルを解凍するにはライブラリが必要なので、

Objective-CでZipファイルを解凍してそれを活用する方法 | ssdkfk

を参考に実装。意外と簡単にできました。

解凍したデータの置き場所はどこがいいのかと悩みましたが、Appleが公開しているファイルシステムプログラミングガイドを読むと、アプリ毎のライブラリフォルダのうちアプリケーションサポートのディレクトリ内がよさそうです。この場所はiTunesのバックアップ対象にもなって、ユーザーからは見えず、アプリ固有のデータを格納するための場所という位置づけです。
このパスは下の方法で取得できます。リストが返却されるので先頭のデータを取ってくればよいです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);

 

上の方法で取得したパスのしたに直接解凍するよりは、ディレクトリを作って解凍した方がいいでしょうね。

これで、配布するアプリのサイズがかなり小さくなるはず!と思ったらほとんど変わらなかった。。
アプリ自体のサイズは小さくなったんですが、AppStoreに並ぶときはアプリまるごと圧縮されたファイルが並ぶので、あらかじめ一部のファイルを圧縮しておいても最終的なダウンロードサイズは変わらないんですね。。
むしろ、アプリ起動時に30MBのZIPを解凍する処理が入ってしまうので、起動が遅くなるという負のおまけ付き。

アプリのサイズを小さくするために、データを圧縮しておくのは無駄ですよというお話でした。

どうしてもアプリのサイズを減らそうとするなら、アプリを立ち上げてから外部サイトからデータをダウンロードするとかしないと無理なのかな。

 そこまでするのは面倒なので、50MB超えない程度にちまちまと無駄を削減するか。
 

 

Tags: , , ,