iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
iOSはストレージ容量もメモリも節約を求められる。また、データサイズが小さくなる事によって、操作性の向上も期待できる。
その為にキーとなる事の一つにデータの圧縮と解凍があるが、今回は、Cocoaでzipデータを扱う初歩的に事に挑戦する。
業務上パスワード付きzip圧縮ファイルを受け取る事が多いのだが、何時もこれを解凍するのをコマンドラインでおこなっていた。
$ unzip -P パスワード ファイル.zip
これをAppStore時代では存在が小さくなってしまったが、Dropletsとして実装してみよう。
Mac OS XのCocoa Applicationを新規作成し、TARGETSの設定のDocument TypesにZip文書を追加する。
アプリケーションのデリゲートに、以下のコードを追加する。
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
DBGMSG(@"%s, filename(%@)", __func__, filename);
return NO;
}
これでドラッグ&ドロップされた一つのファイルのパスが取得できるようになった。
次に、ZipArchiveライブラリを以下のサイトから入手する。
入手したZipArchiveライブラリをプロジェクトに組み込み、ZipArchive.hでUIKit.hをインクルードしているのでコメントアウトし、
ZipArchive.mmをARCの対象から外す。
そして、かなり手抜きをしているが、zipファイルが渡されると、末尾の"zip"サフィクスを削るコードを先ほどのメソッドに追加する。
#import "ZipArchive.h"
:
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
ZipArchive *archiver = [[ZipArchive alloc] init];
[archiver UnzipOpenFile:filename];
NSString *path = [filename stringByDeletingPathExtension];
[archiver UnzipFileTo:path overWrite:NO];
[archiver UnzipCloseFile];
return YES;
}
: