UnrarKit 2.9-beta8

UnrarKit 2.9-beta8

TestsTested
LangLanguage C++C++
License BSD
ReleasedLast Release Nov 2017

Maintained by Dov Frankel.


Downloads

Total50,046
Week0
Month2,420

Installs

Apps683
Test Targets23
powered by Segment

GitHub

Stars101
Watchers6
Forks28
Issues3
Contributors4
Pull Requests0

Code

Files122
LOCLines of Code 17,413


UnrarKit 2.9-beta8

About

UnrarKit is here to enable Mac and iOS apps to easily work with RAR files for read-only operations. It is currently based on version 5.2.1 of the UnRAR library.

There is a main project, with unit tests, and a basic iOS example project, which demonstrates how to use the library. To see all of these, open the main workspace file.

I'm always open to improvements, so please submit your pull requests, or create issues for someone else to implement.

Installation

UnrarKit supports both CocoaPods and Carthage. CocoaPods does not support dynamic framework targets (as of v0.39.0), so in that case, please use Carthage.

Cartfile:

github "abbeycode/UnrarKit"

Podfile:

pod "UnrarKit"

Example Usage

NSError *archiveError = nil;
URKArchive *archive = [[URKArchive alloc] initWithPath:@"An Archive.rar" error:&archiveError];
NSError *error = nil;

Listing the file names in an archive

NSArray<String*> *filesInArchive = [archive listFilenames:&error];
for (NSString *name in filesInArchive) {
    NSLog(@"Archived file: %@", name);
}

Listing the file details in an archive

NSArray<URKFileInfo*> *fileInfosInArchive = [archive listFileInfo:&error];
for (URKFileInfo *info in fileInfosInArchive) {
    NSLog(@"Archive name: %@ | File name: %@ | Size: %lld", info.archiveName, info.filename, info.uncompressedSize);
}

Working with passwords

NSArray<URKFileInfo*> *fileInfosInArchive = [archive listFileInfo:&error];
if (archive.isPasswordProtected) {
    NSString *givenPassword = // prompt user
    archive.password = givenPassword
}

// You can now extract the files

Extracting files to a directory

BOOL extractFilesSuccessful = [archive extractFilesTo:@"some/directory"
                                            overWrite:NO
                                             progress:
    ^(URKFileInfo *currentFile, CGFloat percentArchiveDecompressed) {
        NSLog(@"Extracting %@: %f%% complete", currentFile.filename, percentArchiveDecompressed);
    }
                                                error:&error];

Extracting a file into memory

NSData *extractedData = [archive extractDataFromFile:@"a file in the archive.jpg"
                                            progress:^(CGFloat percentDecompressed) {
                                                         NSLog(@"Extracting, %f%% complete", percentDecompressed);
                                            }
                                               error:&error];

Streaming a file

For large files, you may not want the whole contents in memory at once. You can handle it one "chunk" at a time, like so:

BOOL success = [archive extractBufferedDataFromFile:@"a file in the archive.jpg"
                                              error:&error
                                             action:
                ^(NSData *dataChunk, CGFloat percentDecompressed) {
                    NSLog(@"Decompressed: %f%%", percentDecompressed);
                    // Do something with the NSData chunk
                }];

Notes

To open in Xcode, use the UnrarKit.xcworkspace file, which includes the other projects.

Documentation

Full documentation for the project is available on CocoaDocs.

Credits


1: Or set followTags = true in your git config to always get this behavior:

git config --global push.followTags true