| 
				
			 | 
			
			
				@@ -84,14 +84,17 @@ NSMutableDictionary *fileStreams = nil; 
			 | 
		
	
		
			
			| 
				84
			 | 
			
				84
			 | 
			
			
				     return tempPath; 
			 | 
		
	
		
			
			| 
				85
			 | 
			
				85
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				86
			 | 
			
				86
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				87
			 | 
			
				
			 | 
			
			
				-+ (void) writeFile:(NSString *)path encoding:(NSString *)encoding data:(NSString *)data resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				87
			 | 
			
			
				++ (void) writeFile:(NSString *)path encoding:(NSString *)encoding data:(NSString *)data append:(BOOL)append resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject { 
			 | 
		
	
		
			
			| 
				88
			 | 
			
				88
			 | 
			
			
				     @try { 
			 | 
		
	
		
			
			| 
				89
			 | 
			
				89
			 | 
			
			
				         NSFileManager * fm = [NSFileManager defaultManager]; 
			 | 
		
	
		
			
			| 
				90
			 | 
			
				90
			 | 
			
			
				         NSError * err = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				91
			 | 
			
			
				+        // check if the folder exists, if not exists, create folders recursively 
			 | 
		
	
		
			
			| 
				
			 | 
			
				92
			 | 
			
			
				+        // after the folders created, write data into the file 
			 | 
		
	
		
			
			| 
				91
			 | 
			
				93
			 | 
			
			
				         NSString * folder = [path stringByDeletingLastPathComponent]; 
			 | 
		
	
		
			
			| 
				92
			 | 
			
				94
			 | 
			
			
				         if(![fm fileExistsAtPath:folder]) { 
			 | 
		
	
		
			
			| 
				93
			 | 
			
				95
			 | 
			
			
				             [fm createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:NULL error:&err]; 
			 | 
		
	
		
			
			| 
				94
			 | 
			
				96
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				97
			 | 
			
			
				+        // if file exists, write file by encoding and strategy 
			 | 
		
	
		
			
			| 
				95
			 | 
			
				98
			 | 
			
			
				         if(![fm fileExistsAtPath:path]) { 
			 | 
		
	
		
			
			| 
				96
			 | 
			
				99
			 | 
			
			
				             if([[encoding lowercaseString] isEqualToString:@"base64"]){ 
			 | 
		
	
		
			
			| 
				97
			 | 
			
				100
			 | 
			
			
				                 NSData * byteData = [[NSData alloc] initWithBase64EncodedString:data options:0]; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -102,14 +105,21 @@ NSMutableDictionary *fileStreams = nil; 
			 | 
		
	
		
			
			| 
				102
			 | 
			
				105
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				103
			 | 
			
				106
			 | 
			
			
				         else { 
			 | 
		
	
		
			
			| 
				104
			 | 
			
				107
			 | 
			
			
				             NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:path]; 
			 | 
		
	
		
			
			| 
				105
			 | 
			
				
			 | 
			
			
				-            [fileHandle seekToEndOfFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				108
			 | 
			
			
				+            NSData * content = nil; 
			 | 
		
	
		
			
			| 
				106
			 | 
			
				109
			 | 
			
			
				             if([[encoding lowercaseString] isEqualToString:@"base64"]) { 
			 | 
		
	
		
			
			| 
				107
			 | 
			
				
			 | 
			
			
				-                NSData * byteData = [[NSData alloc] initWithBase64EncodedString:data options:0]; 
			 | 
		
	
		
			
			| 
				108
			 | 
			
				
			 | 
			
			
				-                [fileHandle writeData:byteData]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				110
			 | 
			
			
				+                content = [[NSData alloc] initWithBase64EncodedString:data options:0]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				111
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				112
			 | 
			
			
				+            else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				113
			 | 
			
			
				+                content = [data dataUsingEncoding:NSUTF8StringEncoding]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				114
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				115
			 | 
			
			
				+            if(append == YES) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				116
			 | 
			
			
				+                [fileHandle seekToEndOfFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				117
			 | 
			
			
				+                [fileHandle writeData:content]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				118
			 | 
			
			
				+                [fileHandle closeFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				119
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				120
			 | 
			
			
				+            else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				121
			 | 
			
			
				+                [content writeToFile:path atomically:YES]; 
			 | 
		
	
		
			
			| 
				109
			 | 
			
				122
			 | 
			
			
				             } 
			 | 
		
	
		
			
			| 
				110
			 | 
			
				
			 | 
			
			
				-            else 
			 | 
		
	
		
			
			| 
				111
			 | 
			
				
			 | 
			
			
				-                [fileHandle writeData:[data dataUsingEncoding:NSUTF8StringEncoding]]; 
			 | 
		
	
		
			
			| 
				112
			 | 
			
				
			 | 
			
			
				-            [fileHandle closeFile]; 
			 | 
		
	
		
			
			| 
				113
			 | 
			
				123
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				114
			 | 
			
				124
			 | 
			
			
				         fm = nil; 
			 | 
		
	
		
			
			| 
				115
			 | 
			
				125
			 | 
			
			
				         resolve([NSNull null]); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -120,22 +130,38 @@ NSMutableDictionary *fileStreams = nil; 
			 | 
		
	
		
			
			| 
				120
			 | 
			
				130
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				121
			 | 
			
				131
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				122
			 | 
			
				132
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				123
			 | 
			
				
			 | 
			
			
				-+ (void) writeFileArray:(NSString *)path data:(NSArray *)data resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				133
			 | 
			
			
				++ (void) writeFileArray:(NSString *)path data:(NSArray *)data append:(BOOL)append resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject { 
			 | 
		
	
		
			
			| 
				124
			 | 
			
				134
			 | 
			
			
				     @try { 
			 | 
		
	
		
			
			| 
				125
			 | 
			
				135
			 | 
			
			
				         NSFileManager * fm = [NSFileManager defaultManager]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				136
			 | 
			
			
				+        NSError * err = nil; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				137
			 | 
			
			
				+        // check if the folder exists, if not exists, create folders recursively 
			 | 
		
	
		
			
			| 
				
			 | 
			
				138
			 | 
			
			
				+        // after the folders created, write data into the file 
			 | 
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				+        NSString * folder = [path stringByDeletingLastPathComponent]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				140
			 | 
			
			
				+        if(![fm fileExistsAtPath:folder]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				141
			 | 
			
			
				+            [fm createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:NULL error:&err]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				142
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				126
			 | 
			
				143
			 | 
			
			
				         NSMutableData * fileContent = [NSMutableData alloc]; 
			 | 
		
	
		
			
			| 
				127
			 | 
			
				144
			 | 
			
			
				         // prevent stack overflow, alloc on heap 
			 | 
		
	
		
			
			| 
				128
			 | 
			
				145
			 | 
			
			
				         char * bytes = (char*) malloc([data count]); 
			 | 
		
	
		
			
			| 
				129
			 | 
			
				146
			 | 
			
			
				         for(int i = 0; i < data.count; i++) { 
			 | 
		
	
		
			
			| 
				130
			 | 
			
				147
			 | 
			
			
				             bytes[i] = [[data objectAtIndex:i] charValue]; 
			 | 
		
	
		
			
			| 
				131
			 | 
			
				148
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				132
			 | 
			
				
			 | 
			
			
				-        // if append == NO 
			 | 
		
	
		
			
			| 
				133
			 | 
			
				
			 | 
			
			
				-//        BOOL success = [fm createFileAtPath:path contents:fileContent attributes:NULL]; 
			 | 
		
	
		
			
			| 
				134
			 | 
			
				149
			 | 
			
			
				         [fileContent appendBytes:bytes length:data.count]; 
			 | 
		
	
		
			
			| 
				135
			 | 
			
				
			 | 
			
			
				-        NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:path]; 
			 | 
		
	
		
			
			| 
				136
			 | 
			
				
			 | 
			
			
				-        [fileHandle seekToEndOfFile]; 
			 | 
		
	
		
			
			| 
				137
			 | 
			
				
			 | 
			
			
				-        [fileHandle writeData:fileContent]; 
			 | 
		
	
		
			
			| 
				138
			 | 
			
				
			 | 
			
			
				-        [fileHandle closeFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				150
			 | 
			
			
				+        if(![fm fileExistsAtPath:path]) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				151
			 | 
			
			
				+            [fm createFileAtPath:path contents:fileContent attributes:NULL]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				152
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				153
			 | 
			
			
				+        // if file exists, write file 
			 | 
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				+        else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				155
			 | 
			
			
				+            if(append == YES) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				156
			 | 
			
			
				+                NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:path]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				157
			 | 
			
			
				+                [fileHandle seekToEndOfFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				158
			 | 
			
			
				+                [fileHandle writeData:fileContent]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				159
			 | 
			
			
				+                [fileHandle closeFile]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				160
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				161
			 | 
			
			
				+            else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				162
			 | 
			
			
				+                [fileContent writeToFile:path atomically:YES]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				163
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				164
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				139
			 | 
			
				165
			 | 
			
			
				         free(bytes); 
			 | 
		
	
		
			
			| 
				140
			 | 
			
				166
			 | 
			
			
				         fm = nil; 
			 | 
		
	
		
			
			| 
				141
			 | 
			
				167
			 | 
			
			
				         resolve([NSNull null]); 
			 |