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; iOS
I am trying to open a password protected zip file but cant open it. Can you help me regarding that? Reply