Skip to content

Commit

Permalink
fix: Create [bundle ID] folder during migration if none exists (#303)
Browse files Browse the repository at this point in the history
  • Loading branch information
joonmanji committed Feb 28, 2020
1 parent f0b9725 commit 8616cbd
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions ios/RNCAsyncStorage.m
Original file line number Diff line number Diff line change
Expand Up @@ -215,12 +215,32 @@ static void RCTStorageDirectoryCleanupOld(NSString *oldDirectoryPath)
}
}

static void _createStorageDirectory(NSString *storageDirectory, NSError **error)
{
[[NSFileManager defaultManager] createDirectoryAtPath:storageDirectory
withIntermediateDirectories:YES
attributes:nil
error:error];
}

static void RCTStorageDirectoryMigrate(NSString *oldDirectoryPath, NSString *newDirectoryPath, BOOL shouldCleanupOldDirectory)
{
NSError *error;
// Migrate data by copying old storage directory to new storage directory location
if (![[NSFileManager defaultManager] copyItemAtPath:oldDirectoryPath toPath:newDirectoryPath error:&error]) {
RCTStorageDirectoryMigrationLogError(@"Failed to copy old storage directory to new storage directory location during migration", error);
// the new storage directory "Application Support/[bundleID]/RCTAsyncLocalStorage_V1" seems unable to migrate
// because folder "Application Support/[bundleID]" doesn't exist.. create this folder and attempt folder copying again
if (error != nil && error.code == 4 && [newDirectoryPath isEqualToString:RCTGetStorageDirectory()]) {
NSError *error = nil;
_createStorageDirectory(RCTCreateStorageDirectoryPath(@""), &error);
if (error == nil) {
RCTStorageDirectoryMigrate(oldDirectoryPath, newDirectoryPath, shouldCleanupOldDirectory);
} else {
RCTStorageDirectoryMigrationLogError(@"Failed to create storage directory during migration.", error);
}
} else {
RCTStorageDirectoryMigrationLogError(@"Failed to copy old storage directory to new storage directory location during migration", error);
}
} else if (shouldCleanupOldDirectory) {
// If copying succeeds, remove old storage directory
RCTStorageDirectoryCleanupOld(oldDirectoryPath);
Expand Down Expand Up @@ -356,10 +376,7 @@ - (NSDictionary *)_ensureSetup

NSError *error = nil;
if (!RCTHasCreatedStorageDirectory) {
[[NSFileManager defaultManager] createDirectoryAtPath:RCTGetStorageDirectory()
withIntermediateDirectories:YES
attributes:nil
error:&error];
_createStorageDirectory(RCTGetStorageDirectory(), &error);
if (error) {
return RCTMakeError(@"Failed to create storage directory.", error, nil);
}
Expand Down

0 comments on commit 8616cbd

Please sign in to comment.