How to Play With Zip Files in iOS

Aasim Naseem 29

Hello Dev mates…
Hope you are enjoying your work in winters; (:

A few days back I was working on a project where I needed to compress some files to create a zip archive; Although my teammate has done much of the work, I just refined some business logic and finalized the code to complete this feature; So let’s start and see how we achieved this

1. Setup your project

  • Download an open-source library from here; It is a very handy library for zipping/unzip operations, written by Shannon Ai (acsolu@gmail.com)
  • Create new project in Xcode (or open your existing one)
  • Add libz.1.2.3.dylib into your project frameworks;
  • Drag and drop the downloaded library into your project and chose the “copy items” option from a popup window;
  • Add the following values to your Constants file; If you are using .pch file, then declare then using @define macro;

//in .h file
FOUNDATION_EXPORT NSString *const kZipFileName; //name of zip file to be created;
FOUNDATION_EXPORT NSString *const kDirNameToCompress; //name of directory who’s contents will be compressed;
FOUNDATION_EXPORT NSString *const kTargetDirName;//directory name where zip file will be extracted;
FOUNDATION_EXPORT NSString *kZipFileCreateErrorMessage; //error message string;
FOUNDATION_EXPORT NSString *kErroMessageTitle; //error title;
FOUNDATION_EXPORT NSString *kOKButtonTitle; //Title of cancel button over alert view;

//in .m file
NSString *const kZipFileName = @”CompressedData.zip”;
NSString *const kTargetDirName = @”AnyDirName”;
NSString *const kDirNameToCompress @”dirToZip_OR_fileNameToZip”;
FOUNDATION_EXPORT NSString *kZipFileCreateErrorMessage = @”Unable to to create zip file. Please try again later”;
FOUNDATION_EXPORT NSString *kErroMessageTitle = @”Error”;
FOUNDATION_EXPORT NSString *kOKButtonTitle = @”Ok”;

2. Create a zip file in any directory under/Document;

  • #import “ZipArchive.h” into your class where you want to write zip code;
  • Use the following code to create a zip file;

-(void) createZipFile{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *zipFile = [documentsDirectory stringByAppendingPathComponent:kZipFileName];//The place where zip file will be created;
ZipArchive *zip = [[ZipArchive alloc] init];
BOOL result = [zip CreateZipFile2:zipFile];//this line will create an empty zip file with 0 KB in size;
if(result){
NSError *error;
NSArray *allFiles = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:kDirNameToCompress error:&error];//get list of all files in directory which need to compress;
for(int index = 0; index<allFiles.count; index++){
id singleFileName = [allFiles objectAtIndex:index];
NSString *singleFilePath = [kDirNameToCompress stringByAppendingPathComponent:singleFileName];
[zip addFileToZip:singleFilePath newname:singleFileName];//one file has been added into zip archive
}//end for
[zip CloseZipFile2];
[zip release];//ignore this if you are using ARC
}else{
[self showErrorMessage:kZipFileCreateErrorMessage withTitle:kErroMessageTitle];
}//end else
}//end createZipFile
//——————————————————
-(void) showErrorMessage:(NSString *)paramErrorMessage withTitle:(NSString*) paramTitle{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:paramTitle message:paramErrorMessage
delegate:nil
cancelButtonTitle:kOKButtonTitle otherButtonTitles:nil];
[alert show];
[alert release];//ignore this if you are using ARC;
}//showErrorMessage

3. Decompress a zip archive;

  • #import “ZipArchive.h” into your class where you want to write unzip code;
  • Use the following code to extract a zip file;

-(void) decompressZipArchive {
NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0];
NSString * zipFilePath = [documentsDirectory stringByAppendingPathComponent: kZipFileName];
NSString * targetDirPath = [documentsDirectory stringByAppendingPathComponent: kTargetDirName];
ZipArchive * zipArchive = [
[ZipArchive alloc] init
];
if ([zipArchive UnzipOpenFile: zipFilePath]) {
if ([zipArchive UnzipFileTo: targetDirPath overWrite: YES] != NO) { //one magical line
//do whatever you want to do with uncompressed data
//or just leave as it is after handling errors
} //end if
[zipArchive UnzipCloseFile];
} //end if
[zipArchive release]; //ignore this if you are using ARC
} //end decompressZipArchive

That’s all; You can use this code as it is into your project; Leave a comment if you find yourself in any trouble;

Happy coding, and happy winters;

Flag Counter

29 Replies to “How to Play With Zip Files in iOS”

  1. I am trying to open a password protected zip file but cant open it. Can you help me regarding that?

  2. Remarkable issues here. I am very satisfied to look your article.
    Thank you a lot and I am looking forward to contact
    you. Will you kindly drop me a e-mail?

  3. Hello, the whole thing is going sound here and ofcourse every one is sharing data, that’s actually excellent, keep
    up writing.

  4. I’m extremely impressed together with your writing abilities and also with the format in your blog.
    Is that this a paid topic or did you modify it your self?
    Anyway keep up the excellent quality writing, it is uncommon to see a nice weblog like this one today..

  5. I have been exploring for a little bit for any high quality articles or weblog posts in this kind of house .
    Exploring in Yahoo I eventually stumbled upon this site.
    Reading this information So i’m happy to
    exhibit that I have an incredibly good uncanny feeling I discovered exactly what I needed.

    I most without a doubt will make certain to don?t put out of your mind this website
    and provides it a look regularly.

  6. Great blog here! Also your site a lot up very fast!
    What host are you using? Can I get your associate hyperlink on your
    host? I desire my site loaded up as fast as yours lol

  7. I think that is one of the so much vital info for me.

    And i’m glad reading your article. But want to remark on some
    general issues, The web site style is wonderful, the articles is in point
    of fact great :D. Just right job, cheers.

    my web blog :: Vigor Max, forum.adm-tolka.ru,

  8. Undeniably believe that which you said. Your favorite reason appeared to be
    on the net the easiest thing to be aware of. I say to you, I definitely get annoyed while people consider worries that they just
    do not know about. You managed to hit the nail upon the
    top as well as defined out the whole thing without
    having side-effects , people can take a signal. Will likely be back to
    get more. Thanks

    my blog :: Primiene Reviews

  9. Spot on with this write-up, I actually feel this web site needs far more attention. I’ll probably
    be back again to see more, thanks for the info!

  10. The other day, while I was at work, my cousin stole my iphone and tested to see if it can survive a twenty five foot drop,
    just so she can be a youtube sensation. My iPad is now destroyed and she has 83 views.

    I know this is totally off topic but I had to share it with
    someone!

  11. I do believe all of the ideas you’ve presented for your post.

    They are very convincing and can certainly work. Still, the posts are too brief for novices.
    Could you please extend them a little from next time?
    Thank you for the post.

  12. Thanks a lot for sharing this with all folks you actually recognize what you
    are talking approximately! Bookmarked. Kindly additionally consult with my website =).
    We could have a hyperlink change agreement
    among us!

    Here is my website LeafMax CBD

Leave a Reply

Your email address will not be published. Required fields are marked *