Skip to content

A library to handle .tgz and .tar.gz files on iOS

License

Notifications You must be signed in to change notification settings

PimCoumans/NVHTarGzip

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NVHTarGzip

Version Platform

This is ObjC wrapper around tar and gzip that directly manipulates files and isn't implemented as a category on NSData like GZIP and Godzippa, so the full file doesn't have to be loaded into memory.

The tar implementation is based on Light-Untar-for-iOS, but is extended to include progress reporting through NSProgress

Usage

Inflate Gzip file

[[NVHTarGzip shared] unGzipFileAtPath:sourcePath toPath:destinationPath completion:^(NSError* gzipError) {
    if (gzipError != nil) {
        NSLog(@"Error unzipping %@",gzipError);
    }
}];

Untar file

[[NVHTarGzip shared] unTarFileAtPath:sourcePath toPath:destinationPath completion:^(NSError* tarError) {
    if (tarError != nil) {
        NSLog(@"Error untarring %@",tarError);
    }
}];

Inflate Gzip and Untar

[[NVHTarGzip shared] unTarGzipFileAtPath:sourcePath toPath:destinationPath completion:^(NSError* error) {
    if (error != nil) {
        NSLog(@"Error extracting %@",error);
    }
}];

This will unzip the file to a cache-directory, and consequently extract the tar archive. After untarring, the cache-file is deleted. You can customize the cachePath by setting it on the singleton object before extracting:

[[NVHTarGzip shared] setCachePath:customCachePath];

Progress

NVHTarGzip uses NSProgress to handle progress reporting. To keep track of progress create your own progress instance and use KVO to inspect the fractionCompleted property. See the documentation of NSProgress and this great article by Ole Begemann for more information.

NSProgress* progress = [NSProgress progressWithTotalUnitCount:1];
NSString* keyPath = NSStringFromSelector(@selector(fractionCompleted));
[progress addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionInitial context:NVHProgressFractionCompletedObserverContext];
[progress becomeCurrentWithPendingUnitCount:1];
[[NVHTarGzip shared] unTarGzipFileAtPath:self.demoSourceFilePath toPath:self.demoDestinationFilePath completion:^(NSError* error) {
    [progress resignCurrent];
    [progress removeObserver:self forKeyPath:keyPath];
}];

Checkout a full usage example in the example project; clone the repo, and run pod install from the Example directory first.

Todo

Compressing files is currently not supported. Pull requests are welcome!

Installation

NVHTarGzip is available through CocoaPods, to install it simply add the following line to your Podfile:

pod "NVHTarGzip"

Author

Niels van Hoorn, [email protected]

License

NVHTarGzip is available under the MIT license. See the LICENSE file for more info.

About

A library to handle .tgz and .tar.gz files on iOS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 66.7%
  • Shell 17.1%
  • Ruby 13.6%
  • C 2.0%
  • C++ 0.6%