Skip to content
Insights by Aasim Naseem
Insights by Aasim Naseem
How to Use Zip File in IOS - AasimNaseem.com

Tutorial: How to play with zip files in iOS;

AasimNaseem, January 11, 2013April 9, 2025

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

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 lets 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 zip/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 downloaded library into your project and chose “copy items” option from a popup window;
  • Add the following values in to your Constants file; If you are using .pch file, then declare then using @define macro;

[code language=”objc” wraplines=”false”]
//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”;
[/code]

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;

[code language=”objc” wraplines=”false”]
-(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
[/code]

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;

[code language=”objc” wraplines=”false”]
-(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
[/code]

Thats 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

iOS

Post navigation

Previous post
Next post

Comment

  1. iamiphonedeveloper says:
    October 24, 2013 at 2:39 pm

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

    Reply

Leave a Reply Cancel reply

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

Recent Posts

  • Economic impact of Eid-ul-Adha
  • Best PMP Study Resources for 2025 (Books, Courses, Tools & More)
  • Agile vs Scrum: Finally Understanding the Difference
  • When Not To Use Agile: 5 Signs You Need a Different Approach
  • Quran on Peace and Kindness

Recent Comments

  1. Pass the PMP Exam On First Attempt - Aasim's Web Corner on PMP Exam Eligibility 2025: 3 Things You Need to Know
  2. Pass the PMP Exam On First Attempt - Aasim's Web Corner on 5 PMP Exam Preparation Mistakes You’re Probably Making (And How to Fix Them Fast)
  3. Pass the PMP Exam On First Attempt - Aasim's Web Corner on 4 Common Questions & Answers About PMP Exam
  4. Pass the PMP Exam On First Attempt - Aasim's Web Corner on Best PMP Study Resources for 2025 (Books, Courses, Tools & More)
  5. Aasim Naseem on When Not To Use Agile: 5 Signs You Need a Different Approach

Archives

  • June 2025
  • May 2025
  • April 2025
  • January 2025
  • November 2024
  • April 2024
  • October 2022
  • August 2021
  • September 2020
  • May 2020
  • April 2019
  • January 2019
  • September 2018
  • July 2015
  • June 2015
  • November 2014
  • September 2014
  • April 2014
  • June 2013
  • May 2013
  • February 2013
  • January 2013
  • December 2012
  • September 2012
  • August 2012
  • July 2012
  • June 2012
  • March 2012
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009

Categories

  • Agile & Frameworks
  • Amazon Kindle
  • Android
  • Aspect Oriented Programming
  • BlackBerry
  • Blog
  • Code Repositories
  • History
  • iOS
  • Islam
  • Java
  • JavaScript
  • Life Around Us
  • Linux
  • My Bookshelf
  • My Poetry
  • My Sketch Work
  • PMP Certification
  • Project Management
  • Random Tips
  • Saunterer Soul
©2026 Insights by Aasim Naseem | WordPress Theme by SuperbThemes