Как распаковать большой zip-файл, содержащий один файл, и получить прогресс в байтах с помощью swift?

Я пытаюсь распаковать большой zip-файл, содержащий только один элемент (более 100 МБ), и мне нравится показывать прогресс во время распаковки.

Я нашел решения, в которых прогресс можно определить по количеству разархивированных файлов, но в моем случае у меня есть только один большой файл внутри. Так что я думаю, это должно быть определено количеством разархивированных байтов?

На самом деле я использую SSZipArchive со следующим кодом, который отлично работает:

    var myZipFile:NSString="/Users/user/Library/Developer/CoreSimulator/Devices/mydevice/ziptest/testzip.zip";
    var DestPath:NSString="/Users/user/Library/Developer/CoreSimulator/Devices/mydevice/ziptest/";


    let unZipped = SSZipArchive.unzipFileAtPath(myZipFile as! String, toDestination: DestPath as! String);

Я не нашел решений для этого.

У кого-нибудь есть подсказка, образец или ссылка на образец?

ОБНОВИТЬ: Следующий код выглядит так, как будто он будет работать так, как задумано, но обработчик будет вызываться только один раз (в конце распаковки), когда разархивирован только один файл:

func unzipFile(sZipFile: String, toDest: String){

        SSZipArchive.unzipFileAtPath(sZipFile, toDestination: toDest, progressHandler: {
            (entry, zipInfo, readByte, totalByte) -> Void in


            println("readByte : \(readByte)") // <- This will be only called once, at the end of unzipping. My 500MB Zipfile holds only one file. 
            println("totalByte : \(totalByte)")


            //Asynchrone task
            dispatch_async(dispatch_get_main_queue()) {
                println("readByte : \(readByte)")
                println("totalByte : \(totalByte)")

                //Change progress value

            }
            }, completionHandler: { (path, success, error) -> Void in
                if success {
                    //SUCCESSFUL!!
                } else {
                    println(error)
                }
        })

    }

ОБНОВЛЕНИЕ 2:

Как анализировал «Мартин Р» в SSArchive, это невозможно. Есть ли другой способ разархивировать файл и показать на основе прогресса в килобайтах?

ОБНОВЛЕНИЕ 3:

Я изменил SSZipArchive.m после того, как решение было объяснено как «рут» следующим образом. Возможно, кто-то еще может использовать это тоже:

FILE *fp = fopen((const char*)[fullPath UTF8String], "wb");
                while (fp) {
                    int readBytes = unzReadCurrentFile(zip, buffer, 4096);

                    if (readBytes > 0) {
                        fwrite(buffer, readBytes, 1, fp );
                        totalbytesread=totalbytesread+4096;
                        // Added by me
                        if (progressHandler)
                        {
                            progressHandler(strPath, fileInfo, currentFileNumber, totalbytesread);
                        }
                        // End added by me

                    } else {
                        break;
                    }
                }

Ответы на вопрос(2)

Ваш ответ на вопрос