トップ «前の日記(2012-02-27) 最新 次の日記(2012-02-29)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|

2012-02-28 [Mac][iOS]ZipArchive ファイルの圧縮と解凍

iOSはストレージ容量もメモリも節約を求められる。また、データサイズが小さくなる事によって、操作性の向上も期待できる。
その為にキーとなる事の一つにデータの圧縮と解凍があるが、今回は、Cocoaでzipデータを扱う初歩的に事に挑戦する。

業務上パスワード付きzip圧縮ファイルを受け取る事が多いのだが、何時もこれを解凍するのをコマンドラインでおこなっていた。

$ unzip -P パスワード ファイル.zip

これをAppStore時代では存在が小さくなってしまったが、Dropletsとして実装してみよう。

Mac OS XのCocoa Applicationを新規作成し、TARGETSの設定のDocument TypesにZip文書を追加する。

Document Types

アプリケーションのデリゲートに、以下のコードを追加する。

- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
    DBGMSG(@"%s, filename(%@)", __func__, filename);
    return NO;
}

これでドラッグ&ドロップされた一つのファイルのパスが取得できるようになった。

次に、ZipArchiveライブラリを以下のサイトから入手する。

入手したZipArchiveライブラリをプロジェクトに組み込み、ZipArchive.hでUIKit.hをインクルードしているのでコメントアウトし、

ZipArchive.h

ZipArchive.mmをARCの対象から外す。

ZipArchive.mm

そして、かなり手抜きをしているが、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;
}
        :

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/mac/UnZip - GitHub

_ 関連情報

ZipArchive
An Objective C class for zip/unzip on iPhone and Mac OSX

トップ «前の日記(2012-02-27) 最新 次の日記(2012-02-29)» 編集