【iOS開発】Zip解凍・圧縮ライブラリ「SSZipArchive」の紹介

どうも、開発部のMです。

今年もiOS開発で得たちょっとした情報を共有出来ればと思いますので
引き続きよろしくお願いします!

さて、去年は天気アプリの開発を行っていたMですが、
今月から内容が変わって動画アプリの開発をしております。

動画アプリといえば動画の再生はもちろん、サムネイル一覧を表示したり、
動画の情報を表示してあげたりと通信周りやデータ管理が大変で
以前リリースした「動画検索楽々」も通信周りで苦労した記憶があります。

携帯デバイスという以上、データ通信量はなるべく抑えたいところなので
いかにして通信量を減らすかが動画アプリの重要なポイントですね


というわけで、今回は圧縮データを使ってデータ通信量を減らそう!
Zipファイルを手軽に扱えるライブラリ「SSZipArchive」をご紹介します!

使い方は簡単!

1.下記から「SSZipArchive」ファイルをダウンロード
https://github.com/soffes/ssziparchive

2.SSZipArchiveフォルダとライブラリ「libz」をTargetに追加する

3.使用するファイルに「SSZipArchive.h」をインポートするだけ

あとは下記のように対象のファイルパスを渡すだけでOK!

//Zip解凍
NSString *zipPath = @”zip_file_path”;
NSString *unzippedPath = @”unzipped_file_path”;
[SSZipArchive unzipFileAtPath:zipPath toDestination:unzippedPath];

// Zip圧縮
NSString *zippedPath = @”zipped_file_path”;
NSArray *inputPaths = 
[NSArray arrayWithObjects:
    [[NSBundle mainBundle] pathForResource:@”image1″ ofType:@”png”],
        [[NSBundle mainBundle] pathForResource:@”image2″ ofType:@”png”],
 nil];
[SSZipArchive createZipFileAtPath:zippedPath withFilesAtPaths:inputPaths];


引数にパスワードやdelegateを追加してやれば
パスワードの設定や解凍完了時の処理を拾うことも出来ますし、
万が一、解凍や圧縮に失敗しても成否を返してくれるので安心です。
また、MITライセンスなので安心して使うことができますね。


おまけ
Zipよりもgzipを使いたい人はNSURLConnectionが通信する際にgzipを
自動的に解凍してくれる機能があるのでヘッダに以下の値を追加しよう。
[connection setValue:@”gzip” forHTTPHeaderField:@”Accept-Encoding”];