Objective-CでZip圧縮

Obcective-CでZipを扱う場合、ZipArchiveという便利なライブラリがあるのでそれを使う。 ライセンスもMIT Licenseということなので使いやすそうである。 すばらしい(・∀・) ← GPL大嫌い

使い方。 1. ライブラリをDLしてプロジェクトに追加する。 2. ZipArchiveを利用するためにはlibz.dylibというframeworkが必要なのでこれをプロジェクトに加える* 3. 以下のようにコーディングする。

Zip圧縮

- (void) zip
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSString* zipFile = ;
    NSMutableArray *inputDataArray = [[[NSMutableArray alloc] initWithCapacity: 0] autorelease];
    [inputDataArray addObject: 圧縮したいファイルのフルパス];
    [inputDataArray addObject: 圧縮したいファイルのフルパス];
   
    ZipArchive* archiver = [[ZipArchive alloc] init];
    BOOL ret = [archiver CreateZipFile2: zipファイルの保存先(フルパス)];
    //BOOL ret = [archiver CreateZipFile2: zipファイルの保存先(フルパス) Password: 解凍パスワード];(パスワードを入れないとノーパスワードで解凍できる形で圧縮してくれる)

    if (ret) {
        for (NSString* filePath in inputDataArray) {
            [archiver addFileToZip: filePath
                           newname: zipファイル内での相対パス];
    //展開したときフォルダに入れたいならフォルダ名/ファイル名
        }
    }
    
    [archiver CloseZipFile2];
    [archiver release];
    [pool release];
}

Zip展開

- (void) unzip{
    ZipArchive* decoder = [[ZipArchive alloc] init];
    
    if([decoder UnzipOpenFile: 展開したいzipファイルのフルパス]){
    //if([decoder UnzipOpenFile: 展開したいzipファイルのフルパス] Password: 解凍パスワード(""だと上と同じ挙動)]){
        BOOL ret = [decoder UnzipFileTo:@"展開場所のフルパス" overWrite:YES];
        if(NO == ret) {
            // エラー処理
        }
        [za UnzipCloseFile];
    }
 
    [za release];
}

圧縮/解凍とも、パスワードに空文字列を入れるとパスワードなしと認識して動いてくれるのがありがたい。

  • XCode4でのframeworkの追加方法 XCode4で色々と操作方法が変わってまだ使い方がよく分からない人も多いんじゃないだろうか、 ということで、とりあえずframeworkの追加方法を書いておく。

プロジェクトファイルをクリック > Build Phasesをクリック > Link Binary With Librariesから選択

Written on March 21, 2011