shobylogy

叩けシンプルの杖

zip内の特定ファイルを取り出すライブラリSBYZipArchiveを公開しました

zipファイルを展開せず、一部のファイルだけを取り出したかったので作りました。ニッチ!

SBYZipArchive

基本的にminizipのObjective-Cラッパーです。

インストール

CocoaPodsに対応してるので、こんな風に書けば使えます。

platform :ios, '7.0'
pod 'SBYZipArchive'

使い方

セットアップ

NSString *path = @"zip_file_path";
SBYZipArchive *archive = [[SBYZipArchive alloc] initWithContentsOfFile:path error:nil];

[archive loadEntries:nil];

loadEntries:でzip内のファイル情報を読み込んでいます。1回呼べばOKです。

ファイル抽出

SBYZipEntry *entry = archive.entries[0];
NSData *data = entry.data;

ファイル名でフィルタリングする場合

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fileName like %@", @"*cat*"];
NSArray *filterdEntries = [archive.entries filteredArrayUsingPredicate:predicate];

SBYZipEntry *entry = [filterdEntries firstObject];
NSData *data = entry.data;

用途

zipファイルに対応した漫画ビューアーとか作る時にそこそこ便利だと思われます。

裏話

前にこんな記事を書いたのですが、zipzapを使うとiPhone4などの旧端末で死ぬ*1ことが分かり、泣く泣く自作することに。せっかくなのでライブラリとして公開しました。

ちなみにこのライブラリ、コミケカタログビューアのために作ったのですが、アクティベーション必須化でサードパーティアプリはデータを使えなくなってしまいました。とほほ…

*1:zipzapはzipファイル全体を一度仮想メモリ上にマッピングする仕様。iPhone4などの端末の場合、500MB程度のファイルだと制限に引っかかるらしい