From c17e76ceb8b475dce705f0f1985345598ddb7543 Mon Sep 17 00:00:00 2001 From: Bogo Giertler Date: Wed, 11 May 2016 16:39:08 +0100 Subject: [PATCH] Create the .DS_Store files in temp directory for read-only contexts --- SSZipArchive/SSZipArchive.m | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/SSZipArchive/SSZipArchive.m b/SSZipArchive/SSZipArchive.m index e16208d..14f1532 100755 --- a/SSZipArchive/SSZipArchive.m +++ b/SSZipArchive/SSZipArchive.m @@ -457,10 +457,9 @@ { if([[NSFileManager defaultManager] subpathsOfDirectoryAtPath:fullFilePath error:nil].count == 0) { - NSString *tempName = [fullFilePath stringByAppendingPathComponent:@".DS_Store"]; - [@"" writeToFile:tempName atomically:YES encoding:NSUTF8StringEncoding error:nil]; - [zipArchive writeFileAtPath:tempName withFileName:[fileName stringByAppendingPathComponent:@".DS_Store"] withPassword:password]; - [[NSFileManager defaultManager] removeItemAtPath:tempName error:nil]; + NSString *tempFilePath = [self _temporaryPathForDiscardableFile]; + NSString *tempFileFilename = [fileName stringByAppendingPathComponent:tempFilePath.lastPathComponent]; + [zipArchive writeFileAtPath:tempFilePath withFileName:tempFileFilename withPassword:password]; } } } @@ -475,6 +474,20 @@ return success; } ++ (NSString *)_temporaryPathForDiscardableFile +{ + static NSString *discardableFileName = @".DS_Store"; + static NSString *discardableFilePath = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *temporaryDirectoryName = [[NSUUID UUID] UUIDString]; + NSString *temporaryDirectory = [NSTemporaryDirectory() stringByAppendingPathComponent:temporaryDirectoryName]; + BOOL directoryCreated = [[NSFileManager defaultManager] createDirectoryAtPath:temporaryDirectory withIntermediateDirectories:YES attributes:nil error:nil]; + discardableFilePath = directoryCreated ? [temporaryDirectory stringByAppendingPathComponent:discardableFileName] : nil; + [@"" writeToFile:discardableFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; + }); + return discardableFilePath; +} - (instancetype)initWithPath:(NSString *)path {