How to Play With Zip Files in iOS

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;
I am trying to open a password protected zip file but cant open it. Can you help me regarding that?
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?
Hello, the whole thing is going sound here and ofcourse every one is sharing data, that’s actually excellent, keep
up writing.
There is definately a lot to learn about this subject.
I really like all the points you have made.
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..
Hi, Neat post. There’s a problem together with your web site in internet explorer, might test this?
IE nonetheless is the market chief and a huge component to people will
miss your great writing due to this problem.
Feel free to surf to my web-site; marcelspringfield.webgarden.at
I’ve been surfing online more than 3 hours today, yet I never found any interesting
article like yours. It’s pretty worth enough for me.
In my view, if all web owners and bloggers made good content as you
did, the internet will be a lot more useful than ever before.
My web-site – http://forum.adm-tolka.ru/
I am happy that I observed this website, precisely the right info that I was looking for!
my blog: Allura Fresh Cream
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.
What a stuff of un-ambiguity and preserveness of precious
knowledge on the topic of unpredicted emotions.
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
Hi there to every one, it’s really a pleasant for me to visit this website, it includes important Information.
Hello.This post was extremely remarkable, especially because I was searching for thoughts on this issue last Monday.
Here is my web site http://www.mattgerry.co.uk
Seria muito bacana se você pudesse disponibilizar seu
material em formato RSS para que os visitantes
pudessem ter acesso rápido.
Oi , sou engenheiro mas muito interessado em assuntos que são abordados neste site .
Tenho tentado inserir o que vejo aqui, em meus negócios
e muito tem me ajudado . obrigado e bons negócios
Me recomendaram este site e me informaram que o assunto era sempre conversado em bom nível.
Acessei e pude comprovar exatamente isso . Parabéns pelo artigo!
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,
Thanks for another fantastic post. Where else may
anybody get that kind of information in such a perfect approach of writing?
I have a presentation next week, and I’m on the look for such information.
Also visit my web-site; http://www.alotofsex.com
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
Very good article! We will be linking to this particularly great article
on our website. Keep up the great writing.
Feel free to visit my page Cool Blast Portable AC
só quero falar que seu blog é incrível . parabéns pelo material
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!
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!
Now I am going to do my breakfast, after having my breakfast coming yet again to read other
news.
Also visit my webpage … http://www.zichen.com
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.
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
It’s going to be end of mine day, however before end I am reading
this great paragraph to increase my knowledge.
Here is my web blog … Testo Bull
Great article! We will be linking to this great article on our site.
Keep up the good writing.
Check out my website Rapid Keto Cut Pills
uk viagra no prescription