zipファイルを展開せず、一部のファイルだけを取り出したかったので作りました。ニッチ!
基本的に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程度のファイルだと制限に引っかかるらしい